T09 · Insecure Skill Coding Practices
- Location
references/architecture.md:575- Finding
Incomplete SSRF Address Validation in Recommended Security Pattern
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This Rails style skill is mostly documentation, but it needs Review because it includes an incomplete SSRF protection pattern that could lead generated apps to unsafe code.
Install only if you want broad DHH/37signals Rails style guidance, and review generated security-sensitive code yourself. Do not copy the SSRF protection snippet as-is; use a complete outbound request policy with proper IP classification, scheme and port allowlists, redirect validation, timeouts, response limits, and tests. Also add your own privacy limits before collecting IP address, referrer, user agent, or similar request metadata.
references/architecture.md:575Incomplete SSRF Address Validation in Recommended Security Pattern
Referenced artifact was not completely inspected
| 3, view, frontend, turbo, stimulus, css | [frontend.md](./references/frontend.md) |
Referenced artifact was not completely inspected
| 3, view, frontend, turbo, stimulus, css | [frontend.md](./references/frontend.md) |
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).
# Instead of this:
POST /cards/:id/close
DELETE /cards/:id/close
POST /cards/:id/archive
# Do this:
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).
# Instead of this:
POST /cards/:id/close
DELETE /cards/:id/close
POST /cards/:id/archive
# Do this:
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).
POST /cards/:id/closure # create closure DELETE /cards/:id/closure # destroy closure POST /cards/:id/archival # create archival
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).
POST /cards/:id/closure # create closure DELETE /cards/:id/closure # destroy closure POST /cards/:id/archival # create archival
The skill declares very broad activation triggers such as any Ruby/Rails code generation, refactoring, code review, or mentions of DHH/37signals-related terms. That can cause the skill to activate on many ordinary development requests outside a narrowly scoped style-guidance use case, increasing the chance that its instructions override more appropriate task-specific or security-focused guidance.
The skill recommends storing request ID, user agent, IP address, and referrer in a global Current context without any privacy guidance, data minimization, retention limits, or warnings about sensitive handling. In a code-generation skill, this can normalize pervasive collection of identifying metadata and lead downstream implementations to log, persist, or expose it in ways that create privacy and compliance risk.
This markdown file includes a code example that writes arbitrary content to the user's clipboard via navigator.clipboard.writeText, but the surrounding documentation does not mention that the action copies data outside the page context. For markdown files, SQP-2 applies when behaviour affecting user data or privacy is described without warning, and clipboard access merits a brief disclosure.