T09 · Insecure Skill Coding Practices
- Location
SKILL.md:17- Finding
API Key Disclosed Through Terminal Output
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill appears to do stock screening as advertised, but it needs Review because its setup tells users to print an API key and its CSV export writes remote data without spreadsheet-safety handling.
Install only if you are comfortable sending stock-screening queries and your Eastmoney API key to the documented Eastmoney endpoint. Do not follow the `echo $EASTMONEY_APIKEY` instruction; check only whether the variable is set. Treat generated CSV files as untrusted provider data and open them in a viewer that will not evaluate spreadsheet formulas unless the export is sanitized first.
SKILL.md:17API Key Disclosed Through Terminal Output
scripts/stock_screen.py:86Spreadsheet Formula Injection in CSV Export
The documented purpose does not fully match the implemented behavior: the example code performs external API calls using an API key and writes a CSV file locally, while those operational behaviors are not clearly declared as capabilities in the skill contract. This mismatch can mislead reviewers and users about data flow and side effects, which is a security concern because hidden egress and local persistence reduce informed consent and oversight.
The skill uses sensitive capabilities—environment variable access, outbound network requests, and local file writes—but does not declare any tool scope or permission boundaries. This increases the risk of overbroad execution in hosts that rely on manifest-declared permissions, making it harder to audit what data can leave the system or what local artifacts can be created.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
curl -X POST --location 'https://mkapi2.dfcfs.com/finskillshub/api/claw/stock-screen' \
--header 'Content-Type: application/json' \
--header "apikey: $EASTMONEY_APIKEY" \
--data '{"keyword": "选股条件", "pageNo": 1, "pageSize": 20}'
The script's natural-language interface, usage instructions, errors, and output are presented only in Chinese, which imposes a specific language on users without opt-in or alternative locale support. This matches the policy category for language or locale restrictions because no user-selectable language option or justification is provided in the file.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
}
try:
response = requests.post(url, headers=headers, json=data)
response.raise_for_status()
result = response.json()
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
}
try:
response = requests.post(url, headers=headers, json=data)
response.raise_for_status()
result = response.json()
Data from a source is assigned to a variable that is later passed to a sink, creating a variable-mediated taint flow.
}
try:
response = requests.post(url, headers=headers, json=data)
response.raise_for_status()
result = response.json()
The manifest describes the skill as supporting stock screening, querying sector constituents, and recommendation-related tasks, which reads as a data retrieval/analysis capability. This script also persists full query results to a local CSV file, adding a file-write/export behavior not reflected in the stated description.
The manifest focuses on stock selection and related market queries, but the implementation also depends on reading a secret from the process environment. While common operationally, credential access is not part of the described end-user capability and is not justified by the manifest text itself.
No suspicious patterns detected.