T09 · Insecure Skill Coding Practices
- Location
SKILL.md:49- Finding
Shell Command Injection Through User-Controlled Keyword Arguments
- Content
View full analysis
" --expand` harvests free keyword ideas from Google Autocomplete (⚠️ unofficial endpoint). Search *volume / difficulty* still needs `~~SEO tool` or own Search Console data. See [scripts/connectors/README.md](../../../scripts/connectors/README.md). **Keyless live-SERP sampling**: `python3 "${CLAUDE_PLUGIN_ROOT}/scripts/connectors/firecrawl.py" search "" --limit 10` (Firecrawl keyless free tier, ~1,000 credits/mo, no key needed) shows who actually ranks for a candidate — feed the top-10 domains and formats into the intent check and the difficulty read as **Measured** evidence instead of guessing. Volume still needs `~~SEO tool` or GSC. **Keyless topic-demand proxy**: `python3 "${CLAUDE_PLUGIN_ROOT}/scripts/connectors/pageviews.py" "" --months 12` returns a topic's real Wikipedia-attention series — Measured direction and seasonality evidence when no volume tool is connected. It is *attention, not search volume*: use it to rank topics against each other and time them, never to quote a volume number. ``` ### Technical Analysis The skill instructs the agent to place user-derived seed keywords, candidate keywords, and topic names directly inside shell command strings. Double-quoting these values does not prevent command substitution. Shell constructs such as `$(...)` and backticks are still evaluated inside double quotes. If the agent replaces one of these placeholders with untrusted input and executes the resulting command through a shell, the shell can evaluate attacker-controlled substitutions before invoking the intended Python helper. Quoting may also become ineffective if the supplied valu ...[truncated 1873 chars]- Remediation
View remediation
