Back to skill

Security audit

arXiv Research Assistant

Security checks for vulnerabilities and agentic risk

Overview

This arXiv research skill is mostly coherent and disclosed, with optional paper tracking and dependency hygiene issues users should understand before installing.

Install only if you are comfortable with a skill that contacts arXiv, can download PDFs to a local papers folder, and can write paper metadata/status to MongoDB when you configure MONGODB_URI. If you enable tracking, use a database account limited to the intended database/collection, and prefer pinned dependencies or an isolated environment because the package uses open-ended dependency versions.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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)

T08 · Insecure Dependencies

Warning
Location
requirements.txt:1
Finding
Unbounded Third-Party Dependencies Without Integrity Verification<![CDATA[ ## Vulnerability Details **File Location**: `requirements.txt:1-2`; also declared in `package.json:17-22` **Vulnerability Type**: Supply-chain risk from unbounded dependency resolution **Risk Level**: Medium ### Vulnerable Code `requirements.txt:1-2`: ```text arxiv>=2.0.0 pymongo>=4.0.0 ``` `package.json:17-22`: ```json "dependencies": { "python": ">=3.8", "arxiv": ">=2.0.0" }, "optional_dependencies": { "pymongo": ">=4.0.0" } ``` ### Technical Analysis The project specifies minimum dependency versions with no upper bounds, exact pins, lockfile, or package integrity hashes. A fresh installation can consequently resolve to any future version of `arxiv` or `pymongo`, including a compromised or malicious release that was never reviewed with this Skill. Python packages can execute code during installation and whenever imported. Both dependencies are imported by `arxiv_tool.py`, with `pymongo` imported automatically whenever it is installed. Therefore, compromise of an allowed dependency version could result in attacker-controlled code running in the Skill's process. Although MongoDB support is documented as optional, `requirements.txt` installs `pymongo` unconditionally. This unnecessarily expands the core installation's dependency and attack surface beyond what is required for searching, retrieving, and downloading arXiv papers. This finding does not establish that the current upstream packages are malicious. The vulnerability is the project's failure to constrain and verify the dependency versions installed in the future. ### Attack Path 1. An attacker compromises an upstream dependency maintainer account, distribution infrastructure, or another authorized release channel for `arxiv` or `pymongo`. 2. The attacker publishes a malicious release whose version satisfies the project's open-ended `>=` constraint. 3. A user installs or updates the Skill's dependencies without a previously locked environment. 4. The package resolver selects t ...[truncated 870 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Replace open-ended dependency ranges with exact, reviewed versions, for example: ```text arxiv==<reviewed-version> pymongo==<reviewed-version> ``` 2. Generate and commit a lockfile containing the complete transitive dependency graph. 3. Require cryptographic hashes during installation, such as a hash-locked requirements file used with: ```bash pip install --require-hashes -r requirements.txt ``` 4. Move `pymongo` out of the default requirements file and into an optional dependency group so users who only need arXiv functionality do not install it. 5. Use automated dependency scanning and controlled update reviews before accepting new package versions. 6. Install dependencies in an isolated virtual environment or least-privileged container, and avoid running installation or the Skill as an administrator. 7. Keep the dependency declarations in `requirements.txt` and `package.json` synchronized to prevent installation behavior from differing across tooling. ]]>
Vulnerability Patterns
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (13)

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding
The skill description presents a narrow arXiv search/summarization function, but the behavior includes persistent MongoDB-backed state operations that are not transparently declared. This mismatch is dangerous because users may authorize or invoke the skill under the assumption it is read-only, when it can also store and update data, creating consent, privacy, and data-handling risks.

Credential Access

High
Category
Privilege Escalation
Content
Optional MongoDB integration for paper tracking:
```yaml
# In your .env
MONGODB_URI=your_connection_string
MONGODB_DB_NAME=your_database
```
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Description-Behavior Mismatch

Medium
Confidence
90% confidence
Finding
The manifest and README position the skill as an arXiv research assistant for searching, downloading, and summarizing papers. The README additionally documents a MongoDB connection for 'paper tracking', which is a distinct persistence capability not implied by the stated scope and goes beyond obvious implementation details of arXiv retrieval.

Lp3

Medium
Category
MCP Least Privilege
Confidence
87% confidence
Finding
The skill advertises capabilities that rely on environment-provided configuration but does not declare any explicit tool scope or permissions boundary. This is dangerous because it obscures what resources the skill may access at runtime, making it harder for users and hosts to constrain secret-bearing environment access and increasing the chance of unintended privilege exposure.

Vague Triggers

Medium
Confidence
85% confidence
Finding
The phrases "Add this paper to my reading list" and "Show my saved papers" are generic enough to collide with normal assistant interactions and are not explicitly limited to arXiv papers or this skill's storage scope. The document provides examples, but no negative examples or activation constraints clarifying when these requests should or should not invoke this skill.

Description-Behavior Mismatch

Medium
Confidence
95% confidence
Finding
The skill advertises arXiv search, download, and summarization, but it also introduces persistent state by saving papers and reading status to MongoDB. This expands the capability and data-handling surface beyond the declared purpose, creating unnecessary storage of user activity and metadata that could be abused, leaked, or retained without user expectation.

Context-Inappropriate Capability

Medium
Confidence
95% confidence
Finding
The code reads database connection details from environment variables and establishes a MongoDB connection even though the stated skill purpose is limited to arXiv paper search/download/summarize. This creates an undeclared external connectivity and data persistence path, increasing the risk of unintended data exfiltration, credential misuse, and privilege expansion if the runtime environment exposes sensitive database access.

Vague Triggers

Medium
Confidence
95% confidence
Finding
The trigger list includes generic phrases like "paper," "research paper," and "find papers," which are common in normal conversation and could cause the skill to activate when the user did not specifically intend to invoke arXiv functionality. In an agent ecosystem, overly broad activation can route unrelated requests into this skill, creating confused-deputy behavior, privacy leakage of user queries, or interference with safer/more appropriate tools.

Context-Inappropriate Capability

Medium
Confidence
93% confidence
Finding
The skill is described as an arXiv search/download/summarization tool, but it declares a MongoDB client dependency that is not obviously required for that purpose. Extra data-storage capability expands the attack surface and creates the possibility of hidden data collection, persistence, or exfiltration logic elsewhere in the skill. In this context, the mismatch between stated purpose and dependency set makes the inclusion security-relevant.

Missing User Warnings

Low
Confidence
94% confidence
Finding
This markdown file states that the skill can 'Save papers locally for offline reading' but does not provide any user warning about local filesystem writes, overwrite behavior, or storage location. For markdown files, user-facing documentation should disclose behaviors that affect user data or system state, and local downloads are such a behavior.

Unpinned Dependencies

Low
Category
Supply Chain
Content
arxiv>=2.0.0
pymongo>=4.0.0
Confidence
88% confidence
Finding
Using arxiv>=2.0.0 allows installation of any newer release, which makes builds non-reproducible and can silently introduce vulnerable or incompatible versions over time. While not an immediate exploit by itself, unpinned dependencies weaken supply-chain control and make security review of deployed artifacts difficult.

Unpinned Dependencies

Low
Category
Supply Chain
Content
arxiv>=2.0.0
pymongo>=4.0.0
Confidence
95% confidence
Finding
Using pymongo>=4.0.0 permits any later version to be installed, preventing reliable verification of whether deployed builds contain known-vulnerable releases. Because pymongo is a network-capable database client and this skill’s purpose does not clearly require it, leaving it unpinned compounds both supply-chain and unnecessary-capability risk.

Unverifiable Dependency: pymongo has 4 known advisory(ies) (CVE-2024-5629 (PyMongo Out-of-bounds Read in the bson module ); CVE-2013-2132 (Use of NullPointerException Catch to Detect NULL Pointer Dereference in Pymongo); CVE-2013-2132 (bson/_cbsonmodule.c in the mongo-python-driver (aka. pymongo) before 2.5.2, as u) +1 more), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
80% confidence
Finding
The manifest includes pymongo without pinning a specific version, and pymongo has known security advisories across some releases. Because the installed version is unconstrained beyond a minimum, it is not possible to verify from this file alone that deployments will avoid affected versions, creating avoidable exposure to dependency-level flaws.

Static analysis

No suspicious patterns detected.