Back to skill

Security audit

德胧通用商旅出行规划助手

Security checks for vulnerabilities and agentic risk

Overview

The travel-planning skill is mostly coherent, but it tells users to run unpinned MCP packages with npx and sends sensitive trip details to multiple external services.

Install only if you are comfortable sharing travel details with the listed travel, map, hotel, and search services. Pin and review MCP package versions before use, avoid npx -y latest-style execution in privileged environments, and use a restricted sandbox with minimal environment variables.

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.md:99
Finding
Unpinned npm Packages Are Downloaded and Executed Without Confirmation## Vulnerability Details **File Location**: `SKILL.md`, lines 99–103; repeated at lines 380–384. Related package invocation instructions also appear at lines 59 and 65. **Vulnerability Type**: Supply-chain risk from mutable, unpinned npm dependencies **Risk Level**: Medium **Complete vulnerable configuration:** ```json { "mcpServers": { "12306-mcp": { "command": "npx", "args": ["-y", "12306-mcp"] }, "amap-mcp": { "type": "sse", "url": "https://mcp.amap.com/sse?key={AMAP_WEB_KEY}" } } } ``` The same unsafe execution pattern is documented for an optional package: ```text npx -y xhs-mcp ``` ### Technical Analysis The configuration invokes `npx` with the `-y` option and a package name that has no exact version or integrity constraint. If the package is not already available in a trusted local cache, `npx` can retrieve it from the configured npm registry and execute it without an interactive confirmation prompt. Because `12306-mcp` and `xhs-mcp` are not pinned to reviewed versions, the effective code can change after this Skill has been audited. A compromised maintainer account, malicious future release, registry compromise, dependency confusion condition, or compromise of a transitive dependency could therefore turn an otherwise legitimate MCP startup operation into arbitrary local code execution. This finding establishes an unsafe dependency-execution mechanism; it does not establish that the currently published packages are malicious. ### Attack Path 1. An attacker compromises the relevant npm package, its maintainer account, the package publication process, or a transitive dependency. 2. The attacker publishes a malicious version that becomes the version resolved by the unpinned package name. 3. A user or Agent applies the MCP configuration or runs the documented `npx -y` command. 4. `npx` resolves and downloads the mutable package version without as ...[truncated 878 chars]
Remediation
## Remediation Suggestions 1. Pin every npm dependency to a reviewed exact version, for example `12306-mcp@X.Y.Z`, rather than resolving a mutable latest release. 2. Use a lockfile with verified registry integrity hashes and retain it as part of the reviewed deployment artifact. 3. Install dependencies during a controlled build or provisioning phase instead of downloading and executing packages at Skill invocation time. 4. Use an approved private registry or package allowlist and verify package provenance, publisher identity, signatures, and checksums. 5. Review direct and transitive dependencies before upgrades, and automate vulnerability and unexpected-maintainer-change monitoring. 6. Disable npm lifecycle scripts where operationally possible, such as with `--ignore-scripts`, while confirming that the selected package does not legitimately require them. 7. Run MCP servers in a restricted sandbox or container with minimal filesystem access, no unnecessary credentials, limited environment variables, a non-privileged user, and outbound-network controls. 8. Replace `-y` with an explicit installation and approval workflow so dependency changes cannot be accepted silently.
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 (5)

Vague Triggers

High
Confidence
97% confidence
Finding
The trigger phrases are very broad and include common travel-related words such as `travel`, `trip plan`, and generic itinerary requests, making accidental activation likely during ordinary conversation. Over-broad activation can cause the assistant to collect sensitive itinerary data or send it to external services unexpectedly, increasing privacy and prompt-routing risk.

Missing User Warnings

Medium
Confidence
97% confidence
Finding
The skill does not clearly warn users that itinerary details, locations, dates, and preferences may be sent to external services such as 12306, AMap, and web search providers, and then embedded into generated links or HTML reports. This is a meaningful privacy issue because business travel plans often contain sensitive operational, personal, or location information.

Vague Triggers

Medium
Confidence
92% confidence
Finding
The markdown trigger section remains ambiguous because it describes broad activation conditions without clear boundaries or exclusions. In context, this skill can query third-party services and generate links/reports, so ambiguous routing increases the chance of unintentional disclosure of user travel details to external providers.

Rp1

Medium
Category
MCP Rug Pull
Confidence
92% confidence
Finding
The skill references an external MCP server via `npx -y xhs-mcp` without pinning a specific package version or integrity source. This creates a supply-chain risk: a future malicious or compromised package release could be fetched and executed at runtime, which is especially dangerous because MCP servers may access user queries, travel details, and tool integrations.

Natural-Language Policy Violations

Medium
Confidence
89% confidence
Finding
The template specifies `<html lang="zh-CN">`, which forces a Chinese language/locale setting in generated output. The file does not state that this is optional, user-selected, or justified as a China-only skill, so it creates a natural-language locale constraint without opt-in.

Static analysis

No suspicious patterns detected.