T09 · Insecure Skill Coding Practices
- Location
scripts/audit_skills.py:69- Finding
Unescaped Skill Metadata Allows Markdown Report Injection
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill mostly matches its audit purpose, but it includes under-scoped instructions for irreversible deletion of installed skill folders.
Review this skill before installing if you expect it to perform cleanup. Use it only for report generation unless you manually verify exact absolute paths first; prefer moving candidate skills to a quarantine folder instead of running the documented rm -rf command.
scripts/audit_skills.py:69Unescaped Skill Metadata Allows Markdown Report Injection
scripts/audit_skills.py:175Predictable Report Destination Permits Symbolic-Link File Overwrite
The code substantially matches the core declared purpose of auditing installed skills, scanning SKILL.md files, comparing against a golden list, classifying skills, and generating a report. However, the declared description explicitly says it identifies duplicates, but the implementation never computes duplicates: duplicate_groups is initialized and never used, and no duplicate analysis appears in the report. That is a material behavior gap because duplicate detection is presented as a key use case and output. Additionally, platform-specific classification is implemented via regex searches over skill file content, not by comparing against a golden approved/platform list as the description suggests. This second issue is smaller, but it contributes to a mismatch between declared and actual methodology. No unrelated or risky undeclared capability is present beyond writing the report file.
This is a true positive because the skill explicitly recommends a high-risk destructive shell command against a user-supplied directory token. The surrounding context only partially reduces risk because 'after user confirmation' is not sufficient protection against path confusion, injection-like substitution mistakes, or operational error.
rm -rf ~/.workbuddy/skills/<skill-dir>
This is a true positive because the skill explicitly recommends a high-risk destructive shell command against a user-supplied directory token. The surrounding context only partially reduces risk because 'after user confirmation' is not sufficient protection against path confusion, injection-like substitution mistakes, or operational error.
rm -rf ~/.workbuddy/skills/<skill-dir>
This is a true positive because the skill explicitly recommends a high-risk destructive shell command against a user-supplied directory token. The surrounding context only partially reduces risk because 'after user confirmation' is not sufficient protection against path confusion, injection-like substitution mistakes, or operational error.
rm -rf ~/.workbuddy/skills/<skill-dir>
The skill instructs the agent to read from the filesystem and generate a report, and also includes a deletion step, yet it declares no explicit tool scope or permissions. That gap weakens least-privilege controls and makes it easier for an agent runtime to grant broader file access than the skill actually needs.
The skill documents an irreversible rm -rf deletion workflow without a prominent safety warning, validation steps, or safer alternatives. In an agent context, terse destructive instructions can normalize unsafe execution and increase the chance of accidental data loss if the target path is wrong or attacker-influenced.
The manifest says the skill audits installed skills to identify duplicates, platform-mismatched skills, and maintenance candidates. In the implementation, report generation only classifies skills as approved, unknown, or platform-specific and never computes or reports duplicate skills, despite even initializing an unused duplicate_groups variable.
This reference file presents most skill names in English but includes one built-in skill name in Chinese, with no note explaining the locale choice or offering language flexibility. That can create a language/locale policy inconsistency for users or auditors who expect a single language unless explicitly documented.
No suspicious patterns detected.