Back to skill

Security audit

claw-radio

Security checks for vulnerabilities and agentic risk

Overview

The skill is mostly coherent for running an AI radio station, but its setup can overwrite local Docker/SearxNG state and relies on mutable third-party installs.

Review the setup steps before installing. Use this only if you are comfortable installing Homebrew packages, Docker/Colima, media tools, and running a local SearxNG container. Check whether you already have a container named searxng or existing ~/.openclaw/searxng files, back them up first, and consider pinning the Docker image and CLI version before use.

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)

T08 · Insecure Dependencies

Warning
Location
SKILL.md:13
Finding
Unpinned Third-Party CLI and Container Dependencies## Vulnerability Details **File Location**: `SKILL.md`, lines 13 and 61-105 **Vulnerability Type**: Unpinned and mutable third-party dependencies **Risk Level**: Medium ### Vulnerable Code ```bash brew install vossenwout/tap/claw-radio-cli ``` ```bash docker run -d --name searxng -p 127.0.0.1:8888:8080 searxng/searxng:latest ``` ```bash docker run -d \ --name searxng \ -p 127.0.0.1:8888:8080 \ -v ~/.openclaw/searxng:/etc/searxng \ searxng/searxng:latest ``` ### Technical Analysis The skill instructs users to install its core CLI from a third-party Homebrew tap without specifying an audited version. It also pulls the SearxNG container through the mutable `latest` tag rather than an immutable image digest. These dependency references can resolve to different artifacts over time without any modification to the reviewed skill. If the third-party tap, package release infrastructure, container registry account, or upstream artifact is compromised, an attacker can substitute malicious executable content. No checksum, image digest, signature verification, or explicit version constraint is provided. The loopback-only port binding limits direct network exposure of SearxNG, but it does not mitigate execution of a compromised container image or Homebrew package on the local system. ### Attack Path 1. An attacker compromises the third-party Homebrew tap, its release infrastructure, or the upstream container image. 2. The attacker publishes a modified CLI package or replaces the image referenced by `searxng/searxng:latest`. 3. A user follows the documented installation or bootstrap procedure. 4. Homebrew installs the substituted package, or Docker pulls and starts the substituted container image. 5. Malicious code executes with the permissions available to the installing user or inside the Docker environment. 6. The compromised component can manipulate radio commands and cues, access data available to i ...[truncated 756 chars]
Remediation
## Remediation Suggestions 1. Pin `claw-radio-cli` to a specific reviewed version rather than accepting the current tap release implicitly. 2. Document the authoritative source repository and expected package checksum or signature. 3. Pin SearxNG by immutable image digest, for example: ```bash docker run ... searxng/searxng@sha256:REVIEWED_DIGEST ``` 4. Establish a controlled dependency-update process that reviews release notes, source changes, signatures, and image provenance before changing pinned versions. 5. Enable signature and provenance verification where supported by the package and container ecosystems. 6. Run the container with additional hardening, including a non-root user, a read-only root filesystem, dropped Linux capabilities, resource limits, and the minimum required writable mounts.

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:59
Finding
Unconditional Forced Deletion of an Existing Named Container## Vulnerability Details **File Location**: `SKILL.md`, lines 59-61 and 100-105 **Vulnerability Type**: Unsafe destructive resource handling **Risk Level**: Medium ### Vulnerable Code ```bash # Start once without a mount so the container generates a valid settings.yml docker rm -f searxng 2>/dev/null || true docker run -d --name searxng -p 127.0.0.1:8888:8080 searxng/searxng:latest ``` ```bash docker rm -f searxng docker run -d \ --name searxng \ -p 127.0.0.1:8888:8080 \ -v ~/.openclaw/searxng:/etc/searxng \ searxng/searxng:latest ``` ### Technical Analysis The bootstrap procedure forcibly stops and deletes any Docker container named `searxng`. It does not verify that the existing container was created by this skill, inspect its image or labels, determine whether it is serving another workload, or request user confirmation. Container names are shared within a Docker daemon. An unrelated user-managed service can therefore occupy the same name. The first deletion command additionally suppresses errors and always reports shell success through `2>/dev/null || true`, reducing visibility into unexpected conditions. The earlier instruction to check whether SearxNG is healthy does not resolve this issue because the documented recovery branch replaces the named resource whenever the JSON preflight fails. A configuration mismatch, temporary outage, or unrelated service using the name can trigger destructive replacement. ### Attack Path 1. A container named `searxng` already exists in the active Docker environment. 2. The JSON preflight fails because the service is temporarily unavailable, does not enable JSON output, or is not the container expected by the skill. 3. The user or agent follows the documented bootstrap procedure. 4. `docker rm -f searxng` forcibly stops and deletes the existing container without validating ownership. 5. The skill starts a replacement container under the same name. 6. Th ...[truncated 664 chars]
Remediation
## Remediation Suggestions 1. Use a project-specific container name, such as `claw-radio-searxng`, to reduce collisions. 2. Add ownership labels when creating the container: ```bash docker run -d \ --name claw-radio-searxng \ --label io.claw-radio.managed=true \ ... ``` 3. Before removal, inspect the container and verify its expected label, image, mounts, and ownership. 4. If an existing resource is not positively identified as skill-managed, stop and request explicit user confirmation rather than deleting it. 5. Avoid suppressing all deletion errors. Report whether the container was absent, inaccessible, or failed to stop. 6. Back up or explicitly identify persistent data before replacement. 7. Prefer updating or recreating resources through Docker Compose with a project-specific namespace and declarative ownership.
Vulnerability Patterns
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Rogue AgentSelf-Modification, Session Persistence
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (8)

