T09 · Insecure Skill Coding Practices
- Location
config.json:2- Finding
Hardcoded Kuaidi100 API Credentials and Phone Suffix in Version-Controlled Configuration
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The parcel-tracking feature is mostly coherent, but the package also ships plaintext credentials and an unrelated publisher script that can use a home-directory EvoMap secret.
Review before installing. Remove publish_evomap.py from the distributed skill unless you intentionally want EvoMap publication tooling, rotate the exposed Kuaidi100 credentials, replace config.json with a non-secret template or environment-based configuration, and add a clear notice before sending shipment numbers or phone suffixes to Kuaidi100.
config.json:2Hardcoded Kuaidi100 API Credentials and Phone Suffix in Version-Controlled Configuration
publish_evomap.py:14Undocumented Home-Directory Credential Access and Authenticated EvoMap Publication
This is a serious description-behavior mismatch: the skill claims to perform package tracking, but the detected code behavior includes reading a local secret from ~/.evomap/node_secret, constructing metadata, and performing authenticated remote publishing. Those actions are unrelated to shipment lookup and strongly suggest hidden credential access and exfiltration or unauthorized remote operations.
The manifest describes a skill that queries package logistics status for users, but this file does not implement any tracking lookup logic. Instead, it constructs Gene/Capsule/EvolutionEvent metadata and publishes them to EvoMap over the network, which is a different operational purpose than express tracking itself.
The skill declares no explicit tool scope even though its documented behavior clearly requires reading local configuration and making outbound network requests. Missing scope declarations weaken reviewability and sandbox enforcement, increasing the chance that the skill accesses capabilities users and operators did not knowingly approve.
The manifest says the skill triggers when the user asks about delivery status, logistics information, or package location, but it does not define specific trigger phrases or exclusion conditions. Phrases like asking about a package's location are common in general conversation and could cause unintended activation without clearer scope.
The skill does not clearly warn users that tracking numbers and possibly phone suffixes will be sent to an external API provider. Shipment identifiers can be sensitive personal data, so undisclosed transmission creates a privacy risk and undermines informed consent.
The file-level documentation says this module publishes the express tracking skill to EvoMap, while the embedded Capsule content and summaries describe a skill that receives tracking numbers, calls the 快递100 API, and formats logistics results. This file never performs those documented runtime actions, creating intent confusion between deployment metadata and actual code behavior.
This Python file contains multiple natural-language strings in Chinese, including the module docstring, comments, summaries, and capsule content. Under the policy, forcing a specific language without user opt-in is a natural-language policy violation unless the locale restriction is explicitly justified, which is not present here.
The script reads a long-lived local node secret from disk and uses it to perform authenticated publication to a remote service, which is unrelated to end-user parcel queries. In a skill package context, embedding publisher behavior increases the blast radius: anyone running the skill may unknowingly trigger privileged outbound actions using local credentials.
Tool defaults are unsafe or overly permissive (e.g. disabled TLS verification, no authentication, world-writable permissions). Unsafe defaults widen the attack surface.
"payload": payload
}
def post(endpoint, data, use_auth=False):
"""发送 POST 请求"""
url = f"{HUB_URL}{endpoint}"
headers = {"Content-Type": "application/json"}
The script sends tracking numbers and, in some cases, a recipient phone number to the external kuaidi100 API without any explicit disclosure, consent flow, or minimization controls. In this skill context, shipment identifiers and phone data are user-linked logistics information, so silent transmission to a third party creates a real privacy and data-handling risk even though it is necessary for the feature to function.
The natural-language description and usage guidance are entirely in Chinese, and there is no indication that the user can choose another language or that the skill is intentionally restricted to a Chinese-language audience. This can conflict with language or locale policies when skills are expected to avoid forcing a specific language without opt-in.
User-facing strings such as the description, errors, and usage output are all fixed in Chinese, with no option for users to select another language. This can violate language/locale policy when a skill forces a specific language without opt-in or explicit justification.
No suspicious patterns detected.