Back to skill

Security audit

Noya Agent Skill

Security checks for vulnerabilities and agentic risk

Overview

The skill mostly matches its crypto-agent purpose, but it under-scopes sharing of private conversation and financial context with Noya and other agents.

Install only if you are comfortable sending crypto prompts and account-linked data to Noya. Before using handoff or delegation workflows, review exactly what conversation context or financial data will be shared, avoid forwarding full summaries, delete any generated user_context.json file, and use a short-lived API key you can revoke.

Vulnerability Patterns
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (3)

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:137
Finding
Mandatory Disclosure of Prior Conversation Context Without Explicit User Consent<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md`, lines 137–172 **Vulnerability Type**: Unnecessary transmission of personal conversation data **Risk Level**: Medium ### Vulnerable Code ```markdown ### 2.5 Initialize Thread with Conversation Context (OpenClaw) **For every new chat that OpenClaw initiates with Noya, call this endpoint first** to set up the conversation context. This makes the chat with Noya feel like a natural continuation of the user's conversation with OpenClaw, rather than starting fresh. ```bash curl -s -X POST "https://agent-api.noya.ai/api/openclaw/system-message" \ -H "Content-Type: application/json" \ -H "x-api-key: $NOYA_API_KEY" \ -d '{ "threadId": "THREAD_ID_HERE", "content": "The user has been chatting with OpenClaw and now wants help with crypto/trading tasks. Here is the relevant context from our conversation:\n\n- The user mentioned they have a meeting at 3pm today and want to check their portfolio before then\n- They previously expressed preference for ETH over BTC\n- Their timezone is EST\n- Earlier in our chat, they asked about setting up a DCA strategy\n\nPlease continue assisting them naturally, as if this is a seamless handoff from our conversation." }' ``` The `content` field should frame the handoff as a conversation continuation. Include: - A brief intro explaining the user was chatting with OpenClaw and is now being handed off to Noya - Relevant context from the OpenClaw conversation (what the user asked about, their goals) - User's schedule, preferences, and any other helpful details - A note to continue the conversation naturally This ensures the user doesn't have to repeat themselves and Noya can pick up where OpenClaw left off. **Important:** Call this endpoint _before_ sending the first user message via `noya-message.sh`. The system message will be prepended to the thread's context. ``` ### Technical Analysis The Skill requires prior conversation context to be transmitted t ...[truncated 2412 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Make prior-context transfer opt-in rather than mandatory. 2. Before transmission, show the user the exact proposed context and identify `agent-api.noya.ai` as the recipient. 3. Require affirmative approval before sending the context. 4. Default to transmitting only the current task request. 5. Define a strict allowlist of contextual fields and exclude credentials, authentication tokens, private keys, seed phrases, health information, unrelated conversation content, and precise scheduling information. 6. Apply local redaction before the request is sent; do not rely solely on the remote content filter. 7. Provide a clearly documented context-free mode for all text and voice workflows. 8. Document remote retention and deletion behavior, including how users can delete the created thread. ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:589
Finding
Comprehensive Financial Profile Written to Plaintext and Shared With an Unspecified Downstream Agent<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md`, lines 589–601 **Vulnerability Type**: Excessive financial-data collection, insecure local storage, and unrestricted onward disclosure **Risk Level**: Medium ### Vulnerable Code ```markdown ### Full User Context for Another Agent ``` Use case: You need to brief another AI agent on everything about the user before delegating a task to it. 1. curl -s -H "x-api-key: $NOYA_API_KEY" \ "https://agent-api.noya.ai/api/user/summary" | jq '.data' > user_context.json 2. Pass user_context.json as the system/user context to the downstream agent. → Returns wallet holdings, all DCA strategies, open and closed Polymarket positions in a single JSON object. Partial failures are isolated — the response always returns whatever data is available, with an error field for any source that failed. ``` ``` ### Technical Analysis The workflow retrieves a comprehensive authenticated financial profile and writes it to a predictable plaintext file named `user_context.json`. It then instructs the agent to send the entire file to an unspecified downstream agent. The summary can contain wallet addresses, token and DeFi holdings, net worth values, DCA strategy details, and open and closed prediction-market positions. This is broader than the data required for many delegated tasks. The workflow lacks: - Field-level data minimization. - Explicit user approval for onward disclosure. - Restrictions on eligible downstream recipients. - A secure temporary-file mechanism. - Restrictive file permissions. - Guaranteed cleanup after use. - Redaction of wallet identifiers and financial positions. The file is created under the process's current `umask`; the instructions do not guarantee mode `0600`. It also remains on disk after the delegation workflow ends. A fixed filename can be accidentally reused, included in backups, committed to source control, or read by processes with access to the working directory. ### Attack ...[truncated 1451 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Retrieve and share only the fields required for the specific delegated task. 2. Present the proposed fields and downstream recipient to the user and obtain explicit approval before disclosure. 3. Use an approved-recipient allowlist rather than permitting an unspecified downstream agent. 4. Avoid writing the profile to disk where possible; pass a minimized in-memory representation directly to the authorized consumer. 5. If a temporary file is unavoidable, use `mktemp`, set permissions to `0600`, and install a cleanup trap. 6. Redact wallet addresses, exact balances, strategy identifiers, and position history unless specifically required. 7. Ensure temporary data is deleted on success, failure, and interruption. 8. Add `user_context.json` and related generated files to ignore rules as defense in depth, while not relying on ignore rules as the primary control. 9. Document the downstream service's retention and deletion practices. ]]>

