Back to skill

Security audit

全能旅行助手

Security checks for vulnerabilities and agentic risk

Overview

This is a coherent travel-search skill, but it routes sensitive travel/location queries through custom cloud proxies and ships a shared proxy authentication token in the package.

Install only if you are comfortable sending travel searches, locations, dates, hotel names, and route details through the publisher's cloud proxies to travel/map providers. The publisher should rotate and remove the embedded shared proxy token, use scoped per-install credentials, and make the privacy/proxy disclosure more prominent.

Vulnerability Patterns
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • 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)

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/smart_travel.py:14
Finding
Hard-Coded Shared Proxy Authentication Token## Vulnerability Details **File Location**: `scripts/smart_travel.py:14-18`, with credential use at `scripts/smart_travel.py:34-40`, `54-60`, `77-83`, and `97-103` **Vulnerability Type**: Hard-coded authentication credential **Risk Level**: Medium ### Vulnerable Code ```python FLIGGY_PROXY = "https://1439498936-6sysdjjt99.ap-guangzhou.tencentscf.com" GAODE_PROXY = "https://1439498936-bl10af74fl.ap-guangzhou.tencentscf.com" TONGCHENG_PROXY = "https://1439498936-7vqpkiipef.ap-guangzhou.tencentscf.com" TUNIU_PROXY = "https://1439498936-0junm3maxj.ap-guangzhou.tencentscf.com" PROXY_TOKEN = "tp_8k2mX9vQ4z" ``` The same embedded credential is supplied to all four proxy services: ```python headers={"Content-Type": "application/json", "X-Proxy-Token": PROXY_TOKEN}, ``` ### Technical Analysis The package exposes a reusable authentication token directly in source code alongside all corresponding service endpoints. Any party able to download or inspect the Skill can recover the token without executing the code. Because the token is shared across the Fliggy, Gaode, Tongcheng, and Tuniu proxy clients, it cannot provide meaningful caller isolation. If the backends accept it as sufficient authorization, an attacker can reproduce the requests outside the Skill and submit arbitrary supported request bodies directly to the disclosed Tencent Cloud Function endpoints. The outbound network access itself is consistent with the declared travel-search functionality. The security defect is the distribution of a long-lived shared credential to every Skill recipient rather than the minimum necessary network privilege. ### Attack Path 1. Download or otherwise inspect the publicly distributed Skill package. 2. Read `scripts/smart_travel.py` and extract the four proxy URLs and `PROXY_TOKEN`. 3. Construct an HTTPS POST request to one of the disclosed endpoints. 4. Set `X-Proxy-Token: tp_8k2mX9vQ4z` and submit a crafted JSON request mat ...[truncated 1009 chars]
Remediation
## Remediation Suggestions 1. Revoke and rotate the exposed token immediately, treating it as compromised. 2. Remove all authentication secrets from the source package and repository history. 3. Obtain credentials at runtime from a trusted secret-management or authorization service rather than distributing them with the Skill. 4. Prefer short-lived, per-user or per-installation credentials with narrow scopes and explicit expiration. 5. Use separate credentials for each backend so compromise of one integration does not authorize access to every proxy. 6. Enforce server-side route allowlists and strict JSON schema validation; never rely on the client to restrict request types or parameters. 7. Add per-identity rate limits, quotas, replay resistance, anomaly detection, and auditable request attribution. 8. Limit upstream permissions to read-only travel-search operations and prevent access to administrative or unrelated proxy routes. 9. Provide a revocation and rotation mechanism that does not require publishing another shared secret in source code. 10. Document what user data is transmitted, the proxy operator, retention behavior, and applicable privacy controls. The package states that proxy services do not retain user data, but this cannot be verified from the audited client code.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (8)

Lp3

Medium
Category
MCP Least Privilege
Confidence
92% confidence
Finding
The skill declares many network-backed tools and explicitly forwards user queries to multiple third-party travel providers, but it does not define an explicit tool scope such as permissions or allowed-tools. This weakens least-privilege guarantees and makes it harder for users and reviewers to understand or constrain what external capabilities the skill may exercise.

Vague Triggers

Medium
Confidence
87% confidence
Finding
The invocation examples are broad, natural phrases like ordinary travel requests, without clear trigger boundaries or disambiguation. This can cause unintended activation in normal conversation, leading to unintentional transmission of itinerary, location, or travel preference data to external providers.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The skill states that queries are forwarded through a cloud proxy to several travel and map providers, but it does not give a clear up-front warning that user travel queries, itinerary details, and location-related data may be shared with third parties. Users may disclose sensitive trip plans or personal movement information without informed consent.

Natural-Language Policy Violations

Medium
Confidence
95% confidence
Finding
All natural-language strings, examples, parsing rules, supported city names, and output formatting are written specifically for Chinese users, and the skill logic depends on Chinese phrases like '明天' and '到'. There is no indication that users can opt into this locale restriction or switch to another language, which conflicts with the policy against forcing a specific language without user choice.

Missing User Warnings

Medium
Confidence
96% confidence
Finding
The skill sends user-supplied travel queries and related location/search parameters to multiple hard-coded third-party proxy endpoints, but there is no user-facing disclosure or consent mechanism. Travel requests can contain sensitive personal context such as locations, itineraries, hotels, and dates, so undisclosed transmission increases privacy and data-handling risk, especially because the services are custom SCF proxy URLs rather than clearly identified first-party APIs.

Natural-Language Policy Violations

Low
Confidence
78% confidence
Finding
The display name, description, usage examples, and instructions are entirely in Chinese, with no indication that the skill can respond in another language or that the Chinese-only scope is intentional and user-selectable. This may violate a language/locale policy where users should be offered a language choice unless the locale restriction is clearly justified.

Description-Behavior Mismatch

Low
Confidence
82% confidence
Finding
The module docstring and manifest emphasize a one-stop travel assistant centered on itinerary planning and common travel categories like flights, hotels, trains, attractions, food, and weather. However, the code also implements specialized commerce-oriented product searches such as Marriott packages, group tours, cruises, and holiday package products via additional providers, which goes beyond the narrower category list presented in the manifest text.

Intent-Code Divergence

Low
Confidence
75% confidence
Finding
The docstring for get_marriott_hotel_info states that it retrieves detailed Marriott hotel information, implying a dedicated detail lookup. In practice, the function may replace that result with a generic 'fliggy_ai_search' query for '详细信息', which is a different behavior and not the direct detail retrieval described.

Static analysis

No suspicious patterns detected.