Back to skill

Security audit

Volcengine (Volcano Engine)

Security checks for vulnerabilities and agentic risk

Overview

The skill is mostly a legitimate Volcengine setup guide, but it includes under-scoped optional instructions for a recurring background documentation updater.

Install only if you need Volcengine model support and are comfortable sending prompts, files, and API credentials to Volcengine. Prefer environment variables or a protected credential store, restrict and rotate the API key, and do not follow the optional cron/documentation-updater or unpinned npm/npx crawler instructions unless you review and contain them yourself.

Vulnerability Patterns
  • System PersistenceInstalls backdoors, hooks, services, or scheduled tasks that survive the run
  • 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 (3)

T06 · System Persistence

Error
Location
references/documentation-analysis.md:332
Finding
Recurring Documentation Update Task Creates Cross-Session Persistence<![CDATA[ ## Vulnerability Details **File Location**: `references/documentation-analysis.md`, lines 332-341 **Vulnerability Type**: Scheduled-task persistence **Risk Level**: High ### Vulnerable Code ```powershell function Update-VolcengineDocs { # 1. Check documentation updates # 2. Incrementally crawl new content # 3. Update the index # 4. Notify changes } # Add to cron cron add -Name "volcengine-docs-update" -Schedule "0 2 * * 0" ` -Command "Update-VolcengineDocs -Notify" ``` ### Technical Analysis The packaged implementation plan directs the user or agent to register a weekly scheduled task. A scheduled task survives the original Skill invocation and causes code to execute in later sessions without another explicit request. The referenced update function is currently only a stub, and no shipped Python script or package lifecycle hook automatically installs the task. Nevertheless, an agent following this packaged instruction could implement the function and register it as a persistent execution mechanism. Automated documentation updates do not require persistence to provide the Skill's declared model-configuration functionality. The update design includes remote documentation retrieval and local index modification. Consequently, the effective behavior of the persistent task may depend on future remote content or later changes to the update function. ### Attack Path 1. An agent loads or follows the documentation extraction plan. 2. The agent implements or obtains the proposed `Update-VolcengineDocs` function. 3. The agent executes the documented `cron add` command. 4. A recurring weekly task is registered outside the lifetime of the current Skill run. 5. The task subsequently performs network retrieval and local file updates without a new invocation. 6. If the update function or its remote input is later compromised, the recurring task provides a continuing execution channel. ### Impact Assessment The scheduled task can execute w ...[truncated 536 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Remove the `cron add` instruction from the packaged documentation. 2. Make documentation refreshes explicit, user-initiated operations that terminate after completion. 3. If scheduling is an essential optional feature: - Obtain informed user confirmation before registration. - Provide a complete, reviewable update script rather than an undefined function. - Pin all tools and dependencies used by the updater. - Restrict network destinations to documented Volcengine hosts. - Restrict file writes to a dedicated application-owned directory. - Run with the least-privileged account available. - Record task creation and provide commands to inspect and remove the task. - Validate remote content as untrusted data and never execute retrieved content. 4. Do not create scheduled jobs automatically during installation, loading, testing, or ordinary Skill use. ]]>

T08 · Insecure Dependencies

Warning
Location
references/documentation-analysis.md:161
Finding
Unpinned npm Dependency Installation with Dangerous Script Execution Mode<![CDATA[ ## Vulnerability Details **File Location**: `references/documentation-analysis.md`, lines 161-174 **Vulnerability Type**: Unpinned third-party dependency and unsafe JavaScript execution configuration **Risk Level**: Medium ### Vulnerable Code ```bash # Node.js environment required npm install jsdom node -e " const jsdom = require('jsdom'); const { JSDOM } = jsdom; const dom = new JSDOM('<body>Dynamic content requires JavaScript execution</body>', { runScripts: 'dangerously', resources: 'usable' }); // Complex; not recommended for complex SPAs " ``` ### Technical Analysis The command installs `jsdom` without an exact version or lockfile. The package and its transitive dependencies are therefore resolved from the registry at execution time, allowing the installed code to change after the Skill has been reviewed. npm package installation may also run package lifecycle scripts unless explicitly disabled. The example additionally enables `runScripts: 'dangerously'`. In the current snippet, the HTML is a fixed local string and contains no script, so the example does not itself execute a remote payload. However, the setting is unsafe for the surrounding documentation-crawling use case: if remotely fetched or attacker-controlled HTML is later supplied to `JSDOM`, page scripts may execute in the Node.js environment. The project manifest itself declares no runtime dependencies or install hooks. This finding applies to the documented installation and execution workflow rather than automatic package installation. ### Attack Path 1. A user or agent follows the documented extraction option. 2. `npm install jsdom` resolves the current package and transitive dependency graph from the configured npm registry. 3. Any permitted package lifecycle scripts execute with the invoking user's privileges. 4. A compromised package version, registry response, or transitive dependency can execute malicious installation logic. 5. If the example is extended to parse fet ...[truncated 766 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Pin `jsdom` to a reviewed exact version rather than resolving the latest release. 2. Commit and enforce a lockfile containing integrity hashes. 3. Use `npm ci` for reproducible installation. 4. Use `--ignore-scripts` where package compatibility permits: ```bash npm ci --ignore-scripts ``` 5. Configure an approved registry explicitly and verify package provenance. 6. Remove `runScripts: 'dangerously'` unless script execution is strictly necessary. 7. Never enable dangerous script execution for remotely fetched or otherwise untrusted HTML. 8. If rendering is required, isolate it in a restricted process or container with: - No API keys or unrelated environment variables. - Read-only filesystem access where possible. - A dedicated output directory. - Restricted network egress. - CPU, memory, and execution-time limits. ]]>

T09 · Insecure Skill Coding Practices

Note
Location
references/configuration.md:54
Finding
Plaintext API Key Storage Lacks Mandatory File-Permission Controls<![CDATA[ ## Vulnerability Details **File Location**: `references/configuration.md`, lines 54-60 **Vulnerability Type**: Insufficiently protected plaintext credential storage **Risk Level**: Low ### Vulnerable Code ```text ### 3. .env File Create `~/.openclaw/.env`: ```env VOLCANO_ENGINE_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ``` ``` ### Technical Analysis The guide instructs users to store a live Volcengine API key in a plaintext `.env` file but does not require owner-only permissions, verify ownership, or recommend an operating-system secret manager. Storing this provider credential is related to the Skill's declared functionality. No project script was found reading this path, collecting unrelated credentials, or exfiltrating the file. The risk arises from relying on the host's default umask and directory permissions. On a shared or permissively configured system, another local principal or process may be able to read the key. The guide elsewhere recommends environment variables and least-privilege key restrictions, but those recommendations do not ensure that this particular plaintext file is protected. ### Attack Path 1. A user creates `~/.openclaw/.env` according to the guide. 2. The file is created with permissions derived from a permissive umask or inherited access-control settings. 3. Another local account or process with read access opens the file. 4. The attacker extracts `VOLCANO_ENGINE_API_KEY`. 5. The attacker uses the key against Volcengine endpoints within the key's project and model permissions. ### Impact Assessment Exposure grants the attacker the same Volcengine API capabilities assigned to the stolen key. Potential consequences include: - Unauthorized model requests. - Consumption of API quota and associated charges. - Access to provider resources authorized for the key's project. - Service disruption through quota exhaustion. The key does not inherently grant operating-system privileges. The provider-side impact is boun ...[truncated 78 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Prefer OpenClaw's protected credential store or an operating-system secret manager. 2. If a `.env` file must be used, require owner-only access before writing the key. For example: ```bash mkdir -p ~/.openclaw chmod 700 ~/.openclaw install -m 600 /dev/null ~/.openclaw/.env ``` 3. Document equivalent restrictive Windows ACL configuration. 4. Validate file ownership and permissions when OpenClaw loads the file, and reject insecure settings where practical. 5. Ensure `.env` files are excluded from version control, backups with broad access, diagnostic archives, and logs. 6. Use a dedicated key for this integration and restrict it to: - Required model IDs only. - The correct project space. - Approved source IP addresses where practical. 7. Rotate the key immediately if file exposure is suspected. ]]>
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
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Rogue AgentSelf-Modification, Session Persistence
Findings (45)

External Model or Provider Selection

High
Category
Excessive Agency
Content
openclaw --model volcengine/doubao-seed-2-0-pro-260215 "Write a Python function"

# Use GLM 4.7 for Chinese content
openclaw --model GLM4 "写一篇关于人工智能的文章"
```

### Setting Default Model
Confidence
90% confidence
Finding
Skill selects an external model or provider that may use a different account or billing plan than the operator expects. Undisclosed model switches can cause unexpected cost or quota consumption.

Credential Access

High
Category
Privilege Escalation
Content
"apiKey": "VOLCANO_ENGINE_API_KEY"
```

### 3. .env File

Create `~/.openclaw/.env`:
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

External Transmission

Medium
Category
Data Exfiltration
Content
### Testing Connection

```bash
# Test with curl
curl -X POST https://ark.cn-beijing.volces.com/api/v3/chat/completions \
  -H "Authorization: Bearer $VOLCANO_ENGINE_API_KEY" \
  -H "Content-Type: application/json" \
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Session Persistence

Medium
Category
Rogue Agent
Content
**Step 1: Get API Key**
1. Log in to [Volcano Engine Console](https://console.volcengine.com/ark)
2. Go to **Access Management** → **Access Keys**
3. Click **Create Access Key**
4. Copy the key (starts with `sk-`)

**Step 2: Configure OpenClaw**
Confidence
60% 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.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The guide shows users how to place API keys directly into `openclaw.json` and also references storing secrets in local files, which can lead to accidental disclosure through source control, backups, screenshots, or overbroad file permissions. Although the document later includes general key-protection advice, the insecure example appears early and is presented as a normal manual configuration path, increasing the chance of unsafe adoption.

Rp1

Medium
Category
MCP Rug Pull
Confidence
93% confidence
Finding
The document instructs use of `npx playwright` without pinning an explicit version, which can cause execution of an unexpected or newly published package version. In an agent or automation context, this creates a supply-chain risk: future runs may fetch changed code with new behavior, including malicious postinstall scripts or incompatible binaries.

Natural-Language Policy Violations

Medium
Confidence
91% confidence
Finding
The text is entirely presented in Chinese, including the leading phrase "返回示例" and surrounding API reference material, with no indication that language selection is optional or justified by a region-specific requirement. Under the policy, hard-coding a specific language without user choice can be a natural-language locale violation.

Natural-Language Policy Violations

Medium
Confidence
87% confidence
Finding
The text is entirely in Chinese and does not indicate that the skill or documentation is region-specific, nor does it offer users an option to select another language. Under the policy rule, forcing a specific language without user opt-in can constitute a natural-language policy violation.

External Transmission

Medium
Category
Data Exfiltration
Content
管控面 API 鉴权
管控面的API,如管理API Key、管理推理接入点等接口。
Access Key 签名鉴权Authorization: Bearer $ARK_API_KEYShell
curl https://ark.cn-beijing.volces.com/api/v3/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $ARK_API_KEY" \
  -d '{
Confidence
60% 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
• 
• 
2. 
curl -X POST \
  'https://ark.cn-beijing.volcengineapi.com/?Action=ListEndpoints&Version=2024-01-01' \
  -H 'Authorization: HMAC-SHA256 Credential=AKL**/20240710/cn-beijing/ark/request, 
SignedHeaders=host;x-content-sha256;x-date, Signature=a7a****' \
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Natural-Language Policy Violations

Medium
Confidence
88% confidence
Finding
This text imposes a single language/locale on the user experience and does not indicate that alternative languages are available or that Chinese-only presentation is required for a region-specific purpose. Under the policy, forced language without user opt-in is a natural-language policy concern.

Natural-Language Policy Violations

Medium
Confidence
94% confidence
Finding
This plain-text file presents all user-facing documentation and error explanations in Chinese only, with no indication that the user can select another language or that the content is intentionally limited to a China-specific audience. The policy requires flagging language or locale constraints when they are imposed without opt-in or clear justification.

Natural-Language Policy Violations

Medium
Confidence
87% confidence
Finding
The text includes repeated Chinese end-user guidance such as '请您使用其他 prompt' and '请您更换后重试' alongside error descriptions, but there is no indication that language selection is optional or user-configurable. This can violate a language/locale policy when a skill or reference material prescribes one language for user-facing responses without opt-in.

Natural-Language Policy Violations

Medium
Confidence
96% confidence
Finding
This Python file contains all user-facing docstrings and console output in Chinese, including usage instructions and runtime status messages. Because the skill does not offer any language choice or explain that it is intentionally limited to a Chinese-speaking context, it creates a natural-language locale restriction that matches the policy-violation category.

Natural-Language Policy Violations

Low
Confidence
97% confidence
Finding
该文件从标题开始即明确以中文编写,且全文未说明是否允许其他语言、也未提供用户语言选择或切换方式。根据规则,若技能或文档在自然语言层面强制特定语言而无用户选择或合理地域性说明,属于语言/locale policy violation。

Natural-Language Policy Violations

Low
Confidence
92% confidence
Finding
This markdown file contains user-facing natural-language content that largely assumes Chinese as the operating language, including headings, descriptions, and guidance. Under the language/locale policy, forcing a specific language without user opt-in can be a policy violation unless the locale restriction is explicitly justified.

Natural-Language Policy Violations

Low
Confidence
90% confidence
Finding
The API key format note contains Chinese text (`无需添加sk-前缀`) embedded in otherwise English documentation, and similar Chinese appears later in comments. This imposes language-specific content without an explicit user opt-in or a stated reason that the document is intended for Chinese-speaking users.

Missing User Warnings

Low
Confidence
82% confidence
Finding
This markdown file shows a direct `curl` call to Volcengine's chat completions API, which sends user prompt content and an authorization bearer token to an external service. While the skill is about configuring a hosted model provider, the documentation does not explicitly warn users that prompts and related data will be transmitted to Volcengine for processing.

Natural-Language Policy Violations

Low
Confidence
78% confidence
Finding
The document highlights key links with an explicit `?lang=zh` locale parameter, indicating a Chinese-language constraint in the skill's referenced documentation flow. There is no accompanying note that users may choose another language or that the locale is region-specific and justified, which can conflict with language/locale choice policy.

Unverifiable Dependency: openclaw has 16 known advisory(ies) (CVE-2026-53846 (OpenClaw: Workspace .env npm_execpath could influence bundled runtime dependency); CVE-2026-32064 (OpenClaw's andbox browser noVNC observer lacked VNC authentication); CVE-2026-32006 (OpenClaw has a BlueBubbles group allowlist mismatch via DM pairing-store fallbac) +13 more), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
40% confidence
Finding
Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.

Natural-Language Policy Violations

Low
Confidence
80% confidence
Finding
The manifest includes the tag "chinese" in a natural-language metadata field, which can imply language or locale targeting. In this file, there is no accompanying note that the skill offers language choice or that the locale constraint is intentional and justified, so it may conflict with the policy against forcing a specific language without user opt-in.

Missing User Warnings

Low
Confidence
90% confidence
Finding
The file upload section documents sending arbitrary files to an external API but does not warn users that uploaded content may contain sensitive or regulated data. In a skill/reference context, this omission can lead developers to transmit private documents, credentials, or customer data without considering data handling, retention, or compliance implications.

Missing User Warnings

Low
Confidence
84% confidence
Finding
The test script sends the API key and user-supplied prompt content to a third-party remote endpoint, but the testing section does not clearly disclose that prompts, metadata, and potentially sensitive data leave the local system. This creates a data-handling risk because operators may use real internal text during validation without understanding that it is transmitted externally.

Natural-Language Policy Violations

Low
Confidence
88% confidence
Finding
该 markdown 明确将目标文档语言设为“zh (中文)”,后续示例 URL 也持续固定使用 `lang=zh`。根据规则,若技能或方案强制特定语言/locale 而未提供用户 opt-in 或合理的区域性说明,属于自然语言层面的语言策略风险。

Natural-Language Policy Violations

Low
Confidence
84% confidence
Finding
Playwright 示例直接访问 `https://www.volcengine.com/docs/82379/1399009?lang=zh`,体现出实现层面对中文 locale 的硬编码。文件中未见提供语言切换参数、用户选择入口,或说明这是因特定合规/区域需求而限定中文。

Static analysis

No suspicious patterns detected.