T09 · Insecure Skill Coding Practices

Note
Location
noya-message.sh:17
Finding
Automatic Collection and Transmission of Local Timezone Metadata<![CDATA[ ## Vulnerability Details **File Location**: `noya-message.sh`, lines 17–25 and 38–45 **Vulnerability Type**: Undisclosed transmission of location-related system metadata **Risk Level**: Low ### Vulnerable Code ```bash BASE_URL="https://agent-api.noya.ai" if [[ -f /etc/timezone ]]; then TIMEZONE=$(cat /etc/timezone) elif [[ -L /etc/localtime ]]; then TIMEZONE=$(readlink /etc/localtime | sed 's|.*/zoneinfo/||') else TIMEZONE="America/New_York" fi ``` ```bash HTTP_CODE=$(curl -s -w '%{http_code}' -o "$TMPFILE" \ -X POST "${BASE_URL}/api/messages/stream" \ -H "Content-Type: application/json" \ -H "x-api-key: ${NOYA_API_KEY}" \ -H "x-timezone-name: ${TIMEZONE}" \ -d "$(jq -n --arg msg "$MESSAGE" --arg tid "$THREAD_ID" \ '{message: $msg, threadId: $tid}')") ``` ### Technical Analysis Every invocation reads the host's configured timezone from `/etc/timezone` or the `/etc/localtime` symlink and transmits it in the `x-timezone-name` header. If neither source is available, the script sends a hardcoded `America/New_York` value. Timezone data can be operationally useful for time-sensitive trading requests, but it is not necessary for every message, such as general token analysis or portfolio queries. The script's usage text states that it sends a message but does not disclose that it also reads and transmits local system metadata. The timezone can reveal or narrow the user's likely geographic region and can be correlated with the authenticated Noya account, wallet activity, request timing, and conversation content. ### Attack Path 1. A user invokes `noya-message.sh` for any supported request. 2. The script reads the local timezone configuration automatically. 3. The script adds that value to the authenticated HTTPS request as `x-timezone-name`. 4. The Noya service can associate the timezone with the user's API key, thread, prompts, and connected financial account. 5. Repeated requests permit persistent account-level profiling without ...[truncated 664 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Make timezone transmission optional and disabled by default. 2. Request timezone only when the task requires local-time interpretation. 3. Document the collection and destination in the script's usage output and Skill privacy guidance. 4. Allow the caller to provide an explicit timezone argument after informed consent. 5. Do not send a fabricated fallback such as `America/New_York`; omit the header when timezone detection fails. 6. If automatic detection remains necessary, provide a configuration switch such as `NOYA_SEND_TIMEZONE=1`. 7. Ensure the service does not retain timezone metadata longer than necessary for processing the request. ]]>
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • Rogue AgentSelf-Modification, Session Persistence
Findings (38)

Ssd 3

High
Confidence
98% confidence
Finding
The skill recommends using a complete authenticated user summary—holdings, DCA strategies, and prediction-market positions—as context for another agent. Wholesale transfer of comprehensive financial state to a downstream agent materially increases privacy and security risk if that agent is compromised, logs data, or uses it beyond the original purpose.

Ssd 3

High
Confidence
99% confidence
Finding
The delegation pattern explicitly says to brief another agent on everything about the user, which promotes unrestricted transfer of highly sensitive financial and behavioral data. In the context of a crypto trading skill, that can expose holdings, positions, strategy, and identity-linked preferences to additional systems unnecessarily.

Tool Parameter Abuse

High
Category
Tool Misuse
Content
---

## DELETE /api/threads/:threadId

Delete a conversation thread.
Confidence
80% confidence
Finding
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Tool Parameter Abuse

High
Category
Tool Misuse
Content
List all API keys for the authenticated user. Returns prefixes only, never full keys.

### DELETE /api/keys/:id

Revoke an API key (soft delete).
Confidence
80% confidence
Finding
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Lp3

Medium
Category
MCP Least Privilege
Confidence
91% confidence
Finding
The skill invokes shell commands extensively (`curl`, `jq`, `uuidgen`, `python3`, `open`/`xdg-open`) but declares no explicit tool scope or permissions boundary. That makes the operational capability broader and less auditable than the metadata suggests, increasing the chance of unintended command execution or misuse in environments that rely on declared scopes for policy enforcement.

Session Persistence

Medium
Category
Rogue Agent
Content
To additionally use the conversational agent endpoints (messaging, threads, chat completions, user summary, agent summary):

1. Create an account at [agent.noya.ai](https://agent.noya.ai)
2. Go to Settings > API Keys and generate a key
3. Store the key securely — it is only shown once
4. Set the environment variable:
Confidence
60% confidence
Finding
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Context-Inappropriate Capability

Medium
Confidence
97% confidence
Finding
The skill explicitly instructs forwarding broad prior conversation context—including schedule, timezone, and investment preferences—to an external service before task execution. This exceeds data minimization needs for many crypto actions and creates unnecessary third-party disclosure of personal information.

Ssd 3

Medium
Confidence
97% confidence
Finding
The handoff flow encourages transferring broad conversation details to another agent, including schedule and preferences, beyond what is needed for the crypto task. This is a classic excessive data-sharing pattern that expands privacy exposure without clear necessity.

External Transmission

Medium
Category
Data Exfiltration
Content
**For every new chat that OpenClaw initiates with Noya, call this endpoint first** to set up the conversation context. This makes the chat with Noya feel like a natural continuation of the user's conversation with OpenClaw, rather than starting fresh.

```bash
curl -s -X POST "https://agent-api.noya.ai/api/openclaw/system-message" \
  -H "Content-Type: application/json" \
  -H "x-api-key: $NOYA_API_KEY" \
  -d '{
Confidence
94% confidence
Finding
This endpoint sends conversation context and personal details to an external service. External transmission itself is expected for this skill, but here the payload is explicitly designed to include broader prior-chat context, making the transmission more privacy-sensitive than necessary.

Ssd 3

Medium
Confidence
98% confidence
Finding
The example system-message payload concretely demonstrates forwarding personal details to the downstream service, making oversharing the default implementation path. Example code strongly shapes operator behavior and can institutionalize unnecessary disclosure.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The skill recommends sending non-essential personal context to Noya to make the handoff feel seamless, but does not require a user-facing privacy warning or consent step. Users may not reasonably expect their schedule, timezone, or prior chat details to be transmitted to a third party for this purpose.

External Transmission

Medium
Category
Data Exfiltration
Content
Injects a system message into a thread before the conversation starts. **OpenClaw should call this for every new chat** to hand off conversation context to Noya, making the transition feel seamless for the user.

```bash
curl -s -X POST "https://agent-api.noya.ai/api/openclaw/system-message" \
  -H "Content-Type: application/json" \
  -H "x-api-key: $NOYA_API_KEY" \
  -d '{
Confidence
93% confidence
Finding
This second documented use of the system-message endpoint repeats the same risky pattern of transmitting handoff context to a third party. The danger is not the network call alone, but the encouragement to populate it with broad user conversation details.

Whitespace Padding

Medium
Category
Prompt Injection
Content
### GeckoTerminal (on-chain DEX data)

| Tool                   | Method | Path                            | Body                                                                                                                |
| ---------------------- | ------ | ------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
| Token pools            | POST   | `/geckoterminal/token-pools`    | `{ "network": "eth", "tokenAddress": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2" }`                                |
| Pool OHLCV candles     | POST   | `/geckoterminal/pool-ohlcv`     | `{ "network": "eth", "poolAddress": "0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640", "timeframe": "day", "limit": 7 }` |
Confidence
70% confidence
Finding
Large whitespace padding was detected (a block of blank lines or a long run of spaces). This can push injected instructions below or to the right of the visible area so a human reviewer never sees them while the agent still reads them. Manual review of the hidden content is recommended.

Whitespace Padding

Medium
Category
Prompt Injection
Content
| Token pools            | POST   | `/geckoterminal/token-pools`    | `{ "network": "eth", "tokenAddress": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2" }`                                |
| Pool OHLCV candles     | POST   | `/geckoterminal/pool-ohlcv`     | `{ "network": "eth", "poolAddress": "0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640", "timeframe": "day", "limit": 7 }` |
| Pool trades            | POST   | `/geckoterminal/pool-trades`    | `{ "network": "eth", "poolAddress": "0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640" }`                                 |
| Trending pools         | GET    | `/geckoterminal/trending-pools` | —                                                                                                                   |
| Token info + top pools | POST   | `/geckoterminal/token-info`     | `{ "network": "eth", "addresses": ["0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"] }`                                 |

### CoinGecko
Confidence
70% confidence
Finding
Large whitespace padding was detected (a block of blank lines or a long run of spaces). This can push injected instructions below or to the right of the visible area so a human reviewer never sees them while the agent still reads them. Manual review of the hidden content is recommended.

Whitespace Padding

Medium
Category
Prompt Injection
Content
| Token pools            | POST   | `/geckoterminal/token-pools`    | `{ "network": "eth", "tokenAddress": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2" }`                                |
| Pool OHLCV candles     | POST   | `/geckoterminal/pool-ohlcv`     | `{ "network": "eth", "poolAddress": "0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640", "timeframe": "day", "limit": 7 }` |
| Pool trades            | POST   | `/geckoterminal/pool-trades`    | `{ "network": "eth", "poolAddress": "0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640" }`                                 |
| Trending pools         | GET    | `/geckoterminal/trending-pools` | —                                                                                                                   |
| Token info + top pools | POST   | `/geckoterminal/token-info`     | `{ "network": "eth", "addresses": ["0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"] }`                                 |

### CoinGecko
Confidence
70% confidence
Finding
Large whitespace padding was detected (a block of blank lines or a long run of spaces). This can push injected instructions below or to the right of the visible area so a human reviewer never sees them while the agent still reads them. Manual review of the hidden content is recommended.

Whitespace Padding

Medium
Category
Prompt Injection
Content
| ---------------------- | ------ | -------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
| Batch spot prices      | POST   | `/coingecko/price`         | `{ "tokenIds": ["bitcoin","ethereum"], "vsCurrencies": ["usd"], "include24hrChange": true, "includeMarketCap": true }` |
| OHLCV candles          | POST   | `/coingecko/ohlcv`         | `{ "tokenId": "bitcoin", "vsCurrency": "usd", "days": "7", "interval": "daily" }`                                      |
| Token info / contracts | POST   | `/coingecko/token-info`    | `{ "tokenId": "ethereum" }`                                                                                            |
| Trending tokens        | GET    | `/coingecko/trending`      | —                                                                                                                      |
| Search by name/symbol  | POST   | `/coingecko/search`        | `{ "query": "eth" }`                                                                                                   |
| Price history          | POST   | `/coingecko/price-history` | `{ "tokenId": "bitcoin", "days": "30" }` or `{ "tokenId": "bitcoin", "from": "2026-01-01", "to": "2026-02-01" }`       |
Confidence
70% confidence
Finding
Large whitespace padding was detected (a block of blank lines or a long run of spaces). This can push injected instructions below or to the right of the visible area so a human reviewer never sees them while the agent still reads them. Manual review of the hidden content is recommended.

Whitespace Padding

Medium
Category
Prompt Injection
Content
| Batch spot prices      | POST   | `/coingecko/price`         | `{ "tokenIds": ["bitcoin","ethereum"], "vsCurrencies": ["usd"], "include24hrChange": true, "includeMarketCap": true }` |
| OHLCV candles          | POST   | `/coingecko/ohlcv`         | `{ "tokenId": "bitcoin", "vsCurrency": "usd", "days": "7", "interval": "daily" }`                                      |
| Token info / contracts | POST   | `/coingecko/token-info`    | `{ "tokenId": "ethereum" }`                                                                                            |
| Trending tokens        | GET    | `/coingecko/trending`      | —                                                                                                                      |
| Search by name/symbol  | POST   | `/coingecko/search`        | `{ "query": "eth" }`                                                                                                   |
| Price history          | POST   | `/coingecko/price-history` | `{ "tokenId": "bitcoin", "days": "30" }` or `{ "tokenId": "bitcoin", "from": "2026-01-01", "to": "2026-02-01" }`       |
| Price at date          | POST   | `/coingecko/price-at-date` | `{ "tokenId": "bitcoin", "date": "2025-12-31" }`                                                                       |
Confidence
70% confidence
Finding
Large whitespace padding was detected (a block of blank lines or a long run of spaces). This can push injected instructions below or to the right of the visible area so a human reviewer never sees them while the agent still reads them. Manual review of the hidden content is recommended.

Whitespace Padding

Medium
Category
Prompt Injection
Content
| OHLCV candles          | POST   | `/coingecko/ohlcv`         | `{ "tokenId": "bitcoin", "vsCurrency": "usd", "days": "7", "interval": "daily" }`                                      |
| Token info / contracts | POST   | `/coingecko/token-info`    | `{ "tokenId": "ethereum" }`                                                                                            |
| Trending tokens        | GET    | `/coingecko/trending`      | —                                                                                                                      |
| Search by name/symbol  | POST   | `/coingecko/search`        | `{ "query": "eth" }`                                                                                                   |
| Price history          | POST   | `/coingecko/price-history` | `{ "tokenId": "bitcoin", "days": "30" }` or `{ "tokenId": "bitcoin", "from": "2026-01-01", "to": "2026-02-01" }`       |
| Price at date          | POST   | `/coingecko/price-at-date` | `{ "tokenId": "bitcoin", "date": "2025-12-31" }`                                                                       |
Confidence
70% confidence
Finding
Large whitespace padding was detected (a block of blank lines or a long run of spaces). This can push injected instructions below or to the right of the visible area so a human reviewer never sees them while the agent still reads them. Manual review of the hidden content is recommended.

Whitespace Padding

Medium
Category
Prompt Injection
Content
### CryptoNews

| Tool               | Method | Path                    | Body / Query                                                                                 |
| ------------------ | ------ | ----------------------- | -------------------------------------------------------------------------------------------- |
| News articles      | POST   | `/cryptonews/news`      | `{ "tickers": "BTC,ETH", "items": 10, "sentiment": "positive" }`                             |
| Sentiment analysis | POST   | `/cryptonews/sentiment` | `{ "tickers": "BTC,ETH", "date": "last7days" }` (`date` defaults to `last30days` if omitted) |
Confidence
70% confidence
Finding
Large whitespace padding was detected (a block of blank lines or a long run of spaces). This can push injected instructions below or to the right of the visible area so a human reviewer never sees them while the agent still reads them. Manual review of the hidden content is recommended.

Whitespace Padding

Medium
Category
Prompt Injection
Content
Dispatch up to 20 data endpoints in a single HTTP call. Each sub-request runs in parallel through the same rate limiter and cache as a direct call, so cache entries are shared and partial failures are isolated (one failing item never fails the whole batch).

| Tool                               | Method | Path     | Body                                                                                     |
| ---------------------------------- | ------ | -------- | ---------------------------------------------------------------------------------------- |
| Run multiple endpoints in one call | POST   | `/batch` | `{ "requests": [ { "name": "...", "method": "POST", "path": "/...", "body": {...} } ] }` |
Confidence
70% confidence
Finding
Large whitespace padding was detected (a block of blank lines or a long run of spaces). This can push injected instructions below or to the right of the visible area so a human reviewer never sees them while the agent still reads them. Manual review of the hidden content is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
Top-level `defaultTimeoutMs` (integer, optional) sets the default per-item timeout (default `15000`, max `60000`). Batch size is capped at 20 items; names must be unique within a batch.

```bash
curl -s -X POST "https://data-endpoints.noya.ai/batch" \
  -H "Content-Type: application/json" \
  -d '{
    "requests": [
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
Each result is either `{ ok: true, status, data, cache? }` or `{ ok: false, status, error }`. `cache` is `"HIT"` or `"MISS"` when the sub-request went through the cache layer. Use `/batch` whenever you'd otherwise fire multiple sequential curls to the same base URL — it reduces round-trips without changing per-item semantics.

### Calling a data endpoint with curl

```bash
# POST with a JSON body (no auth header)
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
# Fear & Greed
curl -s -X POST "https://data-endpoints.noya.ai/alternative/fear-greed" \
  -H "Content-Type: application/json" -d '{"limit":7}' | jq
```
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
# Fear & Greed
curl -s -X POST "https://data-endpoints.noya.ai/alternative/fear-greed" \
  -H "Content-Type: application/json" -d '{"limit":7}' | jq
```
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
If the user provides a plain symbol ("SOL", "ARB"), resolve it to a CoinGecko ID first:

```bash
curl -s -X POST "https://data-endpoints.noya.ai/coingecko/search" \
  -H "Content-Type: application/json" -d '{"query":"sol"}' | jq '.coins[0].id'
```
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Static analysis

No suspicious patterns detected.