T09 · Insecure Skill Coding Practices
- Location
scripts/generate_font_signatures.js:111- Finding
User-Controlled Output Directory Path Traversal
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill matches its stated purpose, but it needs Review because unsafe filename and ZIP handling can write outside its promised folder or exhaust local resources.
Install only after reviewing the path handling and ZIP-processing risks. Users should know that their supplied name or initials are sent to Signus and that generated signature files are stored locally; maintainers should validate path components, enforce output-directory boundaries, add response and extraction limits, and update or replace the ZIP dependency before broad use.
scripts/generate_font_signatures.js:111User-Controlled Output Directory Path Traversal
scripts/generate_font_signatures.js:184API-Controlled Signature ID Allows File Path Traversal
scripts/generate_font_signatures.js:68Unbounded Remote Response Buffering and ZIP Extraction
The lockfile pins adm-zip to version 0.5.16, which is flagged with known high-severity advisories for unsafe ZIP handling: extraction may follow destination symlinks and allow arbitrary file overwrite, and a crafted archive may trigger massive memory allocation leading to denial of service. This skill’s stated behavior explicitly includes ZIP response handling, which makes the dependency especially relevant rather than incidental.
The skill depends on adm-zip 0.5.16, which is flagged for vulnerabilities including following destination symlinks during extraction and a crafted ZIP-triggered large memory allocation. This skill explicitly handles ZIP responses, so the vulnerable library is directly relevant: a malicious or compromised upstream ZIP could cause arbitrary file overwrite in some extraction workflows or denial of service via memory exhaustion.
The skill explicitly directs network access to an external API but does not declare any tool scope such as allowed-tools or permissions. That creates a policy gap where a runtime or agent may permit broader-than-intended outbound actions, reducing enforceable least-privilege controls and making future changes riskier.
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
# Signus Font Signature
## User-facing language
- Always write user-facing text in English unless the user explicitly asks for another language.
## Runtime requirements
- Node.js 18+.
Line L09 instructs the skill to always use English unless the user explicitly asks for another language. This imposes a specific language by default rather than offering a language choice or documenting a justified locale constraint, which matches the policy-violation criteria for language or locale restrictions.
The script writes ZIP archives and extracted image files into a persistent directory under the user's home folder, which can leave sensitive signature artifacts stored locally without the user's awareness. While this behavior supports the skill's output flow, silent persistence of generated signatures increases privacy and data-retention risk if other local users, tools, or later processes can access the files.
The script sends user-supplied identity data such as name, firstName, lastName, or initials to external Signus API endpoints, which is a privacy-relevant data transfer. In the context of an agent skill, this can expose personal data to a third party without clear user disclosure or consent handling in the code, making the finding valid even though the transfer is functionally required.
The dependency is specified with a caret range, which permits automatic installation of newer patch/minor versions and reduces build reproducibility. In a security-sensitive skill that processes ZIP/image responses, non-pinned dependencies increase supply-chain risk and make it harder to guarantee which code is executed.
"private": true,
"description": "Skill runtime dependencies for Signus font signature generation",
"dependencies": {
"adm-zip": "^0.5.16"
}
}
No suspicious patterns detected.