T09 · Insecure Skill Coding Practices
- Location
scripts/express_track.py:136- Finding
Sensitive credentials and shipment data transmitted in URL query parameters
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This is a coherent parcel-tracking skill, but users should know it sends tracking details and the Juhe API key to Juhe for lookup.
Install only if you are comfortable sending parcel identifiers, courier codes, your Juhe API key, and sometimes a 4-digit phone suffix to Juhe. Prefer the environment variable over CLI arguments, keep any scripts/.env file out of version control, and provide phone suffixes only when the courier requires them.
scripts/express_track.py:136Sensitive credentials and shipment data transmitted in URL query parameters
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
API Key 配置(任选其一,优先级从高到低):
1. 环境变量: export JUHE_EXPRESS_KEY=your_api_key
2. 脚本同目录的 .env 文件: JUHE_EXPRESS_KEY=your_api_key
3. 直接传参: python express_track.py --key your_api_key <快递单号> --com <公司>
免费申请 API Key: https://www.juhe.cn/docs/api/id/43
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
API Key 配置(任选其一,优先级从高到低):
1. 环境变量: export JUHE_EXPRESS_KEY=your_api_key
2. 脚本同目录的 .env 文件: JUHE_EXPRESS_KEY=your_api_key
3. 直接传参: python express_track.py --key your_api_key <快递单号> --com <公司>
免费申请 API Key: https://www.juhe.cn/docs/api/id/43
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
API Key 配置(任选其一,优先级从高到低):
1. 环境变量: export JUHE_EXPRESS_KEY=your_api_key
2. 脚本同目录的 .env 文件: JUHE_EXPRESS_KEY=your_api_key
3. 直接传参: python express_track.py --key your_api_key <快递单号> --com <公司>
免费申请 API Key: https://www.juhe.cn/docs/api/id/43
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
API Key 配置(任选其一,优先级从高到低):
1. 环境变量: export JUHE_EXPRESS_KEY=your_api_key
2. 脚本同目录的 .env 文件: JUHE_EXPRESS_KEY=your_api_key
3. 直接传参: python express_track.py --key your_api_key <快递单号> --com <公司>
免费申请 API Key: https://www.juhe.cn/docs/api/id/43
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
env_key = os.environ.get("JUHE_EXPRESS_KEY", "").strip()
if env_key:
return env_key
env_file = Path(__file__).parent / ".env"
if env_file.exists():
for line in env_file.read_text(encoding="utf-8").splitlines():
line = line.strip()
The skill declares capabilities that imply environment access, local file reads, and outbound network use, but it does not explicitly scope or constrain those permissions in the manifest. This weakens the trust boundary for the agent/runtime because users and reviewers cannot easily verify what resources the skill is allowed to access, increasing the chance of over-privileged execution.
The trigger phrases are broad everyday language such as asking where a package is, which can cause the skill to activate in contexts where the user did not intend third-party tracking lookups. In an agent ecosystem, overbroad invocation can lead to unnecessary handling of tracking numbers and related personal data.
The documentation instructs users to send tracking numbers and, for some couriers, the last four digits of sender or receiver phone numbers to a third-party API, but it does not provide a clear privacy warning or data-sharing notice. Tracking data and phone suffixes are sensitive logistics metadata and their transmission to an external provider creates privacy and compliance risk.
The script sends a tracking number and optionally the sender/receiver phone last 4 digits to a third-party API, but it does not provide an explicit privacy notice at the point of collection or transmission. While this is necessary for the feature, users may not understand that potentially sensitive shipment metadata is being disclosed to an external service.
The manifest sentence '快递公司编号本地解析无需额外请求' is framed as part of how the skill works, emphasizing local resolution without additional requests. Later documentation explicitly includes a direct external API call pattern to juhe.cn for the actual lookup, so the wording can mislead readers into thinking the whole company-identification/query flow is offline except where in fact the tracking result itself is obtained remotely.
This JSON contains natural-language fields and values predominantly in Chinese, including the top-level status message and most courier names. For a general reference file, this imposes a specific language/locale without any visible opt-in or justification in the file itself.
The natural-language instructions, usage, and warnings in this file are exclusively in Chinese. Under the policy, forcing a specific language without user opt-in can be a locale/language policy violation when no alternative language option or justification is provided.
No suspicious patterns detected.