Back to skill

Security audit

Uplo Clinical

Security checks for vulnerabilities and agentic risk

Overview

The skill is purpose-aligned for clinical knowledge search, but it needs review because it auto-runs an unpinned MCP package with an API token and eagerly retrieves sensitive identity/directive context.

Install only after verifying the `@agentdocs1/mcp-server` package provenance and pinning or otherwise controlling the exact version that runs. Use a least-privilege UPLO token, restrict export and directive tools to authorized users, and avoid automatic identity/directive retrieval unless the specific task needs it.

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
skill.json:21
Finding
Unpinned Third-Party Package Is Automatically Downloaded and Executed## Vulnerability Details **File Location**: `skill.json:21-26` **Vulnerability Type**: Unpinned and automatically executed third-party dependency **Risk Level**: Medium ### Vulnerable Code ```json "mcp": { "command": "npx", "args": [ "-y", "@agentdocs1/mcp-server", "--http" ], ``` The same unsafe installation pattern is documented in `README.md:20-24`: ```json "command": "npx", "args": ["-y", "@agentdocs1/mcp-server", "--http"], "env": { "AGENTDOCS_URL": "https://your-instance.uplo.ai", "API_KEY": "your-api-key", ``` ### Technical Analysis The configuration invokes `npx` with `-y` and a package name that has no exact version constraint. As a result, the package resolved by the registry at execution time may be downloaded and run automatically without user confirmation. The repository contains no lockfile, integrity hash, vendored implementation, or other mechanism that binds execution to an audited artifact. This creates a supply-chain trust gap: the code that executes when the Skill starts can change after this project has been reviewed. The package namespace, `@agentdocs1`, also differs from the advertised UPLO product identity; the reviewed files do not provide evidence establishing publisher ownership or package provenance. This discrepancy is not itself proof of malicious behavior, but it increases the need for explicit verification. ### Attack Path 1. An attacker compromises the package publisher account, package registry distribution path, or another relevant supply-chain component. 2. The attacker publishes a malicious version of `@agentdocs1/mcp-server`. 3. A user installs or starts the Skill. 4. The Skill executes `npx -y @agentdocs1/mcp-server --http`. 5. `npx` resolves, downloads, and runs the mutable package without an interactive approval step. 6. The malicious package executes with the privileges and environment of the Agent process. 7. It can attempt to read the configured `API_KEY`, access files available to that ...[truncated 793 chars]
Remediation
## Remediation Suggestions 1. Replace the unconstrained package reference with a reviewed, exact version, for example `@agentdocs1/mcp-server@X.Y.Z`; do not use a range or floating tag. 2. Use a lockfile that records package versions and integrity metadata, and enforce reproducible installation with a frozen-lockfile mechanism. 3. Verify the package publisher, source repository, release-signing process, and relationship to UPLO before deployment. 4. Remove automatic acceptance through `npx -y`, or install the dependency through a controlled build and approval process rather than downloading it at runtime. 5. Pin and verify package integrity with registry hashes, signed provenance, or an equivalent artifact-verification mechanism. 6. Run the MCP server in a restricted environment with minimal filesystem access, a narrowly scoped API token, an environment-variable allowlist, and outbound network restrictions. 7. Rotate the MCP token if an untrusted or unverifiable package version has already executed. 8. Add dependency monitoring and require security review before changing the pinned version. 9. Update the installation example in `README.md:20-24` to use the same pinned and verified dependency workflow.
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 (4)

Missing User Warnings

Medium
Confidence
84% confidence
Finding
The README advertises capabilities like `export_org_context` and broad organizational context access in a clinical/pharma setting without any warning about handling sensitive data, least-privilege access, or regulatory constraints. In this context, those features could expose proprietary trial data, patient-related documentation, or other confidential clinical information if users enable or invoke them without understanding the risk.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The skill instructs automatic retrieval of identity context and organizational directives at session start before any demonstrated user need or consent boundary. In a clinical environment, these calls can expose sensitive role, clearance, operational, or patient-adjacent information to the model unnecessarily, increasing the blast radius of prompt injection, overcollection, and unauthorized disclosure.

Vague Triggers

Low
Confidence
81% confidence
Finding
This JSON manifest describes the skill in very broad terms such as 'AI-powered clinical operations intelligence' and 'Unified search across clinical trials, protocols, and patient care documentation' without specifying when the skill should or should not be invoked. In a manifest file, that lack of trigger specificity can cause unintended activation across common healthcare or research queries.

Natural-Language Policy Violations

Low
Confidence
64% confidence
Finding
The manifest positions the skill for pharmaceutical and healthcare delivery contexts, but it does not document any user language or locale selection despite operating in domains where terminology and policy can vary by region. If the skill assumes a default language or locale in downstream behavior, that would not be user-opt-in or clearly justified here.

Static analysis

No suspicious patterns detected.