T09 · Insecure Skill Coding Practices
- Location
scripts/echodecks_client.py:23- Finding
Unencoded User-Controlled Values in API Query Strings
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This is a coherent EchoDecks API integration, but users should understand it uses an API key to access and change their EchoDecks account data and spend credits.
Install only if you intend to let the agent use your EchoDecks account. Treat ECHODECKS_API_KEY like a password, avoid sending sensitive study text unless you are comfortable sharing it with EchoDecks, and confirm before running generation or review commands that spend credits or change account state.
scripts/echodecks_client.py:23Unencoded User-Controlled Values in API Query Strings
scripts/echodecks_client.py:34HTTP Requests Lack Connection and Read Timeouts
The skill clearly states it integrates with an external API and exposes tools that retrieve user profile data, deck contents, study statistics, review activity, and study links, but it does not explicitly warn users that their account and study data will be transmitted to a third-party service. This creates a real transparency and privacy-risk issue because users may invoke tools without understanding the external data flow or account-scope access.
No manifest is available, so there is no declared purpose that would justify sensitive environment-variable access. This script explicitly reads ECHODECKS_API_KEY from process environment to authenticate remote API calls, which is a privileged capability beyond a clearly stated local-only function.
The client sends user-supplied fields such as topic, text, deck metadata, and study actions to a third-party API together with an API credential, but provides no user-facing disclosure, confirmation, or scoping of what data will leave the environment. In an agent skill context, this is risky because users may not realize their content and authenticated account actions are being transmitted externally.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
if method == "GET":
response = requests.get(url, headers=headers)
elif method == "POST":
response = requests.post(url, headers=headers, json=data)
elif method == "PUT":
response = requests.put(url, headers=headers, json=data)
elif method == "DELETE":
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
elif method == "POST":
response = requests.post(url, headers=headers, json=data)
elif method == "PUT":
response = requests.put(url, headers=headers, json=data)
elif method == "DELETE":
response = requests.delete(url, headers=headers)
else:
The markdown file tells users to generate an API key and export it as an environment variable, but it does not include any caution about keeping the key secret or avoiding exposure in shared shells, logs, or screenshots. Because this involves handling credentials, the skill description should provide a basic user-facing warning about sensitive data.
The skill notes that some actions cost credits, but it does not adequately warn that generating cards or podcasts causes irreversible account-side consumption of paid or limited credits on an external service. This can lead to unintended spend or depletion of a user's account resources if invoked casually or automatically by an agent.
No suspicious patterns detected.