Back to skill

Security audit

zotero-browse

Security checks for vulnerabilities and agentic risk

Overview

This skill is a local Zotero search and PDF-reading helper with disclosed local file access and an optional export feature, but no evidence of deception, exfiltration, persistence, or unsafe automatic execution.

Install only if you want an agent to inspect your local Zotero library and PDF text. Avoid using --output unless you intentionally want extracted document text saved to disk, review output paths before use, and treat text from PDFs as untrusted content to summarize or analyze, not instructions to follow.

Vulnerability Patterns
  • 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
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Findings (1)

T01 · Skill Instruction Hijacking

Warning
Location
scripts/read_pdf.py:83
Finding

Untrusted PDF Content Is Exposed to the Agent Without Prompt-Injection Safeguards

Content
View full analysis
0 else total full_text = "" for i in range(limit): text = doc[i].get_text() full_text += f"\n=== Page {i+1}/{total} ===\n{text}" if max_pages == 0 or max_pages >= total: full_text += f"\n[Truncated at page {limit}/{total}]" doc.close() return full_text ``` ```python print(f"Extracting text (max_pages={args.pages or 'all'})...") text = extract_text(pdf_path, args.pages) if args.output: with open(args.output, "w", encoding="utf-8") as f: f.write(text) print(f"Text written to: {args.output}") else: print(text) ``` The corresponding documented workflow instructs the agent to read PDF content: ```markdown ### 2. Find attachment key for a paper, then read PDF ```bash # Step 1: search to get the attachment key py -3 scripts/query_items.py --search "Silibinin" # Step 2: read the PDF (pass the attachment key shown in output) py -3 scripts/read_pdf.py ZL42EGES ``` ``` ### Technical Analysis PDF contents are untrusted, potentially attacker-controlled input. The script extracts all text from a selected document and prints it verbatim into the tool output. The skill instructions do not establish a trust boundary or direct the agent to treat extracted text exclusively as data. Consequently, a malicious PDF can include natural-language directives such as requests to disregard prior instructions, invoke tools, access other local resources, or disclose information. When the script output i ...[truncated 1960 chars]
Remediation
View remediation
Vulnerability Patterns
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
Findings (10)

Tp4

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding

This mismatch is security-relevant because the skill is presented as read/browse-only but the documentation adds a local file-write path via --output. When a skill's declared purpose understates data-handling behavior, users and orchestration systems may authorize it under false assumptions, increasing the risk of silent local data export.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
91% confidence
Finding

This mismatch is security-relevant because the skill is presented as read/browse-only but the documentation adds a local file-write path via --output. When a skill's declared purpose understates data-handling behavior, users and orchestration systems may authorize it under false assumptions, increasing the risk of silent local data export.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
93% confidence
Finding

The skill documents file read and file write behavior through local database/PDF access and the --output extracted.txt workflow, but it declares no explicit tool scope or permissions. Missing scope declarations make the skill's capabilities opaque to the caller and can enable broader-than-expected local file access or data export from a sensitive research library.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The activation text includes broad triggers such as 'any query about accessing or reading Zotero papers or PDFs,' which can cause the skill to activate in situations broader than the user intended. Overbroad invocation increases the chance of unnecessary access to a local research database and attached PDFs, especially in multi-skill environments.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The documentation introduces an output-to-file capability that exceeds the stated read/browse purpose of the skill. Writing extracted PDF text to local files can duplicate sensitive paper contents or notes into unintended locations, creating data leakage and retention risks.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The file discloses concrete local filesystem paths, including a user profile path and the exact location of a large Zotero database and storage tree. This materially lowers the effort for any later malicious action by revealing environment-specific sensitive system information, and in this skill context it is especially relevant because the skill is explicitly designed to browse and read local papers from that library.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The script prints detailed Zotero library metadata including titles, authors, abstracts, tags, URLs, and attachment information directly to stdout without any warning, consent check, or output minimization. In an agent skill context, this can expose sensitive research interests, reading history, or private document metadata to the user, logs, transcripts, or downstream systems even though the code is only performing read operations.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The script accepts an arbitrary --output path and writes extracted PDF text there, which expands the skill from read-only browsing into local file export. In an agent setting, this can be abused to persist sensitive document contents to unintended locations, increasing data exfiltration and integrity risk beyond the skill's stated purpose.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The code opens a user-supplied path for writing and stores extracted PDF text there without restriction. Even though it writes text rather than executing code, this permits unauthorized local persistence or overwriting of files accessible to the process, which is more dangerous in a skill advertised primarily for browsing and reading Zotero content.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
91% confidence
Finding

The skill describes writing full PDF text to a file without warning the user that local output will be created. Even if the action is user-initiated, missing disclosure can lead to accidental persistence of copyrighted or sensitive academic material on disk.

Content

No source excerpt is available for this finding.