Back to skill

Security audit

出境游旅行助手

Security checks for vulnerabilities and agentic risk

Overview

This is a coherent Chinese-language travel assistant that uses disclosed remote lookup services for live travel data and does not show destructive, persistent, or deceptive behavior.

Install only if you are comfortable sending flight, hotel, seat, baggage, and hotel-detail queries to the skill's RG cloud proxy and currency codes to a public exchange-rate API. Avoid entering unnecessary personal details beyond the itinerary fields needed for a lookup.

Vulnerability Patterns
  • 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
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Taint TrackingDirect Taint Flow, Variable-Mediated Taint Flow, Credential Exfiltration Chain
  • 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 (9)

Tainted flow: 'req' from os.environ.get (line 25, credential/environment) → urllib.request.urlopen (network output)

Critical
Category
Data Flow
Confidence
92% confidence
Finding

The proxy request target is taken from the RG_PROXY environment variable and used directly in urllib.request.urlopen, so deployment-time configuration can silently redirect all flight/hotel/seat/baggage queries and the attached bearer token to an arbitrary endpoint. In this skill’s context, those requests contain travel itinerary details and may include Authorization credentials, making SSRF-style misrouting, data exfiltration, or credential leakage plausible if the runtime environment is misconfigured or compromised.

Content

Scanner excerpt · scripts/outbound_travel_assistant.py (reported line 32)May include surrounding context.

python
method="POST",
    )
    try:
        with urllib.request.urlopen(req, timeout=30) as resp:
            data = json.loads(resp.read().decode("utf-8"))
            return data
    except urllib.error.HTTPError as e:

Tainted flow: 'req' from os.environ.get (line 25, credential/environment) → urllib.request.urlopen (network output)

Critical
Category
Data Flow
Confidence
90% confidence
Finding

Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.

Content

Scanner excerpt · scripts/outbound_travel_assistant.py (reported line 680)May include surrounding context.

python
url = f"https://open.er-api.com/v6/latest/{from_currency.upper()}"
    try:
        req = urllib.request.Request(url)
        with urllib.request.urlopen(req, timeout=15) as resp:
            data = json.loads(resp.read().decode("utf-8"))
    except Exception as e:
        return json.dumps({"error": f"汇率查询失败: {e}"}, ensure_ascii=False)

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
93% confidence
Finding

The skill declares tools that rely on environment variables and remote network access, but it does not define an explicit tool scope such as permissions or allowed-tools. This can weaken least-privilege controls and make the skill's operational boundaries unclear to the host platform and users, increasing the chance of unintended tool or data access.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The skill discloses cloud proxy usage only later in the document under data flow, rather than warning users up front that flight, hotel, and related queries are transmitted to a remote proxy service. This creates a transparency and privacy issue because users may provide itinerary or location data before understanding where that data is sent.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

User-facing strings, help text, errors, disclaimers, and guidance throughout the file are presented in Chinese, with no mechanism to select another language. This imposes a locale/language constraint without opt-in or documented justification, which matches the language-policy violation criteria.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The travel search helpers forward user-supplied itinerary data such as origin, destination, dates, hotel city, and booking context to a remote proxy service, but the tool provides no clear user-facing notice or consent mechanism. In a travel assistant, itinerary metadata can be sensitive because it reveals movement plans and potentially identifiable travel behavior.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
91% confidence
Finding

The manifest fields, examples, and all user-facing instructions are exclusively in Chinese, which effectively forces a specific language for interaction. Under the language/locale policy, this should either offer language choice or explicitly document that the skill is intended only for a Chinese-speaking audience.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

The code reads PROXY_TOKEN from the environment and uses it as a Bearer token for outbound requests. There is no user-facing warning or explanatory comment indicating that the skill depends on and will use credentials from the runtime environment.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
91% confidence
Finding

The function constructs a request to open.er-api.com and transmits the requested source currency to that external service. Although the data is limited, there is no visible disclosure in code comments, output, or documentation that this tool relies on an external network call.

Content

No source excerpt is available for this finding.