T09 · Insecure Skill Coding Practices
- Location
scripts/local_run.sh:58- Finding
Shell Command Injection Through eval-Based Command Construction
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill’s stated meme-token analysis purpose is legitimate, but the package has material review concerns from an opaque remote MCP backend and bundled executable code that contradicts the published architecture and can expose unauthenticated paid AI/search/image workflows if run.
Review before installing or running. The MCP skill may be acceptable only if you trust the publisher’s remote backend, but the package should clarify which implementation is authoritative, document the MCP API surface, remove or fix the stale Python/Coze implementation, add authentication before exposing any local server, stop logging full request bodies, avoid eval-based shell execution, and use a locked, hash-verified dependency install path.
scripts/local_run.sh:58Shell Command Injection Through eval-Based Command Construction
src/main.py:244Unauthenticated Network Access to Paid Workflow and Node Integrations
src/graphs/nodes/clean_data_node.py:37Indirect Prompt Injection Through Untrusted Search Results
pyproject.toml:150Dependency Installation Uses an Unverified Third-Party Mirror Without Artifact Hashes
src/main.py:244Complete HTTP Request Bodies Are Persisted in Application Logs
README.md:19Published Architecture and Data-Processing Claims Do Not Match the Bundled Executable Implementation
Pinning cryptography==46.0.5 with multiple critical advisories is a serious security issue because cryptographic libraries are foundational to TLS, token handling, and secret protection. Exploitable flaws here can undermine confidentiality, integrity, or availability across authentication, encrypted transport, and signed data workflows.
gitpython==3.1.45 is flagged for multiple command injection and option-forwarding issues, which is especially dangerous in agent-like systems that may inspect repositories or process attacker-controlled Git metadata. If repository URLs, branch names, tags, or config content can be influenced externally, this could lead to arbitrary command execution or tampering.
langchain-core==1.0.2 is associated with multiple severe issues including SSRF and template injection. This is especially dangerous for a web-data-driven agent skill because attacker-controlled prompts, URLs, or content from external sentiment sources may be routed through vulnerable templating or token-counting paths.
langgraph==1.0.2 is flagged for unsafe deserialization in checkpoint loading, a class of issue that can lead to code execution or state corruption when untrusted checkpoint data is loaded. Agent systems frequently persist and reload state, making this particularly relevant and high impact in this skill ecosystem.
cryptography==46.0.5 is associated with numerous critical advisories, including issues in bundled OpenSSL and cryptographic parsing/decryption behavior. Because this package underpins transport security, token validation, and secret handling across many Python stacks, compromise here can have broad and severe consequences.
langchain-core==1.0.2 has multiple critical advisories, including SSRF and prompt/template injection issues. In an agentic application that processes user-controlled token names and potentially remote content, these flaws can allow network pivoting, data exfiltration, or unsafe execution paths through tooling.
langgraph==1.0.2 is reported vulnerable to unsafe msgpack deserialization during checkpoint loading. Deserialization flaws can lead to code execution or state compromise when loading attacker-influenced checkpoints, which is especially dangerous in long-running agent systems.
The instruction to generate a token with repo full-control scope and use it as a password is broader than necessary and may encourage users to create overly privileged credentials. In a public-facing setup guide, that increases blast radius if the token is later exposed through terminal helpers, clipboard leakage, screenshots, or accidental reuse.
### Error: "Authentication failed"
For HTTPS authentication, you need a **Personal Access Token**:
1. Go to GitHub Settings > Developer settings > Personal access tokens
2. Generate new token (classic)
3. Select scopes: `repo` (full control)
4. Copy the token and use it as your password
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
- GitHub Documentation: https://docs.github.com
- Git Documentation: https://git-scm.com/doc
- Personal Access Tokens: https://github.com/settings/tokens
---
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
# Using HTTPS (will prompt for GitHub username and Personal Access Token)
git push origin main
# Or using SSH (if you have SSH keys configured)
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
# Using HTTPS (will prompt for GitHub username and Personal Access Token)
git push origin main
# Or using SSH (if you have SSH keys configured)
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
# Using HTTPS (will prompt for GitHub username and Personal Access Token)
git push origin main
# Or using SSH (if you have SSH keys configured)
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
# Using HTTPS (will prompt for GitHub username and Personal Access Token)
git push origin main
# Or using SSH (if you have SSH keys configured)
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
# Using HTTPS (will prompt for GitHub username and Personal Access Token)
git push origin main
# Or using SSH (if you have SSH keys configured)
This section begins explicit instructions for creating a Personal Access Token and leads directly into generating a classic token with full repo access. In the context of a user-facing skill document, normalizing creation of a broadly privileged credential increases the chance users mint unnecessary high-value secrets that can be stolen, reused, or mishandled.
## Option 3: Create Personal Access Token (if needed)
If you don't have a Personal Access Token:
1. Go to: https://github.com/settings/tokens
2. Click "Generate new token (classic)"
Unlike the other TP4 variants, this one aligns with visible context: the skill points to a remote MCP server over streamable HTTP and exposes only a high-level tool name, while the actual server-side behavior is opaque. That creates a real description-to-behavior risk because a generic remote endpoint can change behavior or expose broader workflow and chat capabilities than the narrow meme-token-analysis description suggests, reducing reviewability and increasing the chance of covert capability expansion.
Unlike the other TP4 variants, this one aligns with visible context: the skill points to a remote MCP server over streamable HTTP and exposes only a high-level tool name, while the actual server-side behavior is opaque. That creates a real description-to-behavior risk because a generic remote endpoint can change behavior or expose broader workflow and chat capabilities than the narrow meme-token-analysis description suggests, reducing reviewability and increasing the chance of covert capability expansion.
Unlike the other TP4 variants, this one aligns with visible context: the skill points to a remote MCP server over streamable HTTP and exposes only a high-level tool name, while the actual server-side behavior is opaque. That creates a real description-to-behavior risk because a generic remote endpoint can change behavior or expose broader workflow and chat capabilities than the narrow meme-token-analysis description suggests, reducing reviewability and increasing the chance of covert capability expansion.
Unlike the other TP4 variants, this one aligns with visible context: the skill points to a remote MCP server over streamable HTTP and exposes only a high-level tool name, while the actual server-side behavior is opaque. That creates a real description-to-behavior risk because a generic remote endpoint can change behavior or expose broader workflow and chat capabilities than the narrow meme-token-analysis description suggests, reducing reviewability and increasing the chance of covert capability expansion.
Unlike the other TP4 variants, this one aligns with visible context: the skill points to a remote MCP server over streamable HTTP and exposes only a high-level tool name, while the actual server-side behavior is opaque. That creates a real description-to-behavior risk because a generic remote endpoint can change behavior or expose broader workflow and chat capabilities than the narrow meme-token-analysis description suggests, reducing reviewability and increasing the chance of covert capability expansion.
Unlike the other TP4 variants, this one aligns with visible context: the skill points to a remote MCP server over streamable HTTP and exposes only a high-level tool name, while the actual server-side behavior is opaque. That creates a real description-to-behavior risk because a generic remote endpoint can change behavior or expose broader workflow and chat capabilities than the narrow meme-token-analysis description suggests, reducing reviewability and increasing the chance of covert capability expansion.
Unlike the other TP4 variants, this one aligns with visible context: the skill points to a remote MCP server over streamable HTTP and exposes only a high-level tool name, while the actual server-side behavior is opaque. That creates a real description-to-behavior risk because a generic remote endpoint can change behavior or expose broader workflow and chat capabilities than the narrow meme-token-analysis description suggests, reducing reviewability and increasing the chance of covert capability expansion.
Unlike the other TP4 variants, this one aligns with visible context: the skill points to a remote MCP server over streamable HTTP and exposes only a high-level tool name, while the actual server-side behavior is opaque. That creates a real description-to-behavior risk because a generic remote endpoint can change behavior or expose broader workflow and chat capabilities than the narrow meme-token-analysis description suggests, reducing reviewability and increasing the chance of covert capability expansion.
The project pins authlib==1.6.9 despite multiple cited advisories affecting authorization and redirect handling. If this skill uses OAuth/OIDC flows, those flaws could enable account compromise, token theft, CSRF, or redirect abuse against users or connected services.
The dependency click==8.3.1 is flagged with a command injection advisory, which is significant if any user-controlled input reaches CLI invocation paths or wrappers built on Click. Even if the skill is not primarily CLI-facing, retaining a pinned vulnerable version creates avoidable risk in tooling, jobs, or maintenance scripts.