Back to skill

Security audit

盲人出行导航助手

Security checks for vulnerabilities and agentic risk

Overview

This is a real Gaode-based blind-navigation skill, but it needs Review because SOS and navigation behavior handle precise location with weak user control and some safety-critical claims do not match the implementation.

Review before installing. This skill needs precise location and network access for legitimate navigation, but users should require explicit consent before SOS/location disclosure, clear notice that Gaode receives coordinates, tested emergency-tool imports, sanitized API-error handling, and removal or implementation of unverified accessibility-priority routing claims.

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 (4)

T09 · Insecure Skill Coding Practices

Error
Location
utils/gaode_client.py:16
Finding

Gaode API Key May Be Exposed Through Unsanitized Exception Messages

Content
View full analysis
Dict: """统一 GET 请求""" params["key"] = self.api_key resp = self.session.get(f"{self.BASE_URL}/{endpoint}", params=params, timeout=10) resp.raise_for_status() data = resp.json() if data.get("status") != "1": raise RuntimeError(f"API 调用失败: {data.get('info', '未知错误')}") return data ``` ```python # tools/search_transit.py:52-58 except Exception as e: return json.dumps( {"success": False, "message": f"地理编码失败:{e}"}, ensure_ascii=False ) ``` ```python # tools/search_transit.py:62-68 try: route_data = client.plan_transit(origin_coord, dest_coord, city) except Exception as e: return json.dumps( {"success": False, "message": f"公交路线规划失败:{e}"}, ensure_ascii=False ) ``` ### Technical Analysis The client appends `GAODE_API_KEY` to every request as a query-string parameter. The call to `raise_for_status()` can create a `requests` exception whose textual representation contains the complete request URL, including its query string. The transit tool catches broad exceptions and directly interpolates their raw text into user-visible JSON. Consequently, an upstream HTTP error, proxy-generated error, or similar request failure may cause the API key to appear in the returned response. Callers that do not catch this exception may also expose the keyed URL through runtime error logs. This is a credential-handling flaw because sensitive authentication material crosses from an internal request into an untrusted output or logging channel without redaction. ### Attack Path 1. An attacker invokes `search_transit` with a destination tha ...[truncated 1015 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
tools/get_location.py:1
Finding

Declared Location and SOS Tools Fail to Import Due to Undefined Type Annotation

Content
View full analysis
str: ``` ```python # tools/sos_alert.py:1-5 import json import os from utils.gaode_client import GaodeClient def sos_location_share(message: Optional[str] = None) -> str: ``` ### Technical Analysis Both modules use `Optional` in function annotations but do not import it from `typing`. They also do not enable postponed annotation evaluation with `from __future__ import annotations`. On Python versions where these annotations are evaluated when the function is defined, importing either module raises a `NameError` because `Optional` is undefined. This prevents the runtime from registering or invoking the affected tools. The SOS failure is particularly important because the Skill documentation instructs the agent to call `sos_location_share` immediately when a user reports being lost or requests emergency assistance. ### Attack Path No specialized malicious input is required: 1. The Skill runtime attempts to import `tools/get_location.py` or `tools/sos_alert.py`. 2. Python evaluates the function annotations during module initialization. 3. Name resolution for `Optional` fails. 4. A `NameError` aborts the module import. 5. The corresponding location or emergency tool remains unavailable. An attacker who can repeatedly trigger these declared functions may cause repeated failures, but the underlying condition occurs during ordinary operation without attacker-controlled data. ### Impact Assessment The issue causes denial of functionality for two declared tools: - `get_current_location` cannot pro ...[truncated 398 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
tools/route_plan.py:5
Finding

Accessibility-Priority Routing Is Advertised but Not Implemented

