T09 · Insecure Skill Coding Practices
- Location
clawhub-auth.json:1- Finding
Plaintext ClawHub Authentication Token Committed to the Package
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This code-review skill mostly matches its purpose, but it ships a registry token and can read arbitrary local files without clear limits.
Review before installing. The publisher should revoke and remove the committed ClawHub token, avoid command-line token passing, pin publishing dependencies, restrict file reads to the Git repository, add size limits and secret redaction, and clearly disclose when code may be sent to an AI model or printed to logs.
clawhub-auth.json:1Plaintext ClawHub Authentication Token Committed to the Package
sentinel.js:17Unrestricted File Paths Allow Reading Data Outside the Git Repository
package.json:23Mutable ClawHub Dependency Version Weakens Supply-Chain Integrity
publish.sh:1Publication Token Exposed Through Command-Line Arguments
The lockfile pins undici to 7.22.0, and the provided advisory set includes multiple high-severity issues such as request/response smuggling, response queue poisoning, and CRLF injection. Because undici is an HTTP client library used by the dev tool clawhub, exploitation could affect network interactions performed by the tool, especially if it processes attacker-controlled URLs, headers, redirects, or upstream responses.
The skill activates on very broad user intents like 'code review, check, or audit,' which can cause unintended invocation in unrelated contexts and increase the chance the agent executes repository-reading commands without sufficiently explicit user consent. Because the skill then instructs the agent to run a local Node.js script against staged changes or arbitrary files, overly permissive triggering expands the attack surface for prompt-triggered or context-triggered misuse.
The script invokes npx clawhub publish without pinning an exact package version, so execution depends on whatever version npx resolves at runtime. If the package is updated maliciously, compromised upstream, or unexpectedly changed, running this publish script could execute attacker-controlled code with access to the supplied token and local files.
The script reads full contents of staged or user-specified files and packages them into a prompt intended for AI review, with no warning, consent step, redaction, or file-type restrictions. In a real integration, this can expose secrets, proprietary code, credentials, or personal data to an external model provider or to local logs/stdout, which is especially risky for a developer tool operating over arbitrary repository contents.
The lockfile pins fflate to 0.8.2, which the supplied advisory data identifies as vulnerable to an infinite loop when parsing a malformed ZIP64 archive. In this file it appears only as a transitive devDependency of clawhub, so the issue is real but primarily presents a denial-of-service risk during development or tooling use rather than direct runtime compromise of the shipped skill.
Using the floating version specifier "latest" for a development dependency makes builds non-reproducible and allows future upstream releases to be pulled in without review. In a security-auditing CLI skill, that increases supply-chain risk because a compromised or malicious clawhub release could alter code-review behavior, exfiltrate repository data, or execute unwanted install/runtime logic.
"author": "Corezip & Kiri",
"license": "ISC",
"devDependencies": {
"clawhub": "latest"
},
"dependencies": {}
}
The script's visible error and usage messages are only in Spanish, which imposes a language choice on users without opt-in. This matches the natural-language policy concern for locale/language restrictions when no justification or alternative is provided.
The module header describes step 4 as sending the structured prompt to an AI through OpenClaw standard input and step 5 as formatting the AI output as a code review report. In the actual code, lines L66-L69 explicitly state this is only simulated and merely print the prompt, so the documentation contradicts the implemented behavior.
The script emits user-facing operational messages entirely in Spanish, such as activation, progress, and error text. This imposes a specific language on users without opt-in or justification, which matches the policy concern for locale or language constraints.