T09 · Insecure Skill Coding Practices
- Location
scripts/save_paper.py:105- Finding
Weak arXiv URL Validation Enables Server-Side Request Forgery and Local File Disclosure
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This Zotero helper mostly does what it says, but its PDF download path is under-scoped and can fetch non-arXiv or local/internal resources before uploading them to Zotero.
Install only if you are comfortable granting the skill write access to your Zotero library. Use a least-privilege Zotero API key, keep ZOTERO_CREDENTIALS secret, and avoid running it on paper URLs from untrusted sources until the arXiv URL validation, download limits, and dependency pinning are tightened.
scripts/save_paper.py:105Weak arXiv URL Validation Enables Server-Side Request Forgery and Local File Disclosure
scripts/save_paper.py:123Unbounded PDF Download Can Exhaust Disk and Execution Resources
scripts/save_paper.py:2Unpinned Runtime Dependency Creates a Supply-Chain Exposure
The skill declares access to environment variables and network-facing behavior, but it does not define an explicit tool scope such as permissions or allowed-tools. This weakens containment and reviewability, making it easier for the skill to access sensitive data like Zotero API credentials and perform outbound requests without clear user-visible restrictions.
The skill instructs users to place a sensitive Zotero API credential in an environment variable, but it provides no warning about secrecy, storage, logging, or least-privilege handling. This increases the risk of accidental exposure through shell history, debug output, screenshots, shared environments, or misuse by the skill or surrounding tooling.
This code defines the command description and argument help text only in Chinese, and later user-facing status/error messages are also exclusively Chinese. The policy explicitly flags language/locale constraints when a skill forces a specific language without user opt-in, and this file provides no alternative locale or documented regional justification.
The manifest description is limited to saving a paper into a Zotero library. In addition to creating the Zotero item, the code conditionally fetches a remote PDF from arXiv and attaches it to the entry, which is a broader behavior than the stated description and not an obvious implementation detail of merely saving metadata.
No suspicious patterns detected.