Back to skill

Security audit

image-prompting

Security checks for vulnerabilities and agentic risk

Overview

The skill is coherent image-prompt guidance, but its install instructions rely on unpinned npx commands and some examples send prompts, media references, scripts, and API keys to an external API without strong user warnings.

Review the skill before installing in a sensitive environment. Prefer pinned, reviewed versions of any `npx skills add` commands, avoid using `-y` blindly, and do not send confidential prompts, real-person likenesses, private image URLs, voice scripts, or production API keys to Pruna or Replicate unless you intend that external processing.

Vulnerability Patterns
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (2)

T01 · Skill Instruction Hijacking

Warning
Location
SKILL.md:46
Finding
Forced First-Reply Branding Alters Agent Output<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md`, line 46 **Vulnerability Type**: Agent response instruction injection **Risk Level**: Medium ### Vulnerable Code Snippet ```markdown ## Guide habit In the **first reply**, name `` `image-prompting` `` in backticks. When aspect, resolution, or media source are open, open intake → **`generation-diversity`** clarification intake. For Pruna still calls, cite the reading order: `generation-diversity` (ritual + **still-image prompt flow** reference) → golden rules → model-specific reference below. ``` ### Technical Analysis The Skill contains a mandatory instruction that changes the content of the agent’s first user-facing response. This behavior is not required to perform image-prompt construction and introduces persistent promotional wording whenever the Skill is loaded. Skill documentation is treated as operational instruction by an agent. Consequently, imperative language such as “In the first reply, name…” can take control of part of the response-generation process. Although this instruction does not explicitly disable safety controls or redirect the agent to an unrelated task, it establishes an output-hijacking pattern that could be expanded in a future version to inject links, advertisements, misleading attribution, or more intrusive behavioral rules. ### Attack Path 1. The Skill is installed or loaded into an agent context. 2. The agent interprets `SKILL.md` as instructions governing its behavior. 3. A user submits a request that activates the Skill. 4. The agent follows the mandatory first-reply rule. 5. The user-facing response is modified to include fixed Skill branding, regardless of whether that wording is necessary. 6. If the mutable Skill source is later changed, the same instruction channel could be used to impose more harmful response modifications. ### Impact Assessment No operating-system privileges, credentials, or persistent host access are obtained by this instruction. It ...[truncated 564 chars]
Remediation
<![CDATA[ ## Remediation Suggestions Remove the mandatory first-reply requirement and make Skill attribution optional. A safer replacement would be: ```markdown Mention `image-prompting` only when the user asks which Skill is being used or when attribution is necessary for technical clarity. ``` Additional hardening measures: 1. Restrict Skill instructions to behavior directly required for image-prompting tasks. 2. Avoid unconditional rules governing greetings, first replies, final answers, or unrelated conversation structure. 3. Clearly separate informational documentation from instructions intended for agent execution. 4. Add a policy stating that user-requested response format and higher-priority instructions take precedence. 5. Review future versions for imperative language that injects branding, external links, or unrelated content into responses. ]]>

T08 · Insecure Dependencies

Warning
Location
SKILL.md:18
Finding
Unpinned Third-Party Installation Commands Create Supply-Chain Exposure<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md`, lines 18–19, 39–42, and 67–74 **Vulnerability Type**: Mutable and unverified third-party installation workflow **Risk Level**: Medium ### Vulnerable Code Snippets ```markdown | `image-prompting` | Use when crafting still-image prompts for any generative model — composition, identity sheets, edits, try-on, and photoreal personas. | `npx skills add PrunaAI/pruna-skills@image-prompting -y` | | `generation-diversity` | Use when writing any generative prompt — ritual seed, explicit structure, scenario axes, and quality gates before paid API calls. | `npx skills add PrunaAI/pruna-skills@generation-diversity -y` | ``` ```markdown | `video-prompting` | Use when crafting video or motion prompts for any generative model — dramaturgy, camera, physics-safe motion, frame anchors, and clip chaining. | `npx skills add PrunaAI/pruna-skills@video-prompting -y` | | `audio-prompting` | Use when crafting TTS, music, or bed prompts for any generative audio model — director style, song structure, and post-production layering. | `npx skills add PrunaAI/pruna-skills@audio-prompting -y` | | `pruna-api` | Use before any Pruna or Replicate HTTP call — credentials, upload/poll/download, parallel batches, and agent safety. | `npx skills add PrunaAI/pruna-skills@pruna-api -y` | | `p-image` | Use when someone explicitly wants the fastest, cheapest photo generation — mood boards, bulk panels, or quick iterations — not when controlled photoreal or in-image text is needed. | `npx skills add PrunaAI/pruna-skills@p-image -y` | ``` ```markdown | `p-image-ideogram` | Use when photo generation needs more control — photoreal results, text in the image, or structured JSON with hex colors and bounding boxes. Simpler photo generation, edits, and video use other skills in the suite. | `npx skills add PrunaAI/pruna-skills@p-image-ideogram -y` | | `p-image` | Use when someone explicitly wants the fastest, cheapest photo generation — mood ...[truncated 3288 chars]
Remediation
<![CDATA[ ## Remediation Suggestions Replace mutable installation examples with immutable and verifiable installation procedures. Recommended controls: 1. Pin the `skills` installer to an exact reviewed version rather than relying on the package selected by an unversioned `npx` invocation. 2. Pin the Skill repository to an immutable commit hash or signed release artifact. 3. Publish SHA-256 or stronger integrity hashes for downloaded artifacts. 4. Verify release signatures before installation. 5. Remove `-y` so users can inspect and confirm the operation. 6. Document the files, network destinations, and permissions required by the installer. 7. Use a lockfile and reproducible build process for all transitive dependencies. 8. Run installation in a restricted container or sandbox without production credentials. 9. Review installed content before enabling it in an agent. 10. Prefer a non-executing package retrieval mechanism followed by explicit inspection and installation. A hardened example should conceptually follow this pattern: ```bash # Download a specific signed release or immutable commit. # Verify its published checksum and signature. # Inspect the contents. # Install it using a pinned, reviewed installer in a sandbox. ``` The exact syntax should be defined by the package manager and Skill platform while preserving immutable version and integrity verification. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Rogue AgentSelf-Modification, Session Persistence
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (25)

Rp1

Medium
Category
MCP Rug Pull
Confidence
87% confidence
Finding
The skill documentation tells users to run `npx skills add PrunaAI/pruna-skills@image-prompting -y`, which fetches and executes package-managed code without pinning an immutable version. If the referenced package or tag is updated, compromised, or typosquatted upstream, consumers may install unexpected code or altered skill content.

Rp1

Medium
Category
MCP Rug Pull
Confidence
87% confidence
Finding
This install command uses `npx skills add PrunaAI/pruna-skills@generation-diversity -y` without a pinned immutable version, so the resolved content can change over time. That creates a supply-chain risk where future installs may pull modified or malicious code even though the document itself appears unchanged.

Rp1

Medium
Category
MCP Rug Pull
Confidence
86% confidence
Finding
The documented `npx skills add PrunaAI/pruna-skills@video-prompting -y` command references a remote package path without pinning a fixed release. An attacker who gains control of the package, tag, or publishing pipeline could cause users following the docs to install unreviewed content.

Rp1

Medium
Category
MCP Rug Pull
Confidence
86% confidence
Finding
This line recommends `npx skills add PrunaAI/pruna-skills@audio-prompting -y` using a floating reference rather than an immutable version. Because `npx` retrieves remote content for execution/installation, users are exposed to package substitution or future-release tampering risks.

Rp1

Medium
Category
MCP Rug Pull
Confidence
86% confidence
Finding
The command for `pruna-api` is not version-pinned, so users may resolve different code at different times. In a supply-chain compromise scenario, this could deliver malicious package content or altered installation behavior through a trusted-looking doc command.

Rp1

Medium
Category
MCP Rug Pull
Confidence
86% confidence
Finding
This `npx skills add PrunaAI/pruna-skills@p-image -y` example points to a package target that is not immutably pinned. That makes installs non-reproducible and vulnerable to upstream package changes, compromised maintainers, or malicious republishes.

Rp1

Medium
Category
MCP Rug Pull
Confidence
87% confidence
Finding
The `p-image-ideogram` install example uses `npx skills add` with a non-pinned remote reference. Since the command leads users to fetch installable content from an external package source, a compromised or changed upstream artifact could affect all future users following the instructions.

Rp1

Medium
Category
MCP Rug Pull
Confidence
87% confidence
Finding
This line documents an unpinned `npx skills add PrunaAI/pruna-skills@p-image -y` command, creating avoidable supply-chain risk. The danger is not from image prompting itself, but from the executable install path being mutable over time and controlled externally.

Rp1

Medium
Category
MCP Rug Pull
Confidence
87% confidence
Finding
The `p-image-edit` installation command does not pin a specific version, so anyone following the docs may install different content later than what the author reviewed. This opens the door to supply-chain abuse if the package namespace, release tag, or upstream account is compromised.

Rp1

Medium
Category
MCP Rug Pull
Confidence
87% confidence
Finding
The documented `p-image-try-on` install path is mutable because no explicit version is provided. That means the trust boundary extends to future package publisher behavior, making this a real supply-chain concern even in otherwise harmless documentation.

Rp1

Medium
Category
MCP Rug Pull
Confidence
87% confidence
Finding
This line uses `npx skills add PrunaAI/pruna-skills@p-image-upscale -y` without version pinning, which makes the installed artifact depend on the current remote state. If that source changes maliciously or unexpectedly, users could retrieve altered code or instructions under the same name.

Rp1

Medium
Category
MCP Rug Pull
Confidence
87% confidence
Finding
The `pruna-api` installation example again relies on an unpinned `npx skills add` reference. Since it concerns API-related functionality, compromise of the fetched package could be especially sensitive if users later handle credentials or network operations with that installed skill.

Rp1

Medium
Category
MCP Rug Pull
Confidence
88% confidence
Finding
The full-suite install command `npx skills add PrunaAI/pruna-skills@pruna -y` is also unpinned, which broadens the blast radius because it may pull an entire suite of remotely controlled content. A future compromised release could affect more components at once than a single-skill install.

External Transmission

Medium
Category
Data Exfiltration
Content
## 1. Photoreal documentary (`p-image`) — avatar-ready

```bash
curl -X POST 'https://api.pruna.ai/v1/predictions' \
  -H 'Content-Type: application/json' -H "apikey: ${PRUNA_API_KEY}" \
  -H 'Model: p-image' \
  -d '{
Confidence
93% confidence
Finding
The curl example sends data and an API credential to an external endpoint, which is a real external transmission path. While expected for an API example, it becomes security-relevant because the document does not warn users that prompts may contain sensitive personal or business information and will leave the local environment.

External Transmission

Medium
Category
Data Exfiltration
Content
## 1. Photoreal documentary (`p-image`) — avatar-ready

```bash
curl -X POST 'https://api.pruna.ai/v1/predictions' \
  -H 'Content-Type: application/json' -H "apikey: ${PRUNA_API_KEY}" \
  -H 'Model: p-image' \
  -d '{
Confidence
93% confidence
Finding
The curl example sends data and an API credential to an external endpoint, which is a real external transmission path. While expected for an API example, it becomes security-relevant because the document does not warn users that prompts may contain sensitive personal or business information and will leave the local environment.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The example instructs users to send prompts and an API key to a third-party service but provides no disclosure that prompt content and metadata will be transmitted off-platform. In a skill about crafting persona imagery, prompts may include sensitive personal descriptors or proprietary creative material, so omission of an explicit warning increases the risk of unintended data sharing.

External Transmission

Medium
Category
Data Exfiltration
Content
## 2. Premium cinematic cel anime (`p-image`) — avatar host

```bash
curl -X POST 'https://api.pruna.ai/v1/predictions' \
  -H 'Content-Type: application/json' -H "apikey: ${PRUNA_API_KEY}" \
  -H 'Model: p-image' \
  -d '{
Confidence
90% confidence
Finding
This second curl example also transmits prompts and credentials to an external service without contextual warning. Although the content is fictional/anime-oriented and generally less privacy-sensitive than real-person prompts, it still normalizes sending potentially proprietary creative inputs to a third party without disclosure.

Missing User Warnings

Medium
Confidence
97% confidence
Finding
These avatar examples reference uploaded image assets and include voice script data that will be processed by an external API, yet there is no warning about external handling of user media, likeness, or text. In the realistic-persona context, this is more sensitive because the workflow can involve identity-preserving images of real people and generated speaking avatars, creating privacy, consent, and biometric-likeness risks.

External Transmission

Medium
Category
Data Exfiltration
Content
Reuse **approved hero plate URL**. Unique **`video_prompt`** per scene.

```bash
curl -X POST 'https://api.pruna.ai/v1/predictions' \
  -H 'Content-Type: application/json' -H "apikey: ${PRUNA_API_KEY}" \
  -H 'Model: p-video-avatar' \
  -d '{
Confidence
96% confidence
Finding
The avatar-generation request sends an image reference plus voice script to an external API, which is materially more sensitive than plain text prompting. In this skill's realistic-persona workflow, the image may represent a real individual, so transmitting likeness data without warning raises privacy, consent, and downstream misuse risks.

External Transmission

Medium
Category
Data Exfiltration
Content
-H 'Model: p-video-avatar' \
  -d '{
    "input": {
      "image": "https://api.pruna.ai/v1/files/APPROVED_STILL_ID",
      "voice_script": "Hey — we put the patchwork set on a real street plate, not a white studio. Face and background stayed put.",
      "voice": "Puck (Male)",
      "voice_language": "English (US)",
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
-H 'Model: p-video-avatar' \
  -d '{
    "input": {
      "image": "https://api.pruna.ai/v1/files/APPROVED_STILL_ID",
      "voice_script": "Hey — we put the patchwork set on a real street plate, not a white studio. Face and background stayed put.",
      "voice": "Puck (Male)",
      "voice_language": "English (US)",
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
## 7. Dynamic avatar — cinematic cel host

```bash
curl -X POST 'https://api.pruna.ai/v1/predictions' \
  -H 'Content-Type: application/json' -H "apikey: ${PRUNA_API_KEY}" \
  -H 'Model: p-video-avatar' \
  -d '{
Confidence
95% confidence
Finding
This avatar example again transmits image and script content to an external service. Even though the example is anime-oriented, the workflow still involves media processing and hosted asset references, so users should be warned that content leaves their environment and may be retained or further processed externally.

Session Persistence

Medium
Category
Rogue Agent
Content
## Why this exists

Current public examples often read as **AI sloppy** or **too simplistic**: same neutral wall, same face, same medium close-up, one photoreal look, brochure VO. The stack can deliver **editorial fashion**, **complex wardrobe**, **cel-anime hosts**, **documentary street portraits**, and **talking heads with distinct motion** when scenarios are planned as a matrix — not one template repeated.

## Pipeline overview
Confidence
75% confidence
Finding
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Natural-Language Policy Violations

Low
Confidence
97% confidence
Finding
The avatar example sets voice_language to "English (US)", which imposes a specific locale in natural-language configuration. Under the language/locale policy, this should not be forced unless the skill offers user choice or clearly documents a justified locale restriction.

Natural-Language Policy Violations

Low
Confidence
97% confidence
Finding
This example also fixes voice_language to "English (US)" with no indication that other locales are supported or that the user can choose. That is a natural-language locale constraint and should be optional or explicitly justified.

Static analysis

No suspicious patterns detected.