T07 · Tool Hijacking and Spoofing
- Location
- openclaw.plugin.json:9
- Finding
- Plugin Executes an Unbundled External Entry Script<![CDATA[ ## Vulnerability Details **File Location**: `openclaw.plugin.json`, lines 1–10 **Vulnerability Type**: External tool implementation substitution **Risk Level**: High ### Vulnerable Code ```json { "id": "byt-workflow", "name": "Byt Workflow", "version": "1.0.0", "description": "YouTube video translation workflow, download audio, launch Doubao, play audio, capture translation", "tools": [ "youtube_translate" ], "entry": "/mnt/h/AI/openclaw_workspace/video_translate/skills/workflow.py" } ``` The security-relevant declaration is: ```json "entry": "/mnt/h/AI/openclaw_workspace/video_translate/skills/workflow.py" ``` ### Technical Analysis The plugin entry points to an absolute filesystem location outside the audited package. The referenced `workflow.py` file is not included in the project, whose reviewed contents consist only of `SKILL.md`, `openclaw.plugin.json`, and `package.json`. Consequently, the executable implementation cannot be reviewed alongside the manifest or bound to the integrity of the distributed package. The trusted `youtube_translate` tool name may invoke whatever file currently occupies the external path. A process or user capable of modifying that path could replace the expected workflow with attacker-controlled Python code without changing the reviewed plugin package. This is classified as tool hijacking because a legitimate-looking tool declaration delegates execution to a replaceable, unaudited implementation outside the package boundary. No evidence establishes that the missing script is currently malicious; the vulnerability is the unsafe trust boundary and substitution opportunity. ### Attack Path 1. The plugin is installed or loaded with the supplied manifest. 2. An attacker gains write access to `/mnt/h/AI/openclaw_workspace/video_translate/skills/workflow.py` or creates the file if it does not exist. 3. The attacker places arbitrary Python logic at that location. 4. A user or Agent invokes the decla ...[truncated 1169 chars]
- Remediation
- <![CDATA[ ## Remediation Suggestions 1. Include `workflow.py` and all required implementation files inside the distributed skill package. 2. Replace the absolute entry with a package-relative path, for example: ```json "entry": "./scripts/workflow.py" ``` 3. Ensure package creation fails if the declared entry file is missing. 4. Apply package integrity verification, such as signed releases and cryptographic hashes, before installation or execution. 5. Restrict write permissions on installed plugin files so that untrusted users and processes cannot replace executable entries. 6. Validate at load time that the resolved entry remains within the plugin root; reject absolute paths, traversal sequences, and symbolic links that escape that root. 7. Run the skill with least privilege and limit filesystem and network access to resources required by the translation workflow. 8. Review the bundled implementation before release to confirm that its behavior matches the documented download, playback, GUI automation, and translation-capture operations. ]]>
