T09 · Insecure Skill Coding Practices
- Location
SKILL.md:206- Finding
Unsafe Sourcing of a Project-Local Environment File from Cron
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is a disclosed local dashboard builder, but its examples could expose API keys or unintentionally expose dashboards if followed as written.
Review before installing. Use restricted API keys, do not print full credentials, do not source a project-local .env file from cron, bind preview servers explicitly to 127.0.0.1, and inspect any generated fetch.sh before scheduling it. I found no hidden code or clear malicious payload, but the credential and local exposure guidance needs careful handling.
SKILL.md:206Unsafe Sourcing of a Project-Local Environment File from Cron
SKILL.md:239API Credential Exposure Through Troubleshooting Output
The guidance recommends storing API credentials in ./.env, which is commonly left in project directories and may be accidentally committed, copied, or exposed to other local tooling. Even though environment variables are better than hardcoding, encouraging plaintext secrets in a workspace-local file increases the chance of credential leakage.
所有 API 凭据通过环境变量注入,禁止写入脚本或配置文件。在 cron 中使用环境变量文件:
# /etc/environment 或 ./.env
STRIPE_API_KEY=sk_demo
# ...
# cron 中加载
The cron example source ./.env && ./dashboard/stripe/fetch.sh encourages loading secrets from a relative local file at execution time. This pattern can leak credentials through mislocated working directories, unsafe file permissions, accidental repository inclusion, or unintended reuse by other scripts in the same environment.
STRIPE_API_KEY=sk_demo
*/15 * * * * source ./.env && ./dashboard/stripe/fetch.sh
### 2. 本地绑定 127.0.0.1
The visible skill name and descriptive text are written in Chinese, and the file does not indicate that the skill supports other languages or will adapt to the user's preferred locale. Under the policy, forcing a specific language without opt-in is a natural-language policy concern.
The manifest emphasizes a '本地' static dashboard generation workflow, but the documented behavior explicitly includes generating fetch scripts for external APIs such as Stripe and monitoring multiple API endpoints. While dashboards may be rendered locally, the skill's actual documented operations extend into network data collection, which is broader than a purely local dashboard builder description suggests.
The document claims the dashboard binds to 127.0.0.1 by default, but the quick-start later uses python -m http.server 8080 without --bind 127.0.0.1 and even references an external URL. This inconsistency can cause users to expose dashboards and embedded business data on all interfaces unintentionally.
The server monitoring example directs the agent to generate scripts that execute host-level commands like top and free to inspect CPU, memory, and disk usage. Dashboard generation can justify rendering and data formatting, but direct host interrogation is a separate system-monitoring capability that is not clearly declared in the manifest's stated purpose.
The trigger section says to use the skill whenever the user needs data analysis, report generation, statistical insights, or data visualization. Those are broad, everyday request categories and do not clearly distinguish when this dashboard-building skill should activate versus when a different analysis or reporting skill should not.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
#!/bin/bash
https://api.stripe.com/v1/balance
| jq '.' > ./dashboard/stripe/data.json