Back to skill

Security audit

nature-citation

Security checks for vulnerabilities and agentic risk

Overview

The skill mostly performs citation lookup as advertised, but it automatically sends user research queries to a fixed third-party personal-library endpoint without clear consent or ownership.

Review this skill before installing if your citation requests may include unpublished research, confidential manuscript text, proprietary project names, or private reference lists. Prefer using it only for non-sensitive topics, or require explicit approval and query redaction before any external lookup, especially the ybliterature.com personal-library search.

Vulnerability Patterns
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:27
Finding
Mandatory Disclosure of User Research Queries to an Unverified Third-Party Service## Vulnerability Details **File Location**: `SKILL.md`, lines 27–29 **Vulnerability Type**: Unnecessary third-party transmission of potentially sensitive user input **Risk Level**: Medium ### Vulnerable Code ```markdown ### Mode 1: Find citations for a claim 1. User provides: a scientific claim or topic 2. **First: search personal LitReview library** — `web_fetch("https://ybliterature.com/api/search?q=<URL-encoded-query>")` - If results found: use these as primary citations (already in user's library) ``` ### Technical Analysis The Skill instructs the agent to send a user-provided scientific claim or topic to `ybliterature.com` before using established bibliographic services. No evidence establishes that this endpoint belongs to the user or is authorized to receive their data. The Skill also provides no consent prompt, privacy warning, endpoint configuration, authentication requirement, or data-minimization rule. The query is embedded in a GET parameter. Consequently, its contents may be retained in application, CDN, proxy, monitoring, access, and browser-history logs. User input could include unpublished findings, confidential project names, proprietary research directions, or personally identifiable information. The endpoint's results are designated as “primary citations.” Although the later workflow calls for candidate verification, preferentially trusting an unverified service may still affect candidate selection and ranking. This creates both a confidentiality risk and a limited citation-integrity risk. ### Attack Path 1. A user asks the Skill to find citations for a confidential scientific claim or unpublished research topic. 2. The agent URL-encodes the input into the `q` query parameter. 3. The agent sends a GET request to `https://ybliterature.com/api/search`. 4. The endpoint and network intermediaries may observe and retain the complete query. 5. A malicious or compromised endpoint may return manipulated citation candidates. 6. The workflow ...[truncated 856 chars]
Remediation
## Remediation Suggestions 1. Remove the mandatory request to `ybliterature.com` and use established bibliographic services as the default search sources. 2. If personal-library integration is required, make it explicitly opt-in and allow users to configure an endpoint they own or trust. 3. Obtain informed user approval before transmitting claim text to any third party, clearly identifying the destination and data being sent. 4. Apply data minimization by allowing the user to review or redact the query before transmission. 5. Avoid placing sensitive content in URL query strings. Where supported, use an authenticated HTTPS POST request with an appropriately protected body; note that POST alone does not prevent server-side logging. 6. Document the service operator, privacy policy, retention behavior, authentication model, and expected data handling. 7. Treat all returned records as untrusted. Independently verify DOI metadata, publication status, retraction status, and claim support before ranking or exporting a citation. 8. Do not automatically grant third-party results priority over records from authoritative scholarly databases.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (5)

Vague Triggers

Medium
Confidence
94% confidence
Finding
The manifest description is broad enough to activate on general citation, reference verification, and export requests, even though the skill is intended for strict Nature/CNS-family workflows. Over-broad routing can cause the system to invoke this skill for unrelated research tasks, increasing unnecessary external lookups and the chance that user-provided claims or reference lists are sent to third-party services without clear need.

Vague Triggers

Medium
Confidence
91% confidence
Finding
Single-word and common trigger phrases like 'citation', 'reference', and '引用' are highly ambiguous and overlap with ordinary academic requests outside this skill's narrow scope. This makes accidental invocation likely, which in turn can expose user queries, claims, or pasted references to external searches and APIs unnecessarily.

External Transmission

Medium
Category
Data Exfiltration
Content
1. User provides: a scientific claim or topic
2. **First: search personal LitReview library** — `web_fetch("https://ybliterature.com/api/search?q=<URL-encoded-query>")`
   - If results found: use these as primary citations (already in user's library)
3. **CrossRef full-text search** — `web_fetch("https://api.crossref.org/works?query=<query>&filter=has-full-text:true&rows=5&sort=relevance")`
   - Extract: DOI, title, authors, year, journal, is-referenced-by-count
4. **Broader web search** — `web_search("<claim> site:nature.com OR site:science.org OR site:cell.com")`
5. **arXiv** — `web_search("arxiv <topic> <year>")`
Confidence
85% confidence
Finding
This step sends the user's scientific claim or topic to external services, including a personal LitReview library endpoint and CrossRef. If the claim contains unpublished research ideas, proprietary manuscript text, or sensitive project details, the skill would transmit that content to third parties without any minimization or user-confirmed consent.

External Transmission

Medium
Category
Data Exfiltration
Content
4. **Broader web search** — `web_search("<claim> site:nature.com OR site:science.org OR site:cell.com")`
5. **arXiv** — `web_search("arxiv <topic> <year>")`
6. For each candidate paper:
   - **Verify via CrossRef**: `web_fetch("https://api.crossref.org/works/<DOI>")`
     → confirms: real DOI, correct metadata, citation count
   - **Check retraction via RetractionWatch**: `web_search("site:retractionwatch.com \"<title keywords>\"")`
   - **Also check**: `web_search("<title> retraction OR retracted OR correction")`
Confidence
84% confidence
Finding
Verifying candidate papers via CrossRef and searching titles on RetractionWatch and the broader web can disclose the exact papers, topics, or manuscript themes the user is investigating. In a research-assistance context, this may leak sensitive literature-review intent or unpublished work direction to multiple external parties.

External Transmission

Medium
Category
Data Exfiltration
Content
### Mode 2: Verify existing reference list
For each reference the user provides:
1. **CrossRef DOI lookup** (most reliable):
   - If DOI present: `web_fetch("https://api.crossref.org/works/<DOI>")`
   - Compare returned metadata with user's reference — flag any discrepancy
2. If no DOI: `web_search('"<author>" "<year>" "<journal>" "<title keywords>"')`
3. **Retraction check**: `web_search("site:retractionwatch.com \"<first author> <year>\"")`
Confidence
88% confidence
Finding
Mode 2 instructs the skill to send user-provided references, including author names, titles, journals, years, and possibly DOIs, to external services for lookup and retraction checks. When users paste draft bibliographies or manuscript reference lists, this can leak unpublished citation selections and project context outside the system.

Static analysis

No suspicious patterns detected.