T09 · Insecure Skill Coding Practices
- Location
config.json:2- Finding
Hard-Coded Track123 API Credential Distributed in Plaintext
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill does what it says, but it ships a real-looking Track123 credential and stores shipment results in a local plaintext cache.
Review this skill before installing. Replace and rotate the packaged Track123 credential, remove config.json from the published package, use your own minimally scoped API secret, and be aware that tracking numbers and shipment history are sent to Track123 and cached locally unless caching is disabled.
config.json:2Hard-Coded Track123 API Credential Distributed in Plaintext
scripts/query.js:103Shipment Tracking Data Stored in a Predictable Plaintext Cache
package-lock.json:14Dependency Lockfile Uses a Third-Party Package Registry Mirror
Referenced artifact was not completely inspected
node scripts/query.js sf SF1234567890123
Referenced artifact was not completely inspected
node scripts/query.js sf SF1234567890123
Referenced artifact was not completely inspected
node scripts/query.js sf SF1234567890123
Referenced artifact was not completely inspected
node scripts/query.js sf SF1234567890123
Referenced artifact was not completely inspected
node scripts/query.js sf SF1234567890123
Referenced artifact was not completely inspected
node scripts/query.js sf SF1234567890123
Referenced artifact was not completely inspected
node scripts/query.js sf SF1234567890123
Referenced artifact was not completely inspected
node scripts/query.js sf SF1234567890123
The lockfile pins axios 1.13.6, which the supplied advisory data identifies as having multiple known vulnerabilities, including SSRF- and prototype-pollution-related issues. In a logistics-query skill that makes outbound HTTP requests to a third-party API, a vulnerable HTTP client is directly security-relevant because attacker-controlled inputs, redirects, proxy settings, or polluted objects could influence requests and responses.
form-data 4.0.5 is reported vulnerable to CRLF injection via unescaped multipart field names and filenames. If this skill ever constructs multipart requests using user-influenced field names or filenames, an attacker may be able to inject crafted headers or corrupt request structure sent to upstream services.
The manifest references axios 1.13.6, which is reported here as having multiple known advisories, including SSRF-related and man-in-the-middle/prototype-pollution-related issues. Because this skill queries an external tracking API over HTTP(S), a vulnerable HTTP client is directly relevant and could enable request manipulation, credential leakage, or unsafe network access depending on how the skill is implemented.
The examples instruct users to submit tracking numbers to the Track123 external API but do not disclose that shipment identifiers and related logistics metadata will be sent to a third party. Tracking numbers can be sensitive in some contexts because they may reveal shipment status, locations, carrier relationships, and potentially business or personal activity patterns; the lack of notice undermines informed consent and safe handling expectations.
The documentation instructs users to send an API key and shipment tracking number to a third-party service, but it does not warn that package metadata and possibly personal logistics details will leave the local environment. In an agent skill context, silent external transmission is security-relevant because users may not realize their tracking numbers, destination data, and signed-by details are disclosed to an outside provider.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
请求示例:
curl -X POST https://api.track123.com/gateway/open-api/tk/v2.1/track/query-realtime \
-H "Content-Type: application/json" \
-d '{
"app_key": "your_app_key",
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
import requests
def query_tracking(tracking_number, carrier_code, language='zh'):
response = requests.post(
'https://api.track123.com/gateway/open-api/tk/v2.1/track/query-realtime',
json={
'app_key': 'your_app_key',
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
import requests
def query_tracking(tracking_number, carrier_code, language='zh'):
response = requests.post(
'https://api.track123.com/gateway/open-api/tk/v2.1/track/query-realtime',
json={
'app_key': 'your_app_key',
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
const CACHE_PATH = path.join(SKILL_ROOT, '.cache.json');
// Track123 API 基础地址
const API_BASE = 'https://api.track123.com/gateway/open-api/tk/v2';
// 缓存时长 (毫秒)
const CACHE_DURATION = 3600000;
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
const CACHE_PATH = path.join(SKILL_ROOT, '.cache.json');
// Track123 API 基础地址
const API_BASE = 'https://api.track123.com/gateway/open-api/tk/v2';
// 缓存时长 (毫秒)
const CACHE_DURATION = 3600000;
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
const CACHE_PATH = path.join(SKILL_ROOT, '.cache.json');
// Track123 API 基础地址
const API_BASE = 'https://api.track123.com/gateway/open-api/tk/v2';
// 缓存时长 (毫秒)
const CACHE_DURATION = 3600000;
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
const CACHE_PATH = path.join(SKILL_ROOT, '.cache.json');
// Track123 API 基础地址
const API_BASE = 'https://api.track123.com/gateway/open-api/tk/v2';
// 缓存时长 (毫秒)
const CACHE_DURATION = 3600000;
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
const CACHE_PATH = path.join(SKILL_ROOT, '.cache.json');
// Track123 API 基础地址
const API_BASE = 'https://api.track123.com/gateway/open-api/tk/v2';
// 缓存时长 (毫秒)
const CACHE_DURATION = 3600000;
Queried shipment results are persisted to .cache.json on disk without any explicit notice, which can leave sensitive logistics history, addresses, status updates, or recipient information available to other local users or later processes. Because caching is enabled by default, this creates silent data retention beyond the immediate query operation.
The script sends tracking numbers to the Track123 third-party service as part of its core function, which exposes shipment identifiers and related logistics metadata to an external party. While expected for a tracking integration, the call sites do not provide an explicit user-facing privacy warning or consent prompt, so users may not realize their shipment data is leaving the local environment.
The options table specifies --lang <zh|en|ru> with a default of zh, which establishes a language preference in the skill's behavior. Under the policy, locale or language constraints should either be user-selected or clearly justified; this default is not accompanied by an opt-in explanation or region-specific rationale in the document.
follow-redirects 1.15.11 is flagged for leaking custom authentication headers across cross-domain redirects. For a skill that likely calls an external tracking API with API keys or bearer tokens, this could expose credentials to an attacker-controlled redirect target if redirects are followed automatically.
Detected: suspicious.exposed_secret_literal