Back to skill

Security audit

快递物流查询 - Express Logistics Track

Security checks for vulnerabilities and agentic risk

Overview

This skill is a straightforward package-tracking lookup that sends user-provided tracking details to JisuAPI, with privacy considerations but no hidden or destructive behavior found.

Install only if you are comfortable sending tracking numbers, carrier codes, your JisuAPI key, and sometimes the last four digits of a phone number to JisuAPI. Use a limited API key if possible, avoid querying highly sensitive shipments, and rotate the key if URL logs may have exposed it.

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
express.py:27
Finding
API Credential and Shipment Data Exposed in URL Query Parameters## Vulnerability Details **File Location**: `express.py:27-39` and `express.py:72-75` **Vulnerability Type**: Sensitive information transmitted through URL query parameters **Risk Level**: Medium ### Vulnerable Code ```python params = { "appkey": appkey, "number": req.get("number", ""), "type": req.get("type", "auto"), } mobile = req.get("mobile") if mobile: params["mobile"] = mobile try: resp = requests.get(API_URL, params=params, timeout=10) ``` ```python params = {"appkey": appkey} try: resp = requests.get(TYPE_URL, params=params, timeout=10) ``` ### Technical Analysis Passing `params` to `requests.get()` serializes the supplied values into the request URL. Consequently, the `JISU_API_KEY` credential appears in the query string for both API operations. Tracking requests additionally place the shipment number, carrier type, and optional phone-number suffix in the URL. HTTPS protects the URL against passive interception while it is in transit, but it does not prevent the complete URL from being recorded by the API provider, reverse proxies, gateways, monitoring platforms, debugging tools, or access logs. Query parameters are commonly retained in such systems, potentially beyond the lifetime intended for the credential or shipment data. Exploitation requires an attacker to obtain access to infrastructure or application records containing the generated request URLs. The finding does not independently grant system privileges or demonstrate compromise of the API provider. ### Attack Path 1. A user invokes the skill with a shipment number and, where required, a phone-number suffix. 2. The script reads `JISU_API_KEY` from the environment. 3. `requests.get()` serializes the credential and shipment fields into the URL query string. 4. An intermediary, monitoring platform, debugging facility, or API access-log system records the complete URL. 5. An unauthorized party with a ...[truncated 784 chars]
Remediation
## Remediation Suggestions 1. If supported by JisuAPI, move the API credential to an authorization header rather than placing it in the query string. 2. If the service supports POST requests, send shipment details in the request body instead of the URL. 3. If the upstream API contract requires query parameters, configure all proxies, gateways, logging systems, and observability platforms to redact `appkey`, `number`, and `mobile` values before storage. 4. Never log prepared request URLs or complete `requests` request objects without applying field-level redaction. 5. Use a restricted API key with only the permissions required for shipment queries, enforce usage limits where available, and rotate the key periodically. 6. Revoke and replace the key if there is reason to believe URLs containing it have already been retained in accessible logs. 7. Minimize retention of shipment data and restrict access to operational logs using least-privilege controls.
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)

Tp2

High
Category
MCP Tool Poisoning
Confidence
85% confidence
Finding
Mixing characters from multiple Unicode scripts in a single identifier is a common technique to create visually ambiguous tool names.

Lp3

Medium
Category
MCP Least Privilege
Confidence
93% confidence
Finding
The skill metadata declares required environment access and the documented behavior clearly relies on network communication to a third-party API, but it does not declare an explicit tool scope such as permissions or allowed-tools. This weakens least-privilege controls and makes it harder for the platform or reviewers to understand and constrain what the skill is allowed to access.

Vague Triggers

Medium
Confidence
94% confidence
Finding
The trigger description is broad enough that ordinary shipping-related phrases may invoke the skill without making clear that a third-party logistics lookup will occur. Over-broad activation can cause unintended handling and disclosure of tracking numbers or phone-derived data when the user did not explicitly consent to this specific external lookup.

Missing User Warnings

Medium
Confidence
97% confidence
Finding
The skill documentation instructs sending package tracking numbers and, for some carriers, the last four digits of a phone number to a third-party API, but it does not include an explicit user-facing warning or consent step. Even partial phone digits combined with shipment identifiers can be sensitive personal data and may expose delivery status, location history, or recipient-related information.

External Transmission

Medium
Category
Data Exfiltration
Content
import requests


API_URL = "https://api.jisuapi.com/express/query"
TYPE_URL = "https://api.jisuapi.com/express/type"
Confidence
78% confidence
Finding
This code is designed to transmit user-supplied shipment data to an external service endpoint. In the context of a logistics-query skill this is functionally necessary, but it still creates a real privacy and data-governance risk because user data leaves the local system and is handled by a third party.

External Transmission

Medium
Category
Data Exfiltration
Content
API_URL = "https://api.jisuapi.com/express/query"
TYPE_URL = "https://api.jisuapi.com/express/type"


def query_express(appkey: str, req: dict):
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
API_URL = "https://api.jisuapi.com/express/query"
TYPE_URL = "https://api.jisuapi.com/express/type"


def query_express(appkey: str, req: dict):
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
The skill sends shipment identifiers and optional phone digits to a third-party API, but there is no user-facing notice, consent check, or minimization in the code path. Tracking numbers and associated mobile suffixes can reveal delivery activity and may constitute personal or sensitive logistics data when shared with an external provider.

Static analysis

No suspicious patterns detected.