T09 · Insecure Skill Coding Practices
- Location
scripts/auth.py:18- Finding
OAuth Tokens Stored in a Shared Cache Without Enforced File Permissions
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill appears to provide the advertised 1688 product search features, but it handles account tokens and user-supplied image URLs in ways that need review before installation.
Install only if you are comfortable giving the skill 1688 account API credentials and allowing it to cache tokens for reuse across 1688 skills. Avoid using untrusted image URLs, and prefer a version that stores tokens in a protected secret store, redacts token output, validates image URL destinations, and avoids passing secrets on the command line.
scripts/auth.py:18OAuth Tokens Stored in a Shared Cache Without Enforced File Permissions
scripts/auth.py:121Live Access Token Disclosed Through Standard Output
scripts/product_search.py:112Arbitrary Image URL Fetching Enables Server-Side Request Forgery
scripts/product_search_updated.py:115Predictable Temporary Files Permit Local Symlink Overwrite Attacks
scripts/fixed_image_upload.py:87Application Secret and Access Token Accepted Through Process Arguments
Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.
}
try:
response = requests.post(token_url, data=data, timeout=10)
response.raise_for_status()
token_data = response.json()
Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.
}
try:
response = requests.post(token_url, data=data, timeout=10)
response.raise_for_status()
token_data = response.json()
Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.
params['_aop_signature'] = sign
url = f"{BASE_URL}/{url_path}"
response = requests.post(url, data=params, timeout=30)
response.raise_for_status()
return response.json()
Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.
params['_aop_signature'] = sign
url = f"{BASE_URL}/{url_path}"
response = requests.post(url, data=params, timeout=15)
response.raise_for_status()
return response.json()
Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.
params['_aop_signature'] = sign
url = f"{BASE_URL}/{url_path}"
response = requests.post(url, data=params, timeout=15)
response.raise_for_status()
return response.json()
Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.
params['_aop_signature'] = sign
url = f"{BASE_URL}/{url_path}"
response = requests.post(url, data=params, timeout=15)
response.raise_for_status()
return response.json()
Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.
params['_aop_signature'] = sign
url = f"{BASE_URL}/{url_path}"
response = requests.post(url, data=params, timeout=15)
response.raise_for_status()
return response.json()
Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.
params['_aop_signature'] = sign
url = f"{BASE_URL}/{url_path}"
response = requests.post(url, data=params, timeout=30)
response.raise_for_status()
result = response.json()
Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.
params['_aop_signature'] = sign
url = f"{BASE_URL}/{url_path}"
response = requests.post(url, data=params, timeout=30)
response.raise_for_status()
result = response.json()
Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.
params['_aop_signature'] = sign
url = f"{BASE_URL}/{url_path}"
response = requests.post(url, data=params, timeout=15)
response.raise_for_status()
return response.json()
Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.
params['_aop_signature'] = sign
url = f"{BASE_URL}/{url_path}"
response = requests.post(url, data=params, timeout=15)
response.raise_for_status()
return response.json()
Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.
params['_aop_signature'] = sign
url = f"{BASE_URL}/{url_path}"
response = requests.post(url, data=params, timeout=15)
response.raise_for_status()
return response.json()
Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.
params['_aop_signature'] = sign
url = f"{BASE_URL}/{url_path}"
response = requests.post(url, data=params, timeout=15)
response.raise_for_status()
return response.json()
Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.
params['_aop_signature'] = sign
url = f"{BASE_URL}/{url_path}"
response = requests.post(url, data=params, timeout=15)
response.raise_for_status()
return response.json()
Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.
params['_aop_signature'] = sign
url = f"{BASE_URL}/{url_path}"
response = requests.post(url, data=params, timeout=15)
response.raise_for_status()
return response.json()
Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.
}
url = f"{BASE_URL}/{url_path}"
response = requests.post(url, data=params, timeout=30)
response.raise_for_status()
result = response.json()
Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.
params['_aop_signature'] = sign
url = f"{BASE_URL}/{url_path}"
response = requests.post(url, data=params, timeout=30)
response.raise_for_status()
result = response.json()
Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.
params['_aop_signature'] = sign
url = f"{BASE_URL}/{url_path}"
response = requests.post(url, data=params, timeout=15)
response.raise_for_status()
return response.json()
Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.
params['_aop_signature'] = sign
url = f"{BASE_URL}/{url_path}"
response = requests.post(url, data=params, timeout=15)
response.raise_for_status()
return response.json()
Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.
params['_aop_signature'] = sign
url = f"{BASE_URL}/{url_path}"
response = requests.post(url, data=params, timeout=15)
response.raise_for_status()
return response.json()
Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.
params['_aop_signature'] = sign
url = f"{BASE_URL}/{url_path}"
response = requests.post(url, data=params, timeout=15)
response.raise_for_status()
return response.json()
Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.
params['_aop_signature'] = sign
url = f"{BASE_URL}/{url_path}"
response = requests.post(url, data=params, timeout=15)
response.raise_for_status()
return response.json()
Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.
params['_aop_signature'] = sign
url = f"{BASE_URL}/{url_path}"
response = requests.post(url, data=params, timeout=15)
response.raise_for_status()
return response.json()
Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.
params['_aop_signature'] = sign
url = f"{BASE_URL}/{url_path}"
response = requests.post(url, data=params, timeout=15)
response.raise_for_status()
return response.json()
Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.
params['_aop_signature'] = sign
url = f"{BASE_URL}/{url_path}"
response = requests.post(url, data=params, timeout=15)
response.raise_for_status()
return response.json()
No suspicious patterns detected.