T03 · Remote Payload Retrieval and Execution
- Location
SKILL.md:34- Finding
Mutable Remote Installer Is Downloaded and Executed Without Verification
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This appears to be a real text-to-speech skill, but its installer and unauthenticated messaging features create review-worthy security risks.
Install only after reviewing or pinning the repository contents. Prefer a verified release or fixed commit instead of the one-line curl-to-bash setup. Keep the server bound to 127.0.0.1 unless authentication is added, avoid storing messaging tokens in plaintext config when possible, and only clone voices you own or have permission to use. Treat Telegram/WhatsApp sends as external disclosure of the audio and destination metadata.
SKILL.md:34Mutable Remote Installer Is Downloaded and Executed Without Verification
install.sh:83Installer Executes an Unpinned Repository Checkout
server/tts_server.py:666Unauthenticated Messaging Endpoints Can Exfiltrate Arbitrary Readable Audio Files
server/messaging/telegram_sender.py:57Messaging Conversion Can Overwrite and Delete Adjacent Files
server/tts_server.py:443Unbounded Uploads and Unauthenticated Expensive Operations Enable Resource Exhaustion
requirements/base.txt:1Dependencies and Model Snapshots Are Not Reproducibly Pinned
The code chunk only implements audio format conversion to OGG/Opus for messaging platforms. While that supports one small part of the declared delivery pipeline (native voice-message-compatible audio), it does not perform the core advertised functionality of TTS generation or any of the advanced voice features. The primary purpose of the code is materially narrower and different from the declared description, so this is a clear mismatch.
The declared description centers on a full-featured TTS system, but the supplied code does not synthesize speech at all. It only converts existing audio files and inspects audio metadata using ffmpeg/ffprobe. One small part of the description—delivering audio in Telegram/WhatsApp-friendly OGG/Opus format—is partially aligned with the helper function convert_to_ogg_opus, but this is only a supporting audio conversion utility, not evidence of the broader TTS capabilities claimed. Therefore the code chunk's actual behavior is materially different from the declared primary purpose.
The declared description presents a complete end-user TTS skill with multiple advanced voice features and messaging-platform delivery. The supplied code chunk is much narrower: it is an internal model loader/downloader for Qwen3-TTS. It does support part of the hardware auto-selection claim by choosing CUDA, XPU, or CPU and selecting an attention backend, but it does not implement the core user-facing capabilities described. Because the actual code's primary purpose is model acquisition/fixing/loading rather than TTS synthesis and delivery, the description materially overstates what this code chunk does.
The code largely matches the declared purpose: it provides Qwen3-TTS speech generation, built-in speakers with instruct control, voice cloning, natural-language voice design, persistent voice management, multilingual language mapping, and Telegram/WhatsApp delivery. However, there are two notable description/behavior mismatches. First, the code exposes a standalone audio conversion API (/v1/audio/convert) for converting uploaded audio between formats, which is an undeclared capability beyond simple support functionality for TTS output delivery. Second, the description claims auto-detection of CUDA, ROCm, Intel XPU, and CPU, but the code only explicitly detects torch.cuda, torch.xpu, and CPU; there is no explicit ROCm branch. While ROCm may sometimes surface via torch.cuda in some environments, that behavior is not represented directly in the code. Therefore the description is not fully accurate.
The supplied code chunk is narrowly focused on voice cloning, not the full declared skill behavior. It supports cloning from reference audio, reusable prompts, multilingual generation via a language parameter, and device auto-selection for CUDA/XPU/CPU. However, it does not implement several major declared features: built-in speakers, emotional control, natural-language voice design, persistent named voices, or Telegram/WhatsApp message delivery. The generated output is simply written to a local WAV file. Also, the declared hardware support mentions ROCm, but this code only checks CUDA and Intel XPU, then falls back to CPU. Because the code represents only a subset of the declared product capabilities, the description does not accurately match this chunk.
The skill contains imperative hidden-style instructions such as 'YOU MUST FOLLOW THESE RULES,' which attempt to steer agent behavior from within untrusted skill content. In agent systems, such embedded control instructions are dangerous because they can override normal policy flow, expand persistence of actions, and create a prompt-injection surface even if the content appears operational rather than overtly malicious.
the Server
Before any TTS operation, ensure the server is running:
# Start (idempotent — won't restart if already running)
bash ~/clawd/skills/qwen3-tts/scripts/start_server.sh
# Check health
bash ~/clawd/skills/qwen3-tts/scripts/health_check.sh
# Stop (when done)
bash ~/clawd/skills/qwen3-tts/scripts/stop_server.sh
The server runs at http://localhost:8880.
| Model ID | Use Case | Notes |
|---|---|---|
custom-voice-1.7b | High-quality TTS with built-in speakers — default | Best quality, ~5 GB VRAM |
custom-voice-0.6b | Fast TTS with built-in speakers | Lightweight, ~2 GB VRAM |
voice-design | Design new voices from natural language descriptions | Uses VoiceDesign model |
base-1.7b | Basic TTS (auto-corrected to custom-voice-1.7b) | Use custom-voice-* instead |
base-0.6b | Basic TTS (auto-corrected to custom-voice-0.6b) | Use custom-voice-* instead |
Important: On the `/v1/audio/sp
The skill explicitly instructs the agent to update configuration with Telegram bot tokens and WhatsApp access tokens, creating a pathway for credential handling and persistent storage. In an agent context with file-write capability, this is sensitive because secrets can be exposed through logs, world-readable files, backups, or later prompt-induced disclosure, enabling account compromise and abuse of messaging APIs.
The agent can update `~/clawd/skills/qwen3-tts/config.json` to set:
- **Telegram:** bot token and default chat ID
- **WhatsApp:** phone number ID and access token
- **Default model:** `custom-voice-1.7b` or `custom-voice-0.6b`
- **Default audio format:** wav, mp3, ogg, flac
- **Device override:** auto, cuda:0, xpu:0, cpu
The documented curl ... | bash pattern is a classic dangerous command chain because it combines network retrieval and immediate shell execution in one step. If the remote source is compromised or tampered with, arbitrary code executes instantly with the user's privileges, making installer context especially sensitive.
#!/usr/bin/env bash
# install.sh — One-command installer for the Qwen3-TTS OpenClaw skill
# Usage: bash install.sh
# or: curl -fsSL https://raw.githubusercontent.com/daMustermann/claw-qwen3-tts/main/install.sh | bash
set -euo pipefail
# ─── Colors ───
Package name closely resembles a popular package, suggesting possible typosquatting. Attackers publish malicious packages with similar names to trick developers into installing them.
Tool calls are chained to bypass individual safety checks or escalate capabilities beyond what any single tool call would allow.
;;
ubuntu|debian|linuxmint|pop)
echo " Install with:"
echo " sudo apt update && sudo apt install -y python3 python3-pip python3-venv ffmpeg sox git build-essential"
;;
fedora|rhel|centos|rocky|alma)
echo " Install with:"
Tool calls are chained to bypass individual safety checks or escalate capabilities beyond what any single tool call would allow.
;;
ubuntu|debian|linuxmint|pop)
echo " Install with:"
echo " sudo apt update && sudo apt install -y python3 python3-pip python3-venv ffmpeg sox git build-essential"
;;
fedora|rhel|centos|rocky|alma)
echo " Install with:"
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
audio_path: Path to the audio file
phone_number_id: WhatsApp Business phone number ID
recipient: Recipient phone number (E.164 format, e.g. "+14155551234")
access_token: Meta Graph API access token
Returns:
dict with WhatsApp API response
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
curl -X POST http://localhost:8880/v1/audio/speech \
-H "Content-Type: application/json" \
-d '{
"model": "custom-voice-1.7b",
The README promotes voice cloning from short reference audio but does not warn that cloning another person's voice may require their consent and can expose privacy, impersonation, and fraud risks. In an agent skill context, this omission can normalize unsafe use and lead operators to deploy voice cloning without authorization checks or policy guardrails.
The README documents Telegram and WhatsApp delivery endpoints without clearly warning that generated audio, recipient identifiers, and API credentials are transmitted to third-party services. This can cause accidental leakage of sensitive content or secrets, especially when operators assume the skill is otherwise local because the API itself runs on localhost.
This example sends an audio file, chat identifier, and bot token through an endpoint intended to transmit data to Telegram, so it clearly involves third-party data transfer and secret handling. In an agent environment, poorly disclosed external messaging behavior can lead to unintentional disclosure of generated speech or credential exposure through logs, configs, or misuse.
Configure your bot token in config.json, then the agent sends audio as native PTT voice messages using sendVoice (OGG/Opus format).
curl -X POST http://localhost:8880/v1/audio/send/telegram \
-H "Content-Type: application/json" \
-d '{
"audio_file": "/path/to/speech.wav",
The skill instructs the agent to use shell commands, local file reads/writes, and network operations, but it declares no explicit tool scope or permissions boundaries. In an agent environment, this increases the blast radius of prompt misuse or user-driven abuse because the runtime may permit broader actions than the manifest communicates.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
> **Chelsie** · **Ethan** · **Aidan** · **Serena** · **Ryan** · **Vivian** · **Claire** · **Lucas** · **Eleanor** · **Benjamin**
You can discover speakers dynamically: `curl http://localhost:8880/v1/speakers`
---
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
When to use: User wants to create a custom voice, describe how a character should sound, design a persona's voice.
curl -X POST http://localhost:8880/v1/audio/voice-design \
-H "Content-Type: application/json" \
-d '{
"model": "voice-design",
The skill promotes voice cloning from reference audio without any consent, identity-misuse, or privacy warning. In context, this is more dangerous because the core purpose is cloning human voices, which can enable impersonation, fraud, harassment, or unauthorized biometric-data processing if users or agents proceed without safeguards.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
X-Voice-Id from the response headers and save it:
curl -X POST http://localhost:8880/v1/voices \
-H "Content-Type: application/json" \
-d '{
"name": "USER_CHOSEN_NAME",
The Telegram and WhatsApp flows send audio content and possibly credentials to third-party services without an explicit warning that data leaves the local system. This is risky because users may unknowingly transmit sensitive audio, phone numbers, chat identifiers, or API tokens to external platforms.
The configuration guidance encourages storing Telegram and WhatsApp credentials in a local JSON file without any warning about secret-at-rest exposure. If filesystem permissions are weak, other local users, malware, backups, or logs could disclose bot tokens and access tokens, enabling account abuse and unauthorized messaging.
The installer unconditionally executes a secondary script from the cloned repository (scripts/setup_env.sh) with no confirmation, review step, or trust verification. Because that script can perform arbitrary local and network actions, users who run the one-command installer may trigger significant system changes without an informed consent boundary.
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.
torchaudio
# Optional: flash-attn for faster inference (requires CUDA toolkit / nvcc)
# Install CUDA toolkit first: sudo pacman -S cuda (CachyOS/Arch)
# Then: CUDA_HOME=/opt/cuda pip install flash-attn --no-build-isolation