T09 · Insecure Skill Coding Practices
- Location
SKILL.md:122- Finding
API Keys Are Solicited Through Chat and Retrieved from Agent Memory
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This appears to be a legitimate CoinGecko API helper, but it needs review because it handles API keys unsafely and recommends broad mutable installation commands.
Review before installing. Prefer a pinned, local install path, do not paste API keys into chat or let the agent save them in memory, use a secure secret or environment variable, and use header-based authentication instead of putting keys in URLs.
SKILL.md:122API Keys Are Solicited Through Chat and Retrieved from Agent Memory
references/core.md:55Authentication Guidance Permits API Keys in URL Query Strings
README.md:29Unpinned Third-Party Packages Are Installed and Executed Globally
npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.
Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.
git clone https://github.com/coingecko/skills.git coingecko-skills
mv coingecko-skills ~/.claude/skills/coingecko
*The exact path may vary based on your agent and operating system.*
The trigger scope is broad enough to capture general cryptocurrency questions that may not specifically require CoinGecko or GeckoTerminal. This can cause the agent to over-invoke the skill, bias tool selection, and route users into unnecessary credential/API workflows, increasing the chance of incorrect delegation or denial of answering when simpler non-tool responses would suffice.
The file contains skill-routing guidance embedded in reference content that uses broad natural-language triggers like coin prices, market trends, and anything powered by CoinGecko or GeckoTerminal APIs. Overly broad activation criteria can cause the agent to invoke this skill for loosely related requests, increasing the chance of incorrect tool use, unnecessary external data access, and prompt-scope hijacking via ambiguous user phrasing.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
| Plan | Base URL | Auth header | Query param |
|---|---|---|---|
| **Paid (Pro)** | `https://pro-api.coingecko.com/api/v3` | `x-cg-pro-api-key: KEY` | `?x_cg_pro_api_key=KEY` |
| **Demo** | `https://api.coingecko.com/api/v3` | `x-cg-demo-api-key: KEY` | `?x_cg_demo_api_key=KEY` |
| **Keyless** | `https://api.coingecko.com/api/v3` | *(omit all auth)* | *(omit all auth)* |
Use header or query param — not both.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
| Plan | Base URL | Auth header | Query param |
|---|---|---|---|
| **Paid (Pro)** | `https://pro-api.coingecko.com/api/v3` | `x-cg-pro-api-key: KEY` | `?x_cg_pro_api_key=KEY` |
| **Demo** | `https://api.coingecko.com/api/v3` | `x-cg-demo-api-key: KEY` | `?x_cg_demo_api_key=KEY` |
| **Keyless** | `https://api.coingecko.com/api/v3` | *(omit all auth)* | *(omit all auth)* |
Use header or query param — not both.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
| Plan | Base URL | Auth header | Query param |
|---|---|---|---|
| **Paid (Pro)** | `https://pro-api.coingecko.com/api/v3` | `x-cg-pro-api-key: KEY` | `?x_cg_pro_api_key=KEY` |
| **Demo** | `https://api.coingecko.com/api/v3` | `x-cg-demo-api-key: KEY` | `?x_cg_demo_api_key=KEY` |
| **Keyless** | `https://api.coingecko.com/api/v3` | *(omit all auth)* | *(omit all auth)* |
Use header or query param — not both.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
| Plan | Base URL | Auth header | Query param |
|---|---|---|---|
| **Paid (Pro)** | `https://pro-api.coingecko.com/api/v3` | `x-cg-pro-api-key: KEY` | `?x_cg_pro_api_key=KEY` |
| **Demo** | `https://api.coingecko.com/api/v3` | `x-cg-demo-api-key: KEY` | `?x_cg_demo_api_key=KEY` |
| **Keyless** | `https://api.coingecko.com/api/v3` | *(omit all auth)* | *(omit all auth)* |
Use header or query param — not both.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
| Plan | Base URL | Auth header | Query param |
|---|---|---|---|
| **Paid (Pro)** | `https://pro-api.coingecko.com/api/v3` | `x-cg-pro-api-key: KEY` | `?x_cg_pro_api_key=KEY` |
| **Demo** | `https://api.coingecko.com/api/v3` | `x-cg-demo-api-key: KEY` | `?x_cg_demo_api_key=KEY` |
| **Keyless** | `https://api.coingecko.com/api/v3` | *(omit all auth)* | *(omit all auth)* |
Use header or query param — not both.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
| Plan | Base URL | Auth header | Query param |
|---|---|---|---|
| **Paid (Pro)** | `https://pro-api.coingecko.com/api/v3` | `x-cg-pro-api-key: KEY` | `?x_cg_pro_api_key=KEY` |
| **Demo** | `https://api.coingecko.com/api/v3` | `x-cg-demo-api-key: KEY` | `?x_cg_demo_api_key=KEY` |
| **Keyless** | `https://api.coingecko.com/api/v3` | *(omit all auth)* | *(omit all auth)* |
Use header or query param — not both.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
| Plan | Base URL | Auth header | Query param |
|---|---|---|---|
| **Paid (Pro)** | `https://pro-api.coingecko.com/api/v3` | `x-cg-pro-api-key: KEY` | `?x_cg_pro_api_key=KEY` |
| **Demo** | `https://api.coingecko.com/api/v3` | `x-cg-demo-api-key: KEY` | `?x_cg_demo_api_key=KEY` |
| **Keyless** | `https://api.coingecko.com/api/v3` | *(omit all auth)* | *(omit all auth)* |
Use header or query param — not both.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
| Plan | Base URL | Auth header | Query param |
|---|---|---|---|
| **Paid (Pro)** | `https://pro-api.coingecko.com/api/v3` | `x-cg-pro-api-key: KEY` | `?x_cg_pro_api_key=KEY` |
| **Demo** | `https://api.coingecko.com/api/v3` | `x-cg-demo-api-key: KEY` | `?x_cg_demo_api_key=KEY` |
| **Keyless** | `https://api.coingecko.com/api/v3` | *(omit all auth)* | *(omit all auth)* |
Use header or query param — not both.
The guidance explicitly says to ask the user to provide their API key, but it gives no safety instruction about minimizing collection, avoiding storage/logging, or preferring existing secure secret mechanisms. In an agent setting, this can lead to unnecessary solicitation of sensitive credentials in chat and accidental exposure through conversation history, telemetry, or downstream tool calls.
This markdown file includes an activation-style instruction that is very broad: 'Load this file for any request involving DEX pool data.' Because it covers 'any request' in a large topic area without exclusions or negative examples, it could overlap with many adjacent crypto or token-analysis requests and cause unnecessary invocation.
The exploratory phrase "What crypto data is available?" is underspecified and may match a wide range of high-level or comparative questions that do not clearly require this specific skill. In practice, this can produce unnecessary activation and steer the conversation toward CoinGecko-specific handling even when the user is only asking generally about crypto datasets or options.
The file instructs the agent to load this reference for broad natural-language requests such as corporate Bitcoin treasuries, government crypto holdings, and entity-level crypto data, without tightly defining boundaries or disambiguation rules. This can cause over-triggering or inappropriate skill selection, which may lead the agent to pull in external-data behavior when the user intent is only loosely related, increasing the risk of scope confusion and unintended API use.
No suspicious patterns detected.