Back to skill

Security audit

Infographic

Security checks for vulnerabilities and agentic risk

Overview

The skill is a legitimate infographic image-generation workflow, but its runtime can upload local files as reference images despite documentation saying local paths are rejected, and it has avoidable API-key handling risks.

Review before installing. Use this only if you are comfortable sending infographic prompts and source summaries to WeryAI. Do not pass local files as `--ref` or include untrusted batch files until the implementation matches the public-URL-only documentation. Prefer an environment variable or a protected secret store over persisted project `.env` credentials, restrict file permissions if you do persist a key, and use a trusted preinstalled or pinned Bun runtime.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
Findings (4)

T09 · Insecure Skill Coding Practices

Error
Location
scripts/vendor/shared-image-generation/scripts/main.ts:170
Finding

API Key Disclosure Through Unvalidated Result Image URLs

Content
View full analysis
{ let lastErr = ""; const transientStatus = (status: number) => status === 408 || status === 429 || status === 502 || status === 503 || status === 504 || (status >= 520 && status <= 599); const transientNetwork = (e: unknown) => { const name = e instanceof Error ? e.name : ""; const msg = e instanceof Error ? e.message : String(e); return ( name === "AbortError" || msg.includes("timeout") || msg.includes("Timeout") || msg.includes("fetch failed") || msg.includes("ECONNRESET") || msg.includes("ETIMEDOUT") || msg.includes("EAI_AGAIN") ); }; for (let attempt = 1; attempt <= DOWNLOAD_MAX_ATTEMPTS; attempt++) { let res: Response | null = null; let threw: unknown = null; for (const useAuth of [false, true] as const) { try { const init: RequestInit = { signal: AbortSignal.timeout(DOWNLOAD_TIMEOUT_MS) }; if (useAuth) init.headers = { Authorization: `Bearer ${getApiKey()}` }; res = await fetch(url, init); threw = null; if (res.ok) break; lastErr = `HTTP ${res.status}`; if (!useAuth && (res.status === 401 || res.status === 403)) continue; break; } catch (e) { threw = e; res = null; lastErr = e instanceof Error ? e.message : String(e); if (!useAuth) continue; break; } } ``` The URL is consumed from the gateway task result without origin validation: ```ts for (let i = 0; i < images.length; i++) { const { bytes, contentType ...[truncated 2062 chars]
Remediation
View remediation

T05 · Unauthorized Access and Privilege Escalation

Error
Location
scripts/vendor/shared-image-generation/scripts/main.ts:304
Finding

Arbitrary Local Files Can Be Uploaded as Reference Images

Content
View full analysis
{ for (const refPath of paths) { const t = refPath.trim(); if (/^https?:\/\//i.test(t)) continue; const fullPath = path.resolve(refPath); try { await access(fullPath); } catch { throw new Error(`Reference image not found: ${fullPath}`); } } } ``` The resulting Base64 data is included in a request to the external gateway: ```ts const pathSuffix = referenceImages.length > 0 ? "/v1/generation/image-to-image" : "/v1/generation/text-to-image"; const body: Record = referenceImages.length > 0 ? { ...baseBody, images: referenceImages.map(toImagePayloadValue) } : baseBody; ``` ### Technical Analysis Any non-HTTP reference argument is resolved as a local filesystem path. The runtime does not: - Restrict the path to the project or an approved image directory. - Verify that the target is a regular file. - Reject symbolic links. - Validate image signatures or decoded image content. - Restrict file extensions. - Enforce a maximum input size. - Require explicit approval ...[truncated 1662 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/vendor/shared-image-generation/scripts/setup.mjs:119
Finding

Persisted API Key Is Written Without Restrictive File Permissions

Content
View full analysis
/.env`. 3. The fil ...[truncated 634 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Warning
Location
package.json:13
Finding

Unpinned Runtime Package Execution Through npx

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • System Prompt LeakageDirect Leakage, Indirect Extraction, Tool-Based Exfiltration
  • Rogue AgentSelf-Modification, Session Persistence
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (74)

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

If the skill is effectively a generic text-to-image wrapper while marketed as infographic tooling, users may unknowingly send sensitive source material to a third-party service expecting a more specialized local transformation. The danger is heightened by the skill’s emphasis on structured content files, which can encourage users to place substantial proprietary material into inputs that are later transmitted remotely.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding

If the skill is effectively a generic text-to-image wrapper while marketed as infographic tooling, users may unknowingly send sensitive source material to a third-party service expecting a more specialized local transformation. The danger is heightened by the skill’s emphasis on structured content files, which can encourage users to place substantial proprietary material into inputs that are later transmitted remotely.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

If the skill is effectively a generic text-to-image wrapper while marketed as infographic tooling, users may unknowingly send sensitive source material to a third-party service expecting a more specialized local transformation. The danger is heightened by the skill’s emphasis on structured content files, which can encourage users to place substantial proprietary material into inputs that are later transmitted remotely.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

If the skill is effectively a generic text-to-image wrapper while marketed as infographic tooling, users may unknowingly send sensitive source material to a third-party service expecting a more specialized local transformation. The danger is heightened by the skill’s emphasis on structured content files, which can encourage users to place substantial proprietary material into inputs that are later transmitted remotely.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

If the skill is effectively a generic text-to-image wrapper while marketed as infographic tooling, users may unknowingly send sensitive source material to a third-party service expecting a more specialized local transformation. The danger is heightened by the skill’s emphasis on structured content files, which can encourage users to place substantial proprietary material into inputs that are later transmitted remotely.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

If the skill is effectively a generic text-to-image wrapper while marketed as infographic tooling, users may unknowingly send sensitive source material to a third-party service expecting a more specialized local transformation. The danger is heightened by the skill’s emphasis on structured content files, which can encourage users to place substantial proprietary material into inputs that are later transmitted remotely.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

If the skill is effectively a generic text-to-image wrapper while marketed as infographic tooling, users may unknowingly send sensitive source material to a third-party service expecting a more specialized local transformation. The danger is heightened by the skill’s emphasis on structured content files, which can encourage users to place substantial proprietary material into inputs that are later transmitted remotely.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

If the skill is effectively a generic text-to-image wrapper while marketed as infographic tooling, users may unknowingly send sensitive source material to a third-party service expecting a more specialized local transformation. The danger is heightened by the skill’s emphasis on structured content files, which can encourage users to place substantial proprietary material into inputs that are later transmitted remotely.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

If the skill is effectively a generic text-to-image wrapper while marketed as infographic tooling, users may unknowingly send sensitive source material to a third-party service expecting a more specialized local transformation. The danger is heightened by the skill’s emphasis on structured content files, which can encourage users to place substantial proprietary material into inputs that are later transmitted remotely.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

If the skill is effectively a generic text-to-image wrapper while marketed as infographic tooling, users may unknowingly send sensitive source material to a third-party service expecting a more specialized local transformation. The danger is heightened by the skill’s emphasis on structured content files, which can encourage users to place substantial proprietary material into inputs that are later transmitted remotely.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

If the skill is effectively a generic text-to-image wrapper while marketed as infographic tooling, users may unknowingly send sensitive source material to a third-party service expecting a more specialized local transformation. The danger is heightened by the skill’s emphasis on structured content files, which can encourage users to place substantial proprietary material into inputs that are later transmitted remotely.

Content

No source excerpt is available for this finding.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 27)May include surrounding context.

md
- `scripts/build-batch.ts`

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 69)May include surrounding context.

md
- `scripts/build-batch.ts`

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 242)May include surrounding context.

md
- `scripts/build-batch.ts`

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 72)May include surrounding context.

md
| `./scripts/vendor/compression-runtime/scripts/main.ts` | Compress output for delivery |

Direct Prompt Extraction

High
Category
System Prompt Leakage
Confidence
85% confidence
Finding

Skill contains instructions that could directly expose system prompts, internal rules, or hidden instructions to users or external parties.

Content

Scanner excerpt · scripts/build-prompt.ts (reported line 25)May include surrounding context.

ts
function printUsage(): void {
  console.log(`Usage:
  npx -y bun scripts/build-prompt.ts --structured-content structured-content.md --output prompts/infographic.md [options]

Options:
  --structured-content <path>  Path to structured-content.md

Direct Prompt Extraction

High
Category
System Prompt Leakage
Confidence
85% confidence
Finding

Skill contains instructions that could directly expose system prompts, internal rules, or hidden instructions to users or external parties.

Content

Scanner excerpt · scripts/build-prompt.ts (reported line 29)May include surrounding context.

ts
Options:
  --structured-content <path>  Path to structured-content.md
  --output <path>              Output prompt path
  --audience <text>            Target audience (default: target audience)
  --style <name>               Style direction (default: infographic)
  --aspect <ratio>             Aspect ratio (default: 3:4)

Direct Prompt Extraction

High
Category
System Prompt Leakage
Confidence
85% confidence
Finding

Skill contains instructions that could directly expose system prompts, internal rules, or hidden instructions to users or external parties.

Content

Scanner excerpt · scripts/build-prompt.ts (reported line 167)May include surrounding context.

ts
"Avoid: cluttered background, unreadable tiny text, broken charts, random decorative noise, watermark.",
  ].filter(Boolean);

  return promptLines.join("\n") + "\n";
}

async function main(): Promise<void> {

Direct Prompt Extraction

High
Category
System Prompt Leakage
Confidence
85% confidence
Finding

Skill contains instructions that could directly expose system prompts, internal rules, or hidden instructions to users or external parties.

Content

Scanner excerpt · scripts/vendor/shared-image-generation/scripts/main.ts (reported line 602)May include surrounding context.

ts
"Avoid: cluttered background, unreadable tiny text, broken charts, random decorative noise, watermark.",
  ].filter(Boolean);

  return promptLines.join("\n") + "\n";
}

async function main(): Promise<void> {

Self-Modification

High
Category
Rogue Agent
Confidence
85% confidence
Finding

Skill modifies its own code, configuration, or behavior at runtime. Self-modification enables an agent to escalate privileges, disable safety constraints, or install persistent backdoors.

Content

Scanner excerpt · scripts/scaffold.ts (reported line 23)May include surrounding context.

ts
--output-dir <path>   Target infographic working directory
  --topic <text>        Main topic placeholder
  --lang <code>         On-image text language when needed (default placeholder: en)
  --force               Overwrite existing files
  -h, --help            Show help`);
}

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/vendor/shared-image-generation/scripts/doctor.mjs (reported line 90)May include surrounding context.

js
const projectSkillDir = path.join(projectRoot, ".image-skills", skillNamespace);
  const homeSkillDir = homeRoot ? path.join(homeRoot, ".image-skills", skillNamespace) : null;

  const projectEnvPath = path.join(projectRoot, ".image-skills", skillNamespace, ".env");
  const projectEnvFile = pathExists(projectEnvPath);
  let apiKeyInProjectEnv = false;
  if (projectEnvFile) {

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/vendor/shared-image-generation/scripts/main.ts (reported line 403)May include surrounding context.

ts
const projectSkillDir = path.join(projectRoot, ".image-skills", skillNamespace);
  const homeSkillDir = homeRoot ? path.join(homeRoot, ".image-skills", skillNamespace) : null;

  const projectEnvPath = path.join(projectRoot, ".image-skills", skillNamespace, ".env");
  const projectEnvFile = pathExists(projectEnvPath);
  let apiKeyInProjectEnv = false;
  if (projectEnvFile) {

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/vendor/shared-image-generation/scripts/main.ts (reported line 476)May include surrounding context.

ts
const projectSkillDir = path.join(projectRoot, ".image-skills", skillNamespace);
  const homeSkillDir = homeRoot ? path.join(homeRoot, ".image-skills", skillNamespace) : null;

  const projectEnvPath = path.join(projectRoot, ".image-skills", skillNamespace, ".env");
  const projectEnvFile = pathExists(projectEnvPath);
  let apiKeyInProjectEnv = false;
  if (projectEnvFile) {

Credential Access

High
Category
Privilege Escalation
Confidence
71% confidence
Finding

The loader imports every key/value from project and home .env files into process.env without allowlisting, based on a project root that can be influenced by CLI arguments or working directory. In a skill context, this can cause ambient secret exposure to downstream code or libraries and broadens trust in local project content more than necessary.

Content

Scanner excerpt · scripts/vendor/shared-image-generation/scripts/main.ts (reported line 477)May include surrounding context.

ts
const home = homedir();
  const mergedFiles = {
    ...(await loadEnvFile(path.join(home, ".image-skills", SKILL_NAMESPACE, ".env"))),
    ...(await loadEnvFile(path.join(projectRoot, ".image-skills", SKILL_NAMESPACE, ".env"))),
  };
  for (const [k, v] of Object.entries(mergedFiles)) {
    if (!process.env[k]) process.env[k] = v;

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/vendor/shared-image-generation/scripts/doctor.mjs (reported line 284)May include surrounding context.

js
-h, --help            Show help

What this does:
  1) Optionally writes IMAGE_GEN_API_KEY into the local skill .env
  2) Runs doctor (read-only)
  3) Ensures a MODELS.json exists (writes the bundled starter if missing)
  4) Initializes EXTEND.md with Nano Banana 2 if no default model exists yet

Static analysis

Detected: suspicious.dangerous_exec, suspicious.env_credential_access, suspicious.potential_exfiltration

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
scripts/bootstrap.mjs:86

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
scripts/setup.mjs:21

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
scripts/vendor/compression-runtime/scripts/main.ts:158

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
scripts/vendor/shared-image-generation/scripts/bootstrap.mjs:86

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
scripts/vendor/shared-image-generation/scripts/doctor.mjs:56

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
scripts/vendor/shared-image-generation/scripts/smoke-check.mjs:18

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
scripts/vendor/weryai-image/discover-models.mjs:9

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
scripts/vendor/weryai-image/doctor.mjs:9

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
scripts/vendor/weryai-image/main.ts:15

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
scripts/vendor/weryai-image/recommend-model.mjs:9

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
scripts/vendor/weryai-image/run-generate.mjs:39

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
scripts/vendor/weryai-image/setup.mjs:9

Environment variable access combined with network send.

Critical
Code
suspicious.env_credential_access
Location
scripts/vendor/shared-image-generation/scripts/main.ts:51

File read combined with network send (possible exfiltration).

Warn
Code
suspicious.potential_exfiltration
Location
scripts/vendor/shared-image-generation/scripts/main.ts:6