T09 · Insecure Skill Coding Practices
- Location
scripts/main.py:287- Finding
Unrestricted URL Fetching Enables Server-Side Request Forgery
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This summarizer is mostly coherent, but its URL feature can contact arbitrary network addresses without safeguards, so it should be reviewed before installation.
Install only if you are comfortable with a skill that can fetch any URL supplied to it. Avoid using it with private, signed, internal, localhost, or cloud-metadata URLs, and prefer local PDF/text input until URL fetching is restricted and dependencies are pinned.
scripts/main.py:287Unrestricted URL Fetching Enables Server-Side Request Forgery
requirements.txt:1Unpinned Third-Party Dependencies Create Supply-Chain and Reproducibility Risk
The script has undeclared network capability via the --url path, which uses requests.get() to fetch arbitrary remote content. In an agent/skill environment, hidden or undeclared network access expands the trust boundary, can enable SSRF-like access to internal resources, and violates least-privilege expectations for a summarization tool.
The skill explicitly advertises URL input ('Multi-Format Input: Process PDFs, text, URLs, or clipboard content') and later exposes a --url parameter, but nowhere warns users that remote fetching may initiate outbound network requests and transmit sensitive document URLs or metadata to external hosts. In a summarization context, users may provide private preprints, internal reports, or signed URLs, so the omission can lead to unintended data disclosure or unsafe fetching behavior such as contacting untrusted domains.
Although the skill is described as summarizing papers, it will fetch arbitrary URLs and summarize whatever is returned. This broader behavior is dangerous because it can be abused to make the runtime issue outbound requests to attacker-controlled or internal endpoints, potentially exposing internal metadata/services or processing untrusted remote content outside the declared skill scope.
The limitation explicitly centers the skill on English-language papers, which is a language/locale constraint. The file does not present this as a user-selectable option or explain a policy-based reason for restricting language support.
The dependency list leaves PyPDF2 unpinned, so builds may resolve to different versions over time, including versions with known security defects. In a document-processing skill, this is relevant because PDF parsers routinely handle attacker-controlled input and historically have been prone to denial-of-service issues such as infinite loops and pathological parsing behavior.
pypdf2
requests
PyPDF2 has multiple known advisories, and because no version is specified, it is impossible to verify whether installation will pull a fixed or vulnerable release. This is more concerning in this skill than in many others because the stated function is to process academic papers and technical reports, meaning untrusted PDF input is central to the skill's operation and parser flaws could be triggered by malicious documents to cause denial of service or excessive resource consumption.
The requests dependency is also unpinned, which makes the installed version non-deterministic and can expose the skill to older vulnerable releases depending on environment and install time. Because this skill may fetch or process remote resources as part of summarization workflows, a vulnerable HTTP client could contribute to credential leakage, TLS verification issues, or other network-related security problems.
pypdf2
requests
Requests has numerous historical advisories, and without version pinning there is no assurance that a safe release will be installed. If the skill retrieves documents, metadata, or external references over HTTP(S), a vulnerable requests version could enable credential disclosure, improper certificate handling, or other network-layer weaknesses depending on how the library is used elsewhere in the skill.
The manifest says the skill transforms papers into concise abstracts, but does not mention filesystem write behavior. Supporting --output and writing the generated abstract to a user-specified path adds a persistence side effect beyond in-memory summarization.
No suspicious patterns detected.