T01 · Skill Instruction Hijacking
- Location
scripts/literature-review.py:185- Finding
Unconditional Third-Party Promotional Content Injection
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill mostly does academic search as advertised, but it automatically inserts a third-party promotional link into generated reviews and uses an unsafe shared temporary cache.
Review this skill before installing if you handle sensitive or proprietary research topics. Expect searches and DOIs to be sent to OpenAlex, and deep-read lookups to Unpaywall. Generated Markdown reviews include a Topanga link by default, and the cache should be moved to a private per-user directory before use on shared systems.
scripts/literature-review.py:185Unconditional Third-Party Promotional Content Injection
scripts/literature-review.py:21Predictable Shared Temporary Cache Enables Cache Poisoning and Symlink File Writes
The skill advertises and documents capabilities that imply network access, reading fetched content, and writing output/cache files, but it does not declare any explicit tool scope or permissions boundary. This creates ambiguity about what the agent may access at runtime and can lead to over-broad tool use, unintended file writes, or unsanctioned external requests when the skill is invoked.
The trigger language is very broad and covers generic research, synthesis, and reference-gathering requests, which increases the chance the skill is auto-selected for prompts beyond the user's intent. In an agentic environment, over-broad routing can cause unnecessary network access, retrieval of third-party content, or file outputs in situations where a simpler local response would have been safer and more appropriate.
The documentation does not clearly warn that the skill makes external network requests and may fetch full-text content from third-party URLs, including open-access PDFs or pages outside OpenAlex. Without this disclosure, users and orchestrators may not realize that invoking the skill can transmit queries externally and ingest untrusted remote content, increasing privacy and content-safety risk.
This line transmits the paper DOI and contact email to api.unpaywall.org, creating an external data-sharing path. In the context of an academic search tool this is expected functionality, so the risk is limited, but it is still a genuine external transmission concern if users may handle sensitive or embargoed research topics.
# Try Unpaywall for better PDF URL
try:
r = requests.get(f"https://api.unpaywall.org/v2/{paper['doi']}?email={MAILTO}", timeout=10)
if r.status_code == 200:
up = r.json()
best = up.get("best_oa_location") or {}
The script transmits the user-supplied research topic and generated query variants to the OpenAlex API via HTTP requests, which can expose sensitive or proprietary research interests to a third party. In this skill context, external academic search is expected functionality, but the privacy risk remains if users are not explicitly informed that their input will leave the local environment.
The script sends user-provided search terms, author names, and DOIs to OpenAlex and always attaches a hard-coded contact email via the mailto parameter, but it does not disclose this external transmission to the user. This is a real privacy/transparency issue rather than code execution risk: sensitive research topics or identifiers could be exposed to third-party services without informed consent.
Deep-read mode performs an additional request to Unpaywall using the paper DOI and contact email, but this secondary data transfer is not surfaced to the user. That expands third-party exposure beyond the primary OpenAlex lookup and may surprise users who expect only one external service to receive their research inputs.
No suspicious patterns detected.