Back to skill

Security audit

Crypto charting with USD pricing (1s)

Security checks for vulnerabilities and agentic risk

Overview

This skill is a disclosed Bitquery crypto data streamer with real credential-leakage and dependency hygiene risks, but no hidden or purpose-mismatched behavior was found.

Install only if you are comfortable giving the skill a Bitquery API token and outbound access to Bitquery. Use a virtual environment or container, avoid verbose network/debug logging, do not run pip as root, consider pinning dependencies before production use, and rotate the Bitquery token if a full WebSocket URL may have been captured.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
Findings (2)

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/stream_crypto_chart.py:139
Finding

API Credential Embedded in WebSocket URL

Content
View full analysis
None: api_key = get_api_key() url = f"{BITQUERY_WS_BASE}?{urlencode({'token': api_key})}" transport = WebsocketsTransport( url=url, headers={"Sec-WebSocket-Protocol": "graphql-ws"}, ) ``` ### Technical Analysis The script places `BITQUERY_API_KEY` in the WebSocket URL as a `token` query parameter. Although the URL uses TLS and the documentation identifies this as a limitation of the Bitquery API, query parameters can be captured by transport diagnostics, exception reports, debuggers, proxy logs, network-monitoring systems, or other infrastructure that records complete connection URLs. The script does not directly print the URL or deliberately transmit the credential to an unrelated service. The credential is sent only to the declared Bitquery endpoint. Nevertheless, placing authentication material in a URL increases its exposure surface compared with authentication through a protected header. The project documentation explicitly warns users about this risk, which reduces the likelihood of accidental exposure but does not eliminate the underlying weakness. ### Attack Path 1. A user runs the streaming script with a valid `BITQUERY_API_KEY`. 2. The script constructs a WebSocket URL containing the key in the `token` query parameter. 3. A debugger, verbose transport logger, proxy, exception-monitoring service, or infrastructure component records the complete URL. 4. An attacker obtains access to the resulting diagnostic data or logs. 5. The attacker extracts the token and uses it to authenticate to Bitquery. 6. The attacker can perform actions permitted by that token, including consuming the associated API quota. This exploitation path requir ...[truncated 622 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Warning
Location
requirements.txt:1
Finding

Unpinned Third-Party Dependency and Transitive Dependency Set

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (1)

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
94% confidence
Finding

The skill uses environment access and external network connectivity but does not declare an explicit tool scope such as permissions or allowed-tools. That creates a governance and review gap: an agent or installer may not realize the skill can read credentials and open outbound connections, increasing the chance of unintended execution or insufficient sandboxing.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.