T09 · Insecure Skill Coding Practices
- Location
SKILL.md:20- Finding
Shell Command Injection Through Untrusted Template Parameters
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This notification skill is purpose-aligned, but it uses unsafe shell execution and persistent shared memory in ways that can be abused.
Review before installing. This skill should be rewritten to use a constrained file or memory API, validate agent names, pass message content as data instead of shell source, label stored notifications as untrusted, and provide retention or deletion controls. Avoid using it for sensitive messages or in a privileged environment until those issues are fixed.
SKILL.md:20Shell Command Injection Through Untrusted Template Parameters
SKILL.md:27Directory Traversal Through Unvalidated Agent Names
SKILL.md:30Persistent Agent Memory Poisoning Through Untrusted Notifications
The skill writes user-supplied notification content into shared log files and triggers indexing, but the description does not disclose that messages are persisted in shared memory visible to other agents. This creates a transparency and privacy problem: users may believe they are sending an ephemeral notice when they are actually storing data durably and making it discoverable through indexing.
The skill uses a general shell execution tool to implement a simple file-write workflow, which unnecessarily expands the attack surface. Because untrusted template variables are inserted into a shell script and the skill can create files and run commands on the host, misuse or future modifications could lead to command abuse or broader filesystem effects beyond the stated notification purpose.
The skill performs an additional indexing command that is not clearly required by the user-visible purpose of sending notifications. Extra command execution increases privilege use and side effects, and could expose or process unrelated shared-memory data unexpectedly if the indexing command has broader scope than assumed.
The natural-language interface is defined entirely in Chinese, with no indication that other languages are supported or that the locale constraint is intentional and justified. This can violate language/locale policy when a skill imposes a specific language without user opt-in.