T09 · Insecure Skill Coding Practices
- Location
fetch_articles.py:59- Finding
Spreadsheet Formula Injection in Exported Article Data
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill does what it claims: it uses a Dajiala API key to fetch WeChat public-account article data and save it into a local Excel report.
Install only if you intend to use Dajiala for WeChat public-account article retrieval and are comfortable providing DAJIALA_KEY and creating reports under the documented local path. Treat generated spreadsheets as containing untrusted remote data, especially before opening them in spreadsheet software that may evaluate formulas or external content.
fetch_articles.py:59Spreadsheet Formula Injection in Exported Article Data
Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.
}
try:
response = requests.post(API_URL, json=payload, headers=headers, timeout=30)
response.raise_for_status()
data = response.json()
The skill declares access to environment variables and networked API behavior, but it does not specify any tool scope or permission boundaries. This can lead to overbroad execution privileges, making it easier for the skill to access secrets such as API keys or perform unintended outbound requests without clear user or platform constraints.
The trigger phrases are broad enough that the skill may activate for generic article-retrieval requests, even when the user did not intend to use this specific API-backed workflow. That creates a security and privacy risk because the skill may unnecessarily access configured credentials, contact external services, or write local files in response to ambiguous prompts.
The skill description omits key safety-relevant disclosures: it requires an API credential and writes retrieved data to a local Excel file. Without this warning, users may invoke the skill without understanding that secrets will be used and local filesystem changes will occur, increasing the chance of unintended credential exposure or unauthorized data persistence.
The module docstring is entirely in Chinese and presents the skill as operating in that language, with no indication that users may choose another language or locale. Under the policy rule, forcing a specific language without user opt-in is a natural-language policy violation unless clearly justified as region-specific.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
}
try:
response = requests.post(API_URL, json=payload, headers=headers, timeout=30)
response.raise_for_status()
data = response.json()
The natural-language description and trigger conditions are written solely in Chinese and imply activation only for Chinese phrasing, with no indication that other languages are supported or that the locale restriction is intentional. Under the stated policy, forcing a specific language without opt-in can be a locale-policy issue.
No suspicious patterns detected.