Missing User Warnings

Medium
Confidence
91% confidence
Finding
The skill instructs the agent to forcibly remove a Docker container and modify persistent local configuration under `~/.openclaw/searxng` without clearly warning the user that existing state may be overwritten or disrupted. In an agent setting, this can cause unintended environment changes, service interruption, or clobbering of an existing SearxNG setup the user relies on.

Rp1

Medium
Category
MCP Rug Pull
Confidence
75% confidence
Finding
Docker image references without a specific tag (:latest is implicit) or digest (@sha256:...) can be silently replaced by a malicious image.

Rp1

Medium
Category
MCP Rug Pull
Confidence
75% confidence
Finding
Docker image references without a specific tag (:latest is implicit) or digest (@sha256:...) can be silently replaced by a malicious image.

Session Persistence

Medium
Category
Rogue Agent
Content
docker run -d --name searxng -p 127.0.0.1:8888:8080 searxng/searxng:latest

# Copy generated config to a persistent location
mkdir -p ~/.openclaw/searxng
docker cp searxng:/etc/searxng/settings.yml ~/.openclaw/searxng/settings.yml
```
Confidence
82% confidence
Finding
The skill copies generated container configuration into a persistent home-directory path and later rewrites that file programmatically, creating durable state outside the immediate session. In agent environments this can unexpectedly persist configuration across runs, interfere with existing user data, and make rollback difficult if the generated settings are unsafe or incompatible.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
Persona rule:

- The agent should infer and invent the radio host persona from the user's requested station vibe.
- Do not ask the user to come up with the host character.
- Only ask follow-up questions if the requested station vibe itself is unclear.

Escalation rule:
Confidence
80% confidence
Finding
Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
Persona rule:

- The agent should infer and invent the radio host persona from the user's requested station vibe.
- Do not ask the user to come up with the host character.
- Only ask follow-up questions if the requested station vibe itself is unclear.

Escalation rule:
Confidence
80% confidence
Finding
Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Ssd 4

Medium
Confidence
88% confidence
Finding
The skill explicitly encourages stereotype-based personas such as 'a gay german' or 'an alcohol cowboy,' which normalizes harmful caricatures and can drive the agent to generate discriminatory or harassing output. In deployment, this creates content-safety and reputational risk and may cause policy-violating behavior during normal use.

Missing User Warnings

Low
Confidence
82% confidence
Finding
The skill requires installing packages such as `docker`, `colima`, `ffmpeg`, `yt-dlp`, and `tmux`, which make significant changes to the local environment. The description does not include any explicit warning that the skill depends on installing and running system-level tooling and containers.

Static analysis

No suspicious patterns detected.