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## 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. ``` 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
## 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## 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
## 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
Content
npx ts-node scripts/generate.ts "提示词"
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
npx ts-node scripts/generate.ts "提示词"
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
npx ts-node scripts/generate.ts "提示词"
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
npx ts-node scripts/generate.ts "提示词"
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
npx ts-node scripts/generate.ts "提示词"
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
npx ts-node scripts/generate.ts "提示词"
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
npx ts-node scripts/generate.ts "提示词"
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

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.

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.

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.

Credential Access

High
Category
Privilege Escalation
Content
import axios from 'axios';

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

(function loadEnv() {
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
import axios from 'axios';

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

(function loadEnv() {
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
// ============================================================

(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) {
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Missing User Warnings

Medium
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.

Lp3

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.

Missing User Warnings

Medium
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.

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.

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.

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.

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.

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.

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.

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.

Natural-Language Policy Violations

Medium
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.

Natural-Language Policy Violations

Medium
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.

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