Back to skill

Security audit

arxiv

Security checks for vulnerabilities and agentic risk

Overview

This arXiv skill is coherent and disclosed, with manageable risks around optional reading-list storage, broad triggers, and unpinned dependencies.

Before installing, be aware that this skill can download PDFs to disk and, if you configure MongoDB, store your saved-paper list and reading statuses. Use an isolated Python environment, consider pinning dependencies, and avoid enabling MongoDB unless you want that research history stored.

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 and Unverified Third-Party Python Dependencies## Vulnerability Details **File Location**: `requirements.txt`, lines 1–2 **Vulnerability Type**: Dependency versions are not locked and package integrity is not verified **Risk Level**: Medium ### Vulnerable Code ```text arxiv>=2.0.0 pymongo>=4.0.0 ``` The same open-ended constraints are also represented in `package.json`, where `arxiv` and `pymongo` use minimum-version constraints rather than exact versions. ### Technical Analysis Both dependencies permit installation of any current or future release at or above the specified version. No lock file or cryptographic hashes are supplied to establish which exact artifacts were reviewed and approved. Consequently, two installations of the same Skill version can resolve to materially different dependency code. If an upstream package, maintainer account, release pipeline, or configured package index is compromised, a malicious future release can be selected automatically without any modification to this repository. Python packages can execute code during source builds or installation, and their imported modules execute top-level code in the Skill process. This is particularly relevant here because `arxiv` is imported unconditionally and `pymongo` is imported whenever installed. Although MongoDB support is documented as optional, `requirements.txt` installs `pymongo` as a normal dependency, unnecessarily increasing the default dependency and attack surface. This finding does not establish that the currently available `arxiv` or `pymongo` releases are malicious. It identifies a confirmed lack of dependency reproducibility and integrity controls. ### Attack Path 1. An attacker compromises an upstream dependency publisher, release process, or package index used by the installer. 2. The attacker publishes a malicious version satisfying `arxiv>=2.0.0` or `pymongo>=4.0.0`. 3. A user installs or updates the Skill without a pre-existing lock or constrained environment. ...[truncated 903 chars]
Remediation
## Remediation Suggestions 1. Pin reviewed dependency versions exactly, for example through a generated lock or constraints file. 2. Use `pip-compile --generate-hashes` or an equivalent reproducible dependency workflow, and install with `pip --require-hashes`. 3. Lock transitive dependencies as well as direct dependencies. 4. Move `pymongo` out of the default requirements and into a clearly documented optional extra so users who only search or download papers do not install it. 5. Configure installation to use trusted HTTPS indexes explicitly and prohibit unreviewed alternate or extra package indexes. 6. Add automated dependency vulnerability and provenance checks, such as `pip-audit`, release review, and lock-file update approval. 7. Run installation and execution as an unprivileged account in an isolated virtual environment or container. 8. Keep `package.json`, `requirements.txt`, and documentation consistent about which dependencies are mandatory and which are optional.
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 (11)

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding
The skill description says it searches, downloads, and summarizes arXiv papers, but the documented behavior also includes persistent reading-list storage in MongoDB and stateful updates to saved papers. Undeclared persistence changes the trust boundary: users may provide research interests, reading history, or paper selections without realizing that data can be stored, which creates privacy and consent risks and can lead to unexpected retention of user activity.

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.

Lp3

Medium
Category
MCP Least Privilege
Confidence
70% confidence
Finding
Without declared permissions the skill's intent is opaque and cannot be validated.

Description-Behavior Mismatch

Medium
Confidence
97% confidence
Finding
Both the manifest and module docstring describe summarization/analysis behavior, but the implemented commands only search, get metadata, download PDFs, and save/list/update records. Showing the abstract verbatim or truncated is not the same as generating a summary.

Description-Behavior Mismatch

Medium
Confidence
95% confidence
Finding
The manifest describes an arXiv research utility for searching, downloading, and summarizing papers. This file adds separate stateful database capabilities via MongoDB, including saving papers, listing saved papers, and updating statuses, which go beyond the described scope of retrieval/summarization.

Vague Triggers

Medium
Confidence
94% confidence
Finding
The trigger list includes broad natural-language phrases such as "paper," "research paper," and "search papers" that are likely to appear in ordinary user conversation. This can cause the skill to activate unintentionally, leading to prompt hijacking of unrelated interactions or unexpected execution of the skill in contexts where the user did not intend to invoke it.

Context-Inappropriate Capability

Medium
Confidence
95% confidence
Finding
The manifest describes a skill for searching, downloading, and summarizing academic papers from arXiv for AI/ML researchers. The inclusion of `pymongo` indicates database access capability, which is not an obvious or necessary requirement for the stated purpose and suggests unrelated data storage or persistence functionality.

Intent-Code Divergence

Low
Confidence
91% confidence
Finding
This is an active documentation-to-code mismatch: the top-level documentation claims analysis capability that is not implemented anywhere in the file. The rest of the code contains no processing beyond formatting metadata and returning abstracts.

Unpinned Dependencies

Low
Category
Supply Chain
Content
arxiv>=2.0.0
pymongo>=4.0.0
Confidence
95% confidence
Finding
The dependency `arxiv>=2.0.0` is not pinned to a specific version, so installations may resolve to different releases over time. This increases supply-chain risk, can introduce breaking or insecure updates unexpectedly, and reduces reproducibility for security review.

Unpinned Dependencies

Low
Category
Supply Chain
Content
arxiv>=2.0.0
pymongo>=4.0.0
Confidence
97% confidence
Finding
The dependency `pymongo>=4.0.0` is unpinned, allowing any newer version to be installed. This creates avoidable supply-chain and reproducibility risk, especially for a package with historical advisories, because security posture cannot be determined from the manifest alone.

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
91% confidence
Finding
`pymongo` has known advisories, and because the manifest does not pin a version, it is impossible to verify whether the resolved install is affected. This uncertainty is dangerous in dependency manifests because vulnerable versions may be selected in some environments without detection.

Static analysis

No suspicious patterns detected.