T05 · Unauthorized Access and Privilege Escalation
- Location
services/graph_server.py:786- Finding
Unauthenticated Graph Management Server Exposed on All Network Interfaces
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This literature tool is mostly purpose-aligned, but its interactive server exposes unauthenticated persistent graph editing beyond localhost and it can send research data to external services.
Review before installing: avoid running the serve mode on shared or untrusted networks, keep backups of graph JSON files, do not process sensitive unpublished PDFs or private libraries unless you are comfortable with external API and LLM transmission, and install dependencies in a controlled environment with pinned versions where possible.
services/graph_server.py:786Unauthenticated Graph Management Server Exposed on All Network Interfaces
services/graph_server.py:88Unbounded HTTP Request Bodies and PDF Uploads Permit Resource Exhaustion
requirements.txt:1Unpinned Runtime Dependencies Create a Mutable Supply-Chain Risk
The skill’s stated purpose is literature discovery, but it also supports generic LLM provider selection, provider diagnostics, and outbound requests to many third-party LLM APIs. That capability expansion increases data-exfiltration and policy risk because user-provided graph contents, summaries, or document-derived text may be sent to external providers not implied by the primary description.
The skill’s stated purpose is literature discovery, but it also supports generic LLM provider selection, provider diagnostics, and outbound requests to many third-party LLM APIs. That capability expansion increases data-exfiltration and policy risk because user-provided graph contents, summaries, or document-derived text may be sent to external providers not implied by the primary description.
The code clearly has network capability beyond passive local graph management: it searches external APIs, downloads PDFs, queries citation services, and calls an LLM fallback. If those network operations are not covered by declared permissions, the skill can transmit user-provided titles, BibTeX, PDF-derived content, and graph metadata externally without proper authorization or operator awareness.
The code clearly has network capability beyond passive local graph management: it searches external APIs, downloads PDFs, queries citation services, and calls an LLM fallback. If those network operations are not covered by declared permissions, the skill can transmit user-provided titles, BibTeX, PDF-derived content, and graph metadata externally without proper authorization or operator awareness.
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).
# Remove old installation (copy or broken symlink)
if [ -e "$target_dir/SKILL.md" ] || [ -L "$target_dir/SKILL.md" ]; then
rm -f "$target_dir/SKILL.md"
info "Removed old installation"
fi
# Also remove legacy flat file if it exists
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).
fi
# Also remove legacy flat file if it exists
if [ -e "$HOME/.claude/commands/opg.md" ] || [ -L "$HOME/.claude/commands/opg.md" ]; then
rm -f "$HOME/.claude/commands/opg.md"
info "Removed legacy opg.md"
fi
The README promotes workflows that save outputs and operate on local files, but in the early feature overview it does not clearly warn users that graph creation, exports, and later interactive operations write data to disk and may modify existing files. In an agent-executed skill context, this matters because users may invoke commands through natural language without realizing the tool persists artifacts or changes local research data.
The browser UI states that all mutations are saved to the JSON file immediately, but it does not clearly warn about overwrite, corruption, or accidental data-loss risk for the backing file. Because this is a persistent interactive server used by an agent-oriented skill, users may assume edits are reversible when they are not, increasing the chance of unintended destruction or silent modification of research data.
该 markdown 文件描述了 serve 模式下“所有操作立即写入 JSON 文件”和“刷新页面后更改均已保存”,但未在命令说明或快速开始处给出显式用户警告,提醒这会直接修改本地文件。由于该行为会影响用户数据且包含添加、转化、删除等变更,仅靠功能描述不足以构成清晰的安全提示。
Docker image references without a specific tag (:latest is implicit) or digest (@sha256:...) can be silently replaced by a malicious image.
Docker image references without a specific tag (:latest is implicit) or digest (@sha256:...) can be silently replaced by a malicious image.
The manifest says to use the skill when a user asks about 'finding papers, literature review, citation analysis, research trends, or visualizing citation networks.' Several of these triggers, especially 'literature review' and 'research trends,' are broad everyday research requests without clear boundaries on when this skill should or should not activate.
The manifest omits that the skill can start a persistent local HTTP server with browser-based editing and immediate writes to the graph JSON file. Hidden server exposure and persistent mutation are relevant security properties because they expand the attack surface and can surprise users or agents that expect a read/analyze/export-only workflow.
The markdown describes a local server that persists edits to disk but does not present an explicit user warning about network exposure and automatic file modification. In an agent setting, lack of warning increases the risk of accidental server startup or unreviewed persistent changes, especially when users expect analysis rather than hosting/editing.
The skill description understates destructive editing features such as removing papers/seeds and overwriting graph files. Even if intended, file-destructive operations are security-relevant because an agent may invoke them without the user realizing they are irreversible or that they alter existing data in place.
The removal commands overwrite graph files and delete content without a strong user-facing warning. In a tool likely to be used by autonomous or semi-autonomous agents, missing warnings around destructive operations make accidental data loss more likely and can turn ordinary prompts into irreversible changes.
The _llm_extract_references path extracts text from uploaded/downloaded PDFs and sends up to 12,000 characters to an external LLM service without any user-facing warning or consent in this file. Academic PDFs can contain unpublished drafts, licensed content, or sensitive annotations, so silent transmission to a third party creates confidentiality and compliance risk.
The metadata enrichment flow reads S2_API_KEY from the environment and performs external HTTP requests to Semantic Scholar without any explicit disclosure in this file. While expected for a literature-discovery skill, it still means user-supplied or graph-derived paper identifiers are sent to a third party and hidden credential use occurs outside an obvious consent boundary.
The summary command can route graph contents to an external LLM provider after setting provider/model from arguments, but the CLI does not clearly warn that paper metadata, abstracts, and graph-derived research structure may leave the local environment. In this skill context, literature graphs may include sensitive unpublished PDFs, curated collections, or proprietary topic mappings, making undisclosed third-party transmission materially risky.
The Zotero command accepts an API key and imports library contents, which necessarily transmits sensitive credentials and reading-library metadata to external services and internal service handlers without any explicit privacy or consent warning in the CLI flow. In a research-assistant skill, bibliographic libraries can reveal unpublished work, interests, collaborators, or institutional activity, so silent transmission increases privacy and secret-handling risk.
When --summary is used during HTML export, the command pre-generates a summary from graph data via an LLM provider and embeds the result into the HTML, but the user is not clearly warned that graph contents may be sent to a third party first. Because this tool processes academic PDFs, citation networks, and research summaries, the exported data may encode sensitive research interests or unpublished references, so hidden external processing is a meaningful privacy issue.
The manifest describes literature discovery, citation analysis, summaries, imports, exports, and HTML visualization, but this file also exposes an interactive server plus remove-seed and remove-paper commands that modify stored graph files. Those graph-management operations are not disclosed in the stated skill description and expand behavior from analysis/visualization into persistent editing and serving.
The LLM summary path constructs a prompt containing titles, authors, years, citation counts, and up to 300 characters of each abstract, then sends it to an external provider via llm_chat. In an academic research tool, abstracts and bibliographic metadata are usually less sensitive than direct personal secrets, but unpublished, proprietary, licensed, or user-curated paper collections may still be exposed to third parties without an explicit disclosure or consent gate at the point of transmission.
The LLM fallback sends up to 3000 characters of first-page PDF text to an external model service, which can contain unpublished research, author PII, affiliations, emails, grant details, or other sensitive content. In a literature-analysis skill, users may reasonably expect local parsing of PDFs; silent transmission to a third-party LLM creates a real privacy and data-handling risk even though it is not arbitrary code execution.
The code extracts substantial text from a local PDF and sends it to an external LLM service via llm_chat without any consent gate, sensitivity check, or user-visible disclosure at this call site. In a literature tool, uploaded PDFs may contain copyrighted, unpublished, or confidential material, so silent transmission to a third party creates a real privacy and data-governance risk.
No suspicious patterns detected.