Back to skill

Security audit

jimeng generator

Security checks for vulnerabilities and agentic risk

Overview

The skill appears to be a real VolcEngine image generator, but it gives unsafe credential setup guidance and has supply-chain issues users should review before installing.

Review this skill before installing. Use short-lived, least-privilege VolcEngine credentials if possible, do not rely on the package to protect a .env file, add your own .gitignore before creating secrets, avoid private image URLs, and update or review the npm dependency lockfile before running npm install.

Vulnerability Patterns
  • 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
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
Findings (2)

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:29
Finding

Credential File Is Not Protected Despite Documentation Assurance

Content
View full analysis

Vulnerability Details

File Location: SKILL.md:29-34
Vulnerability Type: Missing credential-file protection and misleading security documentation
Risk Level: Medium

Relevant excerpt translated into English:

markdown
The project provides an `.env.example` template, which can be copied and modified:

```bash
cp .env.example .env

The .env file is ignored by .gitignore and will not be committed, so real credentials can be safely entered.

text

Neither `.gitignore` nor `.env.example` exists in the audited project. Meanwhile, `scripts/generate.ts:20-31` automatically reads credentials from a root-level `.env` file.

### Technical Analysis

The setup instructions explicitly encourage users to store a VolcEngine Access Key and Secret Key in `.env` and assure them that Git ignores this file. That assurance is false for the audited package because no `.gitignore` is present.

Secret files must be excluded by an actual repository control rather than documentation alone. Without that control, commands such as `git add .`, automated repository synchronization, archive creation, or broad file-upload operations can include `.env`.

This issue does not independently transmit credentials to an attacker. Exploitation requires the credential file to be committed, published, uploaded, or otherwise exposed after a user follows the documented setup process.

### Attack Path

1. A user follows the Skill instructions and creates `.env`.
2. The user places `VOLCENGINE_AK` and `VOLCENGINE_SK`, or an STS token, in that file.
3. Because the project contains no `.gitignore`, Git and other broad file-collection tools do not exclude `.env`.
4. The user runs a command such as `git add .`, publishes the repository, or uploads the complete project directory.
5. An attacker obtains the exposed credential file.
6. The attacker uses the credentials against VolcEngine APIs within the permissions assigned to the affected id
...[truncated 447 chars]
Remediation
View remediation

Remediation Suggestions

  1. Add a root-level .gitignore containing at least:
    gitignore
    .env
    .env.*
    !.env.example
    output/
    dist/
    node_modules/
    
  2. Add the referenced .env.example with placeholders only:
    dotenv
    VOLCENGINE_AK=
    VOLCENGINE_SK=
    VOLCENGINE_TOKEN=
    
  3. Replace the absolute safety assurance with instructions to verify exclusion:
    bash
    git check-ignore .env
    
  4. Prefer short-lived STS credentials with minimum required permissions over permanent access keys.
  5. Add secret scanning to CI and pre-commit workflows.
  6. If credentials have already entered repository history, revoke or rotate them immediately; deleting the file from the latest commit is insufficient.

T08 · Insecure Dependencies

Note
Location
package-lock.json:138
Finding

Dependency Lockfile Uses a Non-Canonical Package Registry Mirror

Content
View full analysis

Vulnerability Details

File Location: package-lock.json:138-149
Vulnerability Type: Third-party dependency distribution through an additional supply-chain intermediary
Risk Level: Low

json
"node_modules/axios": {
  "version": "1.13.6",
  "resolved": "https://registry.npmmirror.com/axios/-/axios-1.13.6.tgz",
  "integrity": "sha512-ChTCHMouEe2kn713WHbQGcuYrr6fXTBiu460OTwWrWob16g1bXn4vtz07Ope7ewMozJAnEquLk5lWQWtBig9DQ==",
  "license": "MIT",
  "dependencies": {
    "follow-redirects": "^1.15.11",
    "form-data": "^4.0.5",
    "proxy-from-env": "^1.1.0"
  }
}

The same mirror is used throughout the committed lockfile.

Technical Analysis

The required npm install operation obtains locked packages from registry.npmmirror.com rather than the canonical npm registry. This introduces another organization and infrastructure layer into the project's dependency trust chain.

The committed SHA-512 integrity values materially reduce the risk of a mirror silently replacing package archives: npm should reject downloaded content that does not match the lockfile. Therefore, mirror compromise alone is not sufficient to transparently alter a package under the current lockfile. Exploitation would additionally require manipulation of the lockfile or installation process, acceptance of changed integrity metadata, or another mechanism that bypasses integrity verification.

No malicious dependency or package lifecycle script was identified in the audited lockfile. This finding concerns avoidable supply-chain exposure rather than confirmed malicious package content.

Attack Path

  1. A user follows the documented setup and runs npm install.
  2. npm resolves the committed archive URLs through the third-party registry mirror.
  3. An attacker who can compromise the mirror must also cause matching malicious integrity metadata to be accepted, modify the lockfile, or bypass integrity validation.
  4. A malici ...[truncated 729 chars]
Remediation
View remediation

Remediation Suggestions

  1. Regenerate the lockfile using the canonical npm registry:
    bash
    npm config set registry https://registry.npmjs.org/
    rm -rf node_modules package-lock.json
    npm install
    
  2. Review the regenerated dependency changes before committing them.
  3. Use npm ci in automated and production environments so installation follows the reviewed lockfile exactly.
  4. Retain SHA-512 integrity metadata and fail installation on integrity errors.
  5. Pin reviewed dependency versions where reproducibility requirements justify it.
  6. Use dependency scanning and lockfile-review controls for all dependency updates.
  7. Consider disabling lifecycle scripts during untrusted installation workflows:
    bash
    npm ci --ignore-scripts
    
    Enable scripts only after confirming that required packages have legitimate lifecycle hooks.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (45)

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
npx ts-node scripts/generate.ts "提示词"

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
npx ts-node scripts/generate.ts "提示词"

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
npx ts-node scripts/generate.ts "提示词"

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
npx ts-node scripts/generate.ts "提示词"

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
npx ts-node scripts/generate.ts "提示词"

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
npx ts-node scripts/generate.ts "提示词"

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
npx ts-node scripts/generate.ts "提示词"

Known Vulnerable Dependency: axios==1.13.6 — 16 advisory(ies): CVE-2026-44494 (axios Vulnerable to Full Man-in-the-Middle via Prototype Pollution Gadget in `co); CVE-2026-44495 (axios Vulnerable to Credential Theft and Response Hijacking via Prototype Pollut); CVE-2025-62718 (Axios has a NO_PROXY Hostname Normalization Bypass that Leads to SSRF) +13 more