Content
View full analysis
str: """规划步行路线,输出语音友好的导航指令""" client = GaodeClient() lat = os.environ.get("USER_LAT") lng = os.environ.get("USER_LNG") if not lat or not lng: return json.dumps({"success": False, "message": "需要位置信息"}) # 先地理编码获取目的地坐标 dest_geo = client.geocode(destination) if not dest_geo.get("geocodes"): return json.dumps({"success": False, "message": f"找不到目的地:{destination}"}) dest_location = dest_geo["geocodes"][0]["location"] dest_name = dest_geo["geocodes"][0]["formatted_address"] # 规划步行路线 route = client.plan_walking(f"{lng},{lat}", dest_location) ``` The declared preference is not passed to or otherwise used by the client: ```python # utils/gaode_client.py:48-53 def plan_walking(self, origin: str, destination: str) -> Dict: """origin/destination 格式: '经度,纬度'""" return self._get("direction/walking", { "origin": origin, "destination": destination }) ``` ### Technical Analysis `prefer_accessible` defaults to `True`, but the function never reads the parameter after declaration. The route request contains only origin and destination coordinates. No accessibility criteria are transmitted, and the returned route is not checked for stairs, inaccessible crossings, missing ramps, elevator availability, tactile paving, or other relevant conditions. This conflicts with the documentation stating that walking navigation prioritizes accessible routes. Because the Skill specifically targets blind and mobility-impaired users, presenting a generic walking route under an accessibility-oriented interface may create unjustified confidence in the r ...[truncated 1163 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Note
Location
tools/route_plan.py:23
Finding

Empty Walking-Route Responses Cause an Unhandled Index Error

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • 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
Findings (27)

Tp4

High
Category
MCP Tool Poisoning
Confidence
92% confidence
Finding

The documented behavior does not cleanly match the implemented or implied capabilities, especially around accessible-facility search, current-location handling, SOS, and extra geocoding features. For a safety-critical navigation skill for blind users, this mismatch can create dangerous reliance on functions the user believes exist, while also exposing location-processing behaviors not clearly disclosed.

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill instructs immediate SOS location sharing without first warning the user that precise location will be disclosed or who will receive it. This is a significant privacy and safety risk because the skill processes sensitive real-time location data and targets users who may be under stress or unable to review visual confirmations.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The README advertises '一键紧急求助定位' but does not warn that SOS features may share precise location with third parties or emergency contacts. For a location-centric accessibility skill, omission of privacy and safety disclosures increases the risk that users unknowingly expose sensitive real-time whereabouts.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The example phrase '我迷路了(触发SOS)' is broad enough to plausibly occur in normal use and could trigger an emergency-location workflow unintentionally. In a skill aimed at blind users, accidental SOS activation is more dangerous because it may transmit sensitive location data or initiate unnecessary emergency outreach during routine conversation.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
83% confidence
Finding

The skill declares access to an API key and implies network-backed map queries, but it does not define an explicit tool scope such as allowed tools or permissions boundaries. In a location-based skill handling sensitive geolocation and emergency flows, missing scope declarations weakens least-privilege guarantees and makes unintended tool or data access harder to audit.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
78% confidence
Finding

