Back to skill

Security audit

Uplo Customer 360

Security checks for vulnerabilities and agentic risk

Overview

The skill’s customer-intelligence purpose is coherent, but it uses a mutable third-party MCP package with an API key and enables broad customer and organizational data access that needs review before installation.

Install only if you trust the UPLO instance and MCP package supply chain, can issue a least-privilege UPLO token, and can restrict access to assigned accounts and approved datasets. Review or pin the MCP server package version before use, and treat exports and broad customer searches as confidential operations that may expose sensitive business or customer data.

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:30
Finding
Automatic Execution of an Unpinned Third-Party npm Package<![CDATA[ ## Vulnerability Details **File Location**: `skill.json:30-43`; also documented in `README.md:20-28` **Vulnerability Type**: Unpinned dependency automatically downloaded and executed with access to MCP credentials **Risk Level**: Medium ### Vulnerable Code `skill.json:30-43`: ```json "mcp": { "command": "npx", "args": [ "-y", "@agentdocs1/mcp-server", "--http" ], "env": { "AGENTDOCS_URL": "${config.agentdocs_url}", "API_KEY": "${config.api_key}", "DEFAULT_PACKS": "sales_marketing,customer_success,retail" }, "transport": "http", "url": "${config.agentdocs_url}/mcp" } ``` The corresponding installation configuration appears in `README.md:20-28`: ```json "command": "npx", "args": ["-y", "@agentdocs1/mcp-server", "--http"], "env": { "AGENTDOCS_URL": "https://your-instance.uplo.ai", "API_KEY": "your-api-key", "DEFAULT_PACKS": "sales_marketing,customer_success,retail" } ``` ### Technical Analysis The Skill invokes `npx -y @agentdocs1/mcp-server --http` without specifying an exact package version or integrity hash. When the package is not already available locally, `npx` resolves it through the configured npm registry, downloads it, and executes its entry point. The `-y` option suppresses the normal installation confirmation. Because no version is pinned, the executable code may change after this Skill has been reviewed. A compromised npm publisher account, malicious future release, registry compromise, or package ownership transfer could therefore cause users to execute code that was not present in the audited artifact. The spawned package also receives `API_KEY` and `AGENTDOCS_URL` in its environment. Consequently, malicious package code would be able to read the UPLO MCP credential directly. The package implementation is not included in this project, so its internal behavior and credential handling cannot be verified by this audit. ### Attack Path 1. An attacker compromises the npm account, publicatio ...[truncated 1477 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Pin the dependency to a reviewed exact version, for example: ```json "args": [ "-y", "@agentdocs1/mcp-server@1.2.3", "--http" ] ``` Do not use version ranges, tags such as `latest`, or an omitted version. 2. Prefer installing dependencies through a committed lockfile and executing the locked local binary rather than allowing `npx` to resolve a package dynamically at every startup. 3. Verify package integrity using npm lockfile integrity metadata, a trusted artifact digest, or a signed release-verification process. 4. Remove `-y` where interactive approval is practical. Although confirmation does not eliminate supply-chain risk, it prevents silent installation of newly resolved packages. 5. Run the MCP server in a sandbox or container with: - A read-only or narrowly scoped filesystem - No access to unrelated user files or environment variables - Restricted outbound network access - A dedicated unprivileged operating-system identity - Resource and process limits 6. Issue a least-privilege API token limited to the required MCP operations, datasets, classification tiers, and tenant. Avoid administrative or broadly reusable credentials. 7. Establish dependency monitoring and release review. Require security validation before changing the pinned package version, and rotate the API key promptly if dependency compromise is suspected. ]]>
Vulnerability Patterns
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (4)

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The README advertises tools such as `export_org_context`, `search_knowledge`, and `search_with_context` that can expose broad internal organizational knowledge, but it does not warn users that these capabilities may return sensitive or regulated data. In a customer lifecycle and Customer 360 context, those searches can include sales pipeline details, account health, customer analytics, and other confidential business information, increasing the risk of over-broad deployment or unsafe user assumptions.

Vague Triggers

Medium
Confidence
90% confidence
Finding
The skill is defined with a very broad purpose and no clear trigger boundaries, exclusions, or least-privilege guidance. In a customer intelligence context, that increases the chance the agent will be invoked for overly broad account discovery, cross-functional data access, or ambiguous requests that expose more customer information than necessary.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
The documentation encourages unified access to sales, support, onboarding, NPS, and retail analytics data, but it does not warn about handling sensitive customer data, need-to-know access, or restrictions on personal/confidential information. Because the skill explicitly aggregates multiple business systems, missing privacy and authorization guidance raises the risk of inappropriate disclosure, over-collection, and misuse of sensitive commercial or customer data.

Context-Inappropriate Capability

Medium
Confidence
88% confidence
Finding
The skill declares an export_org_context capability even though its stated purpose is customer lifecycle search and intelligence. That capability can enable broad extraction of organizational data beyond what is necessary for search workflows, increasing the blast radius if the skill is misused, over-privileged, or compromised.

Static analysis

No suspicious patterns detected.