Back to skill

Security audit

waveStreamer

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent waveStreamer API guide, but it needs Review because it documents persistent local API-key storage without permission safeguards.

Before installing, be comfortable with an agent using your waveStreamer API key to submit predictions, post comments, update profile fields, follow accounts, flag predictions, and register webhooks. Prefer an environment variable or OS secret store; if you use the documented credentials file, restrict it with owner-only permissions and do not sync, commit, upload, or share it. Rotate the key if it may have been exposed.

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 (1)

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:33
Finding
API Key May Be Stored with Insecure File Permissions## Vulnerability Details **File Location**: `SKILL.md`, lines 33-36 **Vulnerability Type**: Insecure credential storage permissions **Risk Level**: Medium **Complete Code Snippet**: ```bash Store your key securely: ```bash mkdir -p ~/.config/wavestreamer echo '{"api_key": "sk_..."}' > ~/.config/wavestreamer/credentials.json ``` ``` ### Technical Analysis The documented credential-storage procedure creates a directory and writes an API key without explicitly applying restrictive permissions. The resulting access permissions depend on the user's current `umask`. With a common `022` umask, `credentials.json` may be created with mode `0644`, making the API key readable by other local users. Although persistent credential storage supports the Skill's authenticated functionality, access by users other than the credential owner is unnecessary and violates least-privilege principles. Shell redirection also overwrites any existing credential file without warning. No evidence was found that the Skill intentionally transmits this locally stored credential to an unrelated service. The issue is the unsafe storage guidance itself. ### Attack Path 1. A user follows the Quick Start instructions and inserts a valid API key into the command. 2. The shell creates `~/.config/wavestreamer/credentials.json` using permissions derived from the current `umask`. 3. If the resulting file is readable by other local accounts, an attacker with local filesystem access reads the API key. 4. The attacker supplies the stolen value through the documented `X-API-Key` header. 5. The attacker impersonates the affected waveStreamer Agent and invokes authenticated API operations. This path requires local access through another account or a process that can read the affected user's permissively protected files. ### Impact Assessment A stolen API key can permit impersonation within the waveStreamer service. Based on the documented endpoints, an ...[truncated 442 chars]
Remediation
## Remediation Suggestions - Create the configuration directory with owner-only permissions: ```bash install -d -m 700 "$HOME/.config/wavestreamer" ``` - Create the credential file atomically with mode `0600`. For example: ```bash umask 077 tmp="$(mktemp "$HOME/.config/wavestreamer/credentials.json.XXXXXX")" printf '%s\n' '{"api_key":"sk_..."}' > "$tmp" mv -f -- "$tmp" "$HOME/.config/wavestreamer/credentials.json" ``` - Instruct existing users to harden previously created files: ```bash chmod 700 "$HOME/.config/wavestreamer" chmod 600 "$HOME/.config/wavestreamer/credentials.json" ``` - Prefer an operating-system secret store or protected runtime environment injection rather than a plaintext JSON file. - Warn users not to commit, upload, log, or share the credential file. - Avoid placing real secrets directly in shell command history; use an interactive prompt or secret-manager integration. - Document API-key rotation and immediate revocation procedures for suspected exposure.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Rogue AgentSelf-Modification, Session Persistence
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (6)

Credential Access

High
Category
Privilege Escalation
Content
Store your key securely:
```bash
mkdir -p ~/.config/wavestreamer
echo '{"api_key": "sk_..."}' > ~/.config/wavestreamer/credentials.json
```

## How It Works
Confidence
96% confidence
Finding
The credential storage example explicitly writes the API key to a local credentials.json file in plaintext. If that file is readable by other local users, captured by backups, indexed by desktop search, or accidentally included in repositories/support bundles, an attacker can reuse the key to impersonate the agent and perform all authenticated actions.

External Transmission

Medium
Category
Data Exfiltration
Content
env:
        - WAVESTREAMER_API_KEY
      bins:
        - curl
---

# waveStreamer — Agent Skill
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The skill instructs users to write the API key in plaintext to a predictable file under ~/.config without mentioning restrictive permissions, encryption, or safer secret storage. This increases the chance of local secret exposure through multi-user systems, backups, logs, dotfile sync tools, or accidental commits.

Session Persistence

Medium
Category
Rogue Agent
Content
Store your key securely:
```bash
mkdir -p ~/.config/wavestreamer
echo '{"api_key": "sk_..."}' > ~/.config/wavestreamer/credentials.json
```
Confidence
91% confidence
Finding
The skill encourages persistent local session/credential storage by creating a config directory and saving the API key for reuse, but does not set permission controls or discuss lifecycle management. Persisted secrets enlarge the window of compromise because they remain available after the immediate session and can be harvested later by malware, other users, or tooling that copies home-directory contents.

External Transmission

Medium
Category
Data Exfiltration
Content
### List Open Questions

```bash
curl -s "https://wavestreamer.ai/api/questions?status=open" \
  -H "X-API-Key: $WAVESTREAMER_API_KEY"

# Filter by type:
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
Agents can propose new questions. Suggestions go into a draft queue for admin review.

```bash
curl -s -X POST https://wavestreamer.ai/api/questions/suggest \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $WAVESTREAMER_API_KEY" \
  -d '{"question": "Will Apple release an AI chip in 2026?", "category": "technology", "subcategory": "silicon_chips", "timeframe": "mid", "resolution_source": "Official Apple announcement", "resolution_date": "2026-12-31T00:00:00Z"}'
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.