T09 · Insecure Skill Coding Practices
- Location
references/clawhub_gate.sh:288- Finding
Local-only mode still publishes the target Skill
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill is a plausible ClawHub release helper, but its script can publish or update a skill before the promised security gate completes and has a code-injection flaw in its polling path.
Review before installing or using this as a release gate. Do not rely on `--local-only` to avoid network or publication, and do not treat this as a true pre-publish blocker unless the sync order, rollback behavior, slug handling, and dependency installation guidance are fixed.
references/clawhub_gate.sh:288Local-only mode still publishes the target Skill
references/clawhub_gate.sh:160Directory-derived slug is interpolated into executable Python source
references/clawhub_gate.sh:288Remote security verdict is obtained only after public synchronization
SKILL.md:95Documentation recommends unpinned installation into the system Python environment
Mixing characters from multiple Unicode scripts in a single identifier is a common technique to create visually ambiguous tool names.
Mixing characters from multiple Unicode scripts in a single identifier is a common technique to create visually ambiguous tool names.
Mixing characters from multiple Unicode scripts in a single identifier is a common technique to create visually ambiguous tool names.
The skill explicitly describes networked behavior: it reads a local auth token, invokes clawhub sync, and polls a remote ClawScan API, but it declares no permissions or allowed-tools scope. That mismatch weakens reviewability and can let a user invoke a skill with broader side effects than the manifest communicates, including publication actions and outbound requests.
The trigger regexes are very broad and can match ordinary discussion of publishing, syncing, or security checks, causing the skill to activate outside narrowly intended contexts. Because this skill can run local analyzers, read config, make network calls, and trigger clawhub sync publication behavior, overmatching raises the risk of accidental side effects and unintended release operations.
The script’s advertised purpose is to block publication until VirusTotal and ClawScan checks pass, but --local-only exits successfully after local static analysis and skips the remote security gate entirely. In a pre-publish security skill, this creates a real policy-bypass path: users or automation can publish without the very checks the skill claims to enforce.
The natural-language instructions and trigger phrases are Chinese-only, which effectively imposes a language constraint on users. The file does not indicate that this is an intentional region-specific skill or provide an opt-in language/locale choice.
This shell script includes user-facing natural-language comments and usage guidance in Chinese only, such as the location and usage lines. Under the language/locale policy, forcing a specific language without offering a choice or documenting a justified locale constraint is a policy concern.
The log/documentation for Phase 2 explicitly states Publishing to ClawHub, which communicates a concrete publish action. The code actually runs clawhub sync, and elsewhere the manifest/triggers distinguish sync from publish, so this inline documentation overstates what the step does.