T07 · Tool Hijacking and Spoofing
- Location
openclaw.plugin.json:9- Finding
Tool Entry References an Unbundled External Executable
- Content
View full analysis
Vulnerability Details
File Location:
openclaw.plugin.json:9
Vulnerability Type: External tool hijacking through an absolute, package-external entry path
Risk Level: HighVulnerable Code
json { "id": "audio-play", "name": "Audio Play", "version": "1.0.0", "description": "Play audio files using Windows media player. Non-blocking execution.", "tools": [ "play_audio" ], "entry": "/mnt/h/AI/openclaw_workspace/video_translate/skills/audio_play.py" }Technical Analysis
The plugin registers
play_audiobut delegates its implementation to an absolute host-specific path outside the audited package. The referenced Python file is not included in the artifact, so its content and integrity cannot be verified as part of this review.This creates a trust-boundary failure: the legitimate plugin manifest can remain unchanged while the external file is replaced or modified. If the OpenClaw runtime loads this entry without independent integrity verification, a party with write access to the referenced path can substitute arbitrary Python logic that is then presented to users and agents as the trusted
play_audiotool.The documentation also refers to
scripts/audio_play.py, but that file is absent and does not match the manifest entry. This reinforces that the distributed artifact is incomplete and that its effective executable behavior resides outside the reviewed package.Attack Path
- An attacker obtains write access to
/mnt/h/AI/openclaw_workspace/video_translate/skills/audio_play.pyor controls how that mounted path is resolved. - The attacker replaces or modifies the referenced file with malicious Python code.
- The plugin is loaded using the unchanged
openclaw.plugin.jsonmanifest. - A user or agent invokes the apparently legitimate
play_audiotool. - The runtime executes the substituted external implementation under the privileges of the OpenClaw process.
- The malicious implementation can perform ...[truncated 794 chars]
- An attacker obtains write access to
- Remediation
View remediation
Remediation Suggestions
- Bundle the Python implementation inside the skill package and reference it through a package-relative path.
- Ensure the packaged implementation is included in code review, release signing, and integrity verification.
- Reject absolute entry paths and paths that resolve outside the package root.
- If external execution is unavoidable, pin and verify the target file with a cryptographic digest or trusted signature before loading it.
- Restrict write permissions on executable plugin files to trusted administrators or the deployment service account.
- Make the documentation and manifest reference the same bundled implementation.
- Add installation-time validation that fails closed when the declared entry is missing, external, writable by untrusted users, or inconsistent with the package contents.
- Remove or correct the absent
index.jsdeclaration inpackage.jsonto prevent ambiguous or incomplete package loading behavior.