The skill requires TTS as the primary interaction mode and the examples and instructions are entirely in Chinese, without offering a language choice or opt-in for output language. This can amount to forcing a particular language/locale behavior unless the user is given a choice or the locale restriction is explicitly justified.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The emergency trigger phrases include very broad language such as '帮帮我', which can occur in ordinary conversation and may cause unintended activation of emergency location-sharing behavior. Because this skill is designed for blind and vulnerable users and ties the trigger to SOS flows, accidental invocation could disclose precise location or create false alarms under stress.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The manifest exposes high-impact capabilities such as precise location retrieval, route planning, nearby search, and emergency location sharing using broad natural-language descriptions without clear authorization boundaries, trigger conditions, or disallowed uses. In an agent setting, this can cause overbroad invocation or unsafe inference of user intent, especially for privacy-sensitive actions like location disclosure and SOS messaging.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The tool descriptions, parameter descriptions, and example outputs are written entirely in Chinese, which implies a fixed language experience. The manifest does not state that the skill is limited to Chinese-speaking users or offer any user opt-in or language-selection behavior.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The function silently reads precise location coordinates from environment variables and transmits them to an external reverse-geocoding service, which creates a privacy exposure if the user did not explicitly consent to that use. In a blind-navigation skill, location is expected for functionality, but the absence of visible notice, consent handling, or minimization in this code still makes it a real privacy/security weakness rather than a false positive.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The function reads precise user latitude and longitude from environment variables and transmits them to an external routing service to generate directions, but this file shows no consent check, minimization, or disclosure before sharing location data. Because this skill is explicitly for navigation and emergency assistance for blind users, location use is expected, but the sensitivity remains high and the accessibility context can increase harm if users are not clearly informed or if data is over-collected.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The function reads precise user location from environment variables and forwards it to an external map service without any visible consent check, minimization, or disclosure in this code path. In a blindness-assistance skill, location is highly sensitive and repeated transmission can expose movement patterns or personal whereabouts if mishandled, logged, or sent without clear user awareness.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The docstring and returned messages are written only in Chinese, which effectively forces a specific language on users. There is no opt-in, fallback, or explanation that this skill is intended only for a Chinese-language or region-specific environment.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The function reads precise latitude and longitude from environment variables and transmits them to an external map service without any disclosure, consent check, minimization, or indication of retention controls in this code path. Because this skill is explicitly for blind-navigation and emergency/travel assistance, location is highly sensitive and frequent use can expose real-time movement patterns if mishandled or logged upstream.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The function reads precise latitude/longitude from environment variables and sends them to external geocoding and transit-planning services. In an accessibility skill for blind navigation this data use is functionally necessary, but this file shows no user-facing notice, minimization, or explicit consent check before transmitting sensitive location data, creating a privacy risk if callers invoke it without informed permission.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The docstring, returned messages, contact labels, and voice alert text are all fixed in Chinese, with no indication that the user can choose another language. This can violate language/locale policy when a skill forces a specific language without opt-in or documented regional justification.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The code reads precise location from environment variables and immediately uses it for emergency output and downstream third-party processing without any in-function validation that the user intended this access. Environment-backed location data is still sensitive, and silent access can enable privacy violations if another tool or workflow invokes this function without the user's awareness.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The function sends precise latitude and longitude to an external reverse-geocoding service to derive a street address, but the code shows no user consent flow, disclosure, or minimization for this highly sensitive location data. In an SOS context this may be operationally useful, but transmitting exact coordinates without explicit notice increases privacy risk if the feature is triggered unexpectedly or by another component.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The helper method sends request parameters to the Gaode API, and callers pass potentially sensitive data such as coordinates, addresses, and search keywords. This file contains no confirmation prompt, logging, or explanatory comment/docstring warning that user location/address data will be transmitted to a third-party service.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

This code generates all voice guidance text in Chinese, as shown in the docstring/commentary and every user-facing string literal. The policy explicitly flags language or locale constraints when a skill forces a specific language without user opt-in or documented justification.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
71% confidence
Finding

The entire skill description is presented only in Chinese, with no indication that users can choose another language or locale. Under the stated policy, forcing a specific language without opt-in can be a natural-language policy violation unless the locale constraint is explicitly justified.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
98% confidence
Finding

The dependency is specified as requests>=2.28.0, which is not pinned to an exact version. This makes builds non-reproducible and can cause different environments to install different releases, including newly introduced vulnerable or incompatible versions. In a skill that likely performs network calls for maps, routing, and emergency features, dependency drift in an HTTP client increases supply-chain and reliability risk.

Content

Scanner excerpt · requirements.txt (reported line 1)May include surrounding context.

text
requests>=2.28.0

Unverifiable Dependency: requests has 16 known advisory(ies) (CVE-2014-1830 (Exposure of Sensitive Information to an Unauthorized Actor in Requests); CVE-2024-47081 (Requests vulnerable to .netrc credentials leak via malicious URLs); CVE-2024-35195 (Requests `Session` object does not verify requests after making first request wi) +13 more), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
93% confidence
Finding

The manifest references requests without an exact version, while the package has multiple known advisories across versions. Because the installed version cannot be verified from this requirement alone, the project may resolve to an affected release, leaving HTTP handling exposed to known issues such as credential leakage or TLS/session verification flaws. Given this skill’s likely reliance on external API requests and possibly location-sensitive data, that uncertainty is more concerning than in an offline-only tool.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

The docstring and returned user-facing messages are entirely in Chinese, including error and success phrasing, without indicating that the skill is region-specific or offering a language option. This can violate language/locale policy when users are not given a choice or explicit justification for the enforced locale.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

The docstring and returned messages such as '需要位置信息' and '找到...个无障碍设施' are fixed in Chinese. There is no indication that the skill is China-specific or that users can opt into this language, which may violate language/locale policy expectations.

Content

No source excerpt is available for this finding.