Back to skill

Security audit

Transit Risk Assessment & Delay Hotel Recommendations & Last-Mile Transport Check

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent travel-risk assistant, but it runs unpinned external MCP packages with travel-related API keys and under-discloses location/data sharing.

Review this skill before installing. It appears intended for legitimate travel-risk assistance, but only use it in an environment where the MCP packages are pinned or otherwise vetted, API keys are scoped and rotatable, and users clearly understand which travel, order, and location data may be sent to outside services.

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

Error
Location
SKILL.md:172
Finding
Unpinned Third-Party MCP Packages Are Automatically Downloaded and Executed## Vulnerability Details **File Location**: `SKILL.md`, lines 172-192 **Vulnerability Type**: Supply-chain exposure through unpinned packages and automatic `npx` installation **Risk Level**: High ### Vulnerable Code ```yaml mcpServers: travel-data: command: npx args: ["-y", "@travel/mcp-server"] env: TRAVEL_API_KEY: "${TRAVEL_API_KEY}" hotel-booking: command: npx args: ["-y", "@hotel/mcp-server"] env: HOTEL_API_KEY: "${HOTEL_API_KEY}" city-transport: command: npx args: ["-y", "@city-transport/mcp-server"] env: TRANSPORT_API_KEY: "${TRANSPORT_API_KEY}" ``` ### Technical Analysis The MCP configuration invokes three third-party npm packages through `npx -y`. The `-y` option suppresses installation confirmation, while the package references omit exact versions. No lockfile, integrity hash, vendored artifact, or explicitly trusted installation registry is supplied. Consequently, the code executed when the MCP servers start is not immutable and may differ from the code reviewed during this audit. The risk applies to: - `@travel/mcp-server` - `@hotel/mcp-server` - `@city-transport/mcp-server` If any package name, publisher account, registry resolution path, or later package release is compromised, arbitrary package lifecycle or server code could execute in the MCP process. Each process also receives a service-specific API key through its environment and is intended to process potentially sensitive travel, hotel, order, or location-related information. This finding does not establish that the named packages are currently malicious. It identifies an unsafe dependency execution pattern that permits an upstream compromise to become local code execution. ### Attack Path 1. An attacker compromises a package publisher, package release, or registry resolution path for one of the configured MCP packages. 2. The attacker publishes a malicious release under the same unversioned package name. 3. An Agent ...[truncated 1507 chars]
Remediation
## Remediation Suggestions 1. Replace unversioned package references with exact, reviewed versions, for example `@scope/package@1.2.3`. Do not use version ranges or floating tags. 2. Install dependencies during a controlled build stage rather than downloading them automatically at runtime with `npx -y`. 3. Commit and enforce a lockfile, and use reproducible installation such as `npm ci`. 4. Verify package integrity through lockfile integrity metadata, trusted checksums, signatures, or an internal artifact repository containing approved packages. 5. Explicitly configure a trusted npm registry and prevent fallback to unintended public or private registries. 6. Review package provenance, ownership, release history, lifecycle scripts, transitive dependencies, and published contents before approval. 7. Disable npm lifecycle scripts where they are unnecessary, or separately inspect and permit required scripts. 8. Run every MCP server in an isolated container or sandbox with a read-only filesystem, restricted outbound networking, no access to unrelated host files, and a dedicated low-privilege operating-system identity. 9. Provide each process only its required credential and data. Do not expose unrelated environment variables or API keys. 10. Apply narrowly scoped API permissions, short-lived credentials, rotation, rate limits, and monitoring for anomalous use. 11. Establish a dependency update process requiring security review before any pinned package version is changed.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (6)

Natural-Language Policy Violations

Medium
Confidence
91% confidence
Finding
The description forces a specific language/locale in user-facing natural language content, and the file does not indicate that users can opt into Chinese or that the skill is intended only for a Chinese-speaking region. Per the policy, locale constraints should be optional or clearly justified.

Rp1

Medium
Category
MCP Rug Pull
Confidence
94% confidence
Finding
The skill launches MCP servers via `npx -y @travel/mcp-server` without pinning an exact package version or integrity source. This creates a supply-chain risk: a future malicious or compromised package update could be pulled and executed automatically in the agent environment, with access to API keys and sensitive travel data.

Rp1

Medium
Category
MCP Rug Pull
Confidence
94% confidence
Finding
The hotel MCP server is invoked through unpinned `npx`, so the runtime may fetch and execute whatever package version is current at execution time. In this skill, that server receives booking-related queries and uses `HOTEL_API_KEY`, so a compromised upstream package could exfiltrate credentials or manipulate hotel recommendations.

Rp1

Medium
Category
MCP Rug Pull
Confidence
94% confidence
Finding
The city transport MCP server is also fetched through unversioned `npx`, exposing the skill to arbitrary code execution through package substitution or malicious updates. Because the tool may process itinerary timing and location context, compromise could affect both privacy and output integrity, leading to unsafe or manipulated travel advice.

Intent-Code Divergence

Medium
Confidence
94% confidence
Finding
The privacy section states that location information is not shared with third parties, but the skill design clearly depends on external MCP services for transport, flight, and hotel lookups that may require location and itinerary data. This discrepancy is dangerous because it misrepresents actual data flows, undermines informed consent, and can cause unauthorized disclosure of sensitive travel/location data.

Natural-Language Policy Violations

Medium
Confidence
93% confidence
Finding
The package description is written entirely in Chinese and provides no indication that users can choose another language or locale. This can violate language/locale policy when a skill implicitly constrains interaction to a specific language without explicit opt-in or documented regional scope.

Static analysis

No suspicious patterns detected.