High
Category
Supply Chain
Confidence
96% confidence
Finding

The lockfile pins axios 1.13.6, and the supplied advisories include high-risk issues such as SSRF-related proxy bypass and prototype-pollution-enabled request/response manipulation. In a skill that generates images from user text, outbound HTTP requests to remote model or media APIs are central functionality, so flaws in the HTTP client meaningfully increase risk rather than being merely dormant dependencies.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: form-data==4.0.5 — 1 advisory(ies): CVE-2026-12143 (form-data: CRLF injection in form-data via unescaped multipart field names and f)

High
Category
Supply Chain
Confidence
90% confidence
Finding

form-data 4.0.5 is flagged for CRLF injection through unescaped multipart field names and filenames. This is relevant for a multi-image editing skill because file upload or multipart submission to backend APIs is plausible, and if attacker-controlled names are inserted into multipart boundaries/headers, request smuggling or header injection into downstream services may become possible.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: axios==1.13.6 — 16 advisory(ies): CVE-2026-44494 (axios Vulnerable to Full Man-in-the-Middle via Prototype Pollution Gadget in `co); CVE-2026-44495 (axios Vulnerable to Credential Theft and Response Hijacking via Prototype Pollut); CVE-2025-62718 (Axios has a NO_PROXY Hostname Normalization Bypass that Leads to SSRF) +13 more

High
Category
Supply Chain
Confidence
96% confidence
Finding

The manifest permits an axios version reported as vulnerable, including SSRF and prototype-pollution-related issues. Because this skill is an image-generation tool likely making outbound API requests, a compromised HTTP client can materially affect request routing, credential handling, and response trust, increasing the danger in this context.

Content

No source excerpt is available for this finding.

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 · SKILL.md (reported line 31)May include surrounding context.

md
import axios from 'axios';

// ============================================================
//  加载 .env 配置(项目根目录下的 .env 文件)
// ============================================================

(function loadEnv() {

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/generate.ts (reported line 17)May include surrounding context.

ts
import axios from 'axios';

// ============================================================
//  加载 .env 配置(项目根目录下的 .env 文件)
// ============================================================

(function loadEnv() {

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/generate.ts (reported line 21)May include surrounding context.

ts
// ============================================================

(function loadEnv() {
  const envPath = path.resolve(__dirname, '..', '.env');
  if (!fs.existsSync(envPath)) return;
  const lines = fs.readFileSync(envPath, 'utf8').split('\n');
  for (const raw of lines) {

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The README documents --images <url,...> but does not clearly warn that supplied image URLs and associated content will be transmitted to an external third-party image generation service. In this skill context, users may provide private or internal URLs or sensitive images for editing/compositing, creating confidentiality and privacy risk through unintended external disclosure.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
84% confidence
Finding

The skill documents use of environment credentials but does not declare an explicit tool scope or permissions boundary. In an agent ecosystem, undeclared access to env-backed secrets can cause the runtime to expose or rely on sensitive credentials without clear user consent or enforcement.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The skill asks users to place cloud Access Keys, Secret Keys, or tokens into a local .env file and reassures them it is safe because .gitignore excludes it, but provides no warning about secret sensitivity, rotation, least privilege, or local exposure risks. This normalizes insecure credential handling and increases the chance of accidental disclosure through logs, archives, shell history, screenshots, backups, or misconfigured tooling.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
72% confidence
Finding

Using npx ts-node without pinning a version can pull whatever package version resolves at execution time, creating supply-chain and reproducibility risk. If a compromised or unexpected dependency version is fetched, the user may execute attacker-controlled code locally.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
72% confidence
Finding

Using npx ts-node without pinning a version can pull whatever package version resolves at execution time, creating supply-chain and reproducibility risk. If a compromised or unexpected dependency version is fetched, the user may execute attacker-controlled code locally.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
72% confidence
Finding

Using npx ts-node without pinning a version can pull whatever package version resolves at execution time, creating supply-chain and reproducibility risk. If a compromised or unexpected dependency version is fetched, the user may execute attacker-controlled code locally.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
72% confidence
Finding

Using npx ts-node without pinning a version can pull whatever package version resolves at execution time, creating supply-chain and reproducibility risk. If a compromised or unexpected dependency version is fetched, the user may execute attacker-controlled code locally.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
72% confidence
Finding

Using npx ts-node without pinning a version can pull whatever package version resolves at execution time, creating supply-chain and reproducibility risk. If a compromised or unexpected dependency version is fetched, the user may execute attacker-controlled code locally.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
72% confidence
Finding

Using npx ts-node without pinning a version can pull whatever package version resolves at execution time, creating supply-chain and reproducibility risk. If a compromised or unexpected dependency version is fetched, the user may execute attacker-controlled code locally.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
72% confidence
Finding

Using npx ts-node without pinning a version can pull whatever package version resolves at execution time, creating supply-chain and reproducibility risk. If a compromised or unexpected dependency version is fetched, the user may execute attacker-controlled code locally.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The entire skill file is written only in Chinese and provides no indication that users may choose another language or locale. Under the stated policy, forcing a specific language without user opt-in is a natural-language policy violation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The file's user-facing description and CLI usage text are written in Chinese, which can effectively force a specific language for users of the skill. Under the policy, locale or language constraints should either be optional for the user or clearly justified as region-specific.

Content

No source excerpt is available for this finding.

Static analysis

Detected: suspicious.env_credential_access

Environment variable access combined with network send.

Critical
Code
suspicious.env_credential_access
Location
scripts/generate.ts:31