T08 · Insecure Dependencies
- Location
SKILL.md:76- Finding
Unpinned dependencies installed into the system Python environment
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This voice-cloning and calling skill is mostly disclosed, but it asks for broad credentials and persistent access beyond the implemented code and stores sensitive API keys in plaintext.
Review before installing. Use only with explicit consent from the voice owner, understand that voice samples are uploaded to ElevenLabs, avoid granting Telegram/Twilio credentials unless you are enabling calls or notifications, and prefer scoped secrets or a protected secret store over plaintext config.json or broad .env access.
SKILL.md:76Unpinned dependencies installed into the system Python environment
voice_generator.py:36ElevenLabs API credentials are persisted in a plaintext workspace file
voice_generator.py:141Predictable shared temporary files permit symlink attacks and cross-run corruption
SKILL.md:20Skill metadata requests secrets and persistent workspace access beyond implemented functionality
Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.
"https://api.elevenlabs.io/v1/user",
headers={"xi-api-key": key}
)
with urllib.request.urlopen(req, timeout=10) as resp:
import json
data = json.loads(resp.read())
plan = data.get("subscription", {}).get("tier", "unknown")
The document promises voice cloning and calling features, but much of the behavior is only described procedurally and includes credential-writing and API verification flows not cleanly reflected in the declared purpose. This mismatch makes review difficult and can conceal risky actions such as modifying local config with secrets and contacting third-party services under the guise of a content-generation skill.
The skill explicitly directs use of secrets from .env for ElevenLabs credentials, showing it expects credential access during execution. Access to environment-stored secrets is sensitive because the same agent context may hold unrelated tokens, and voice/Twilio workflows can chain that access into external transmission.
LAYER 1 — VOICE SETUP
Clones the principal's voice from MP3 samples via ElevenLabs API
Requires ELEVENLABS_API_KEY and ELEVENLABS_VOICE_ID in .env
Full setup guide with all commands: references/setup_guide.md
LAYER 2 — TEXT TO SPEECH
This section instructs operators to place the ElevenLabs API key in the agent .env, making the secret broadly available to any process with environment access. In combination with shell and network capabilities, that increases the chance of credential leakage or misuse.
OPTION B — Manual (recommended for first setup) → Go to: https://elevenlabs.io/app/settings/api-keys → Click "Create API Key" → name it → copy it → Add to your agent .env file: ELEVENLABS_API_KEY=sk_...
```bash
Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.
print("✅ Voice ID saved to config.json")
#### Via curl
```bash
VOICE_ID=$(curl -s -X POST https://api.elevenlabs.io/v1/voices/add \
Twilio account SID, auth token, and phone number are placed in the shared .env, exposing high-value telephony credentials to the agent context. If misused, these credentials could enable unauthorized calls, message sending, billing abuse, or access to call records.
# Add to your agent .env file:
TWILIO_ACCOUNT_SID=ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
TWILIO_AUTH_TOKEN=your_auth_token
TWILIO_PHONE_NUMBER=+1234567890
Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.
→ Multiple speakers in same file
Solution:
→ Delete the bad clone:
curl -X DELETE https://api.elevenlabs.io/v1/voices/$VOICE_ID \
-H "xi-api-key: $ELEVENLABS_API_KEY"
→ Record better samples (quieter, longer, more natural)
→ Re-run cloning
The troubleshooting step again relies on .env-managed API secrets and normalizes environment-wide credential storage for operational recovery. Repeated instructions to manipulate or depend on .env increase the likelihood of accidental disclosure, overbroad access, and secret sprawl.
PROBLEM: "Invalid API key" (401 on all requests)
Solution: Regenerate at https://elevenlabs.io/app/settings/api-keys
Update .env and restart agent container
PROBLEM: ffmpeg not found
Solution: apt-get update && apt-get install -y ffmpeg
By documenting a raw DELETE /v1/voices/{id} capability, the skill exposes a destructive parameterized action that could remove arbitrary voice assets if the ID is mishandled or maliciously substituted. In a system centered on cloned-voice assets, insufficient validation or confirmation around such operations can cause data loss or service disruption.
GET /v1/user → account + subscription info GET /v1/voices → list all voices POST /v1/voices/add → create IVC clone (multipart form) DELETE /v1/voices/{id} → delete a voice POST /v1/text-to-speech/{id} → generate audio (JSON body) GET /v1/models → list available models
The skill notes that Telegram bot credentials already exist in the agent .env, implying access to messaging secrets that may be unrelated to voice generation. This broadens blast radius: compromise or misuse of the skill could pivot into unauthorized Telegram notifications or data exfiltration.
TWILIO_PHONE_NUMBER → buy a number on Twilio (~$1/month)
AGENT ALREADY HAS: TELEGRAM_BOT_TOKEN → already in your agent .env TELEGRAM_CHAT_ID → already in your agent .env
Referencing TELEGRAM_CHAT_ID in the shared environment reinforces that the skill expects access to messaging destination metadata in addition to bot tokens. Coupled with transcript and lead handling, this can enable silent forwarding of sensitive summaries outside the local workspace.
AGENT ALREADY HAS: TELEGRAM_BOT_TOKEN → already in your agent .env TELEGRAM_CHAT_ID → already in your agent .env
### Voice Sample Requirements
The checklist directs storing ELEVENLABS_API_KEY in the agent .env as a standard setup step. Codifying this pattern increases organizational dependence on shared environment secrets and expands exposure if any skill can read env variables.
[ ] pip install twilio --break-system-packages (if using calls)
[ ] apt-get update && apt-get install -y ffmpeg
[ ] 3 MP3 samples uploaded to /workspace/voice/samples/
[ ] ELEVENLABS_API_KEY added to agent .env
[ ] ELEVENLABS_VOICE_ID added to agent .env (after cloning)
[ ] python3 voice_generator.py apply-config --api-key ... --voice-id ...
[ ] voice_generator.py status shows ✅ API Key and Voice ID
The checklist also places the voice ID and subsequent apply-config flow in an agent-visible setup pattern, tying sensitive identifiers and credentials into writable local config. This increases risk of credential/config tampering or unauthorized reuse of the cloned voice configuration.
[ ] apt-get update && apt-get install -y ffmpeg
[ ] 3 MP3 samples uploaded to /workspace/voice/samples/
[ ] ELEVENLABS_API_KEY added to agent .env
[ ] ELEVENLABS_VOICE_ID added to agent .env (after cloning)
[ ] python3 voice_generator.py apply-config --api-key ... --voice-id ...
[ ] voice_generator.py status shows ✅ API Key and Voice ID
[ ] Test TTS successful (output MP3 plays correctly)
The error-handling section instructs operators to check agent .env when API keys fail, further entrenching shared-environment secret handling. This operational model raises the chance that secrets will be inspected, copied, or logged during debugging.
ERROR: ELEVENLABS_API_KEY invalid or missing
Action: Verify at https://elevenlabs.io/app/settings/api-keys
Log: ERRORS.md → "API key invalid [date] — check agent .env"
ERROR: Voice samples missing
Action: Do NOT attempt voice cloning
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
### Restart OpenClaw after .env changes
```bash
cd /docker/openclaw-yyvg
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
### Restart OpenClaw after .env changes
```bash
cd /docker/openclaw-yyvg
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
### Restart OpenClaw after .env changes
```bash
cd /docker/openclaw-yyvg
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
### Restart OpenClaw after .env changes
```bash
cd /docker/openclaw-yyvg
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
### Restart OpenClaw after .env changes
```bash
cd /docker/openclaw-yyvg
The guide explicitly tells users to write an ElevenLabs API key into a .env file using shell redirection, with no warning about secret exposure, file protection, backups, shell recording, or source-control leakage. Because the key enables access to a third-party account and voice resources, compromise could allow unauthorized cloning, usage charges, or data access.
# Go to: https://elevenlabs.io/app/settings/api-keys
# Create API Key → copy → add to .env:
echo "ELEVENLABS_API_KEY=sk_your_key_here" >> /docker/openclaw-yyvg/.env
# Verify
curl -s https://api.elevenlabs.io/v1/user \
Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.
echo "ELEVENLABS_API_KEY=sk_your_key_here" >> /docker/openclaw-yyvg/.env
curl -s https://api.elevenlabs.io/v1/user
-H "xi-api-key: $ELEVENLABS_API_KEY" | python3 -m json.tool
Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.
echo "ELEVENLABS_API_KEY=sk_your_key_here" >> /docker/openclaw-yyvg/.env
curl -s https://api.elevenlabs.io/v1/user
-H "xi-api-key: $ELEVENLABS_API_KEY" | python3 -m json.tool
The instructions direct users to upload local voice samples to ElevenLabs for cloning without clearly warning that personal biometric voice data is being transmitted to and processed by a third party. Because voice prints are sensitive personal data and the skill is specifically cloning a principal's identity, omission of consent, privacy, and retention warnings materially raises privacy and impersonation risk.
Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.
json.dump(config, f, indent=2)
### Step 3 — Clone via curl (alternative)
```bash
# Clone
Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.
| python3 -m json.tool
# Extract and save Voice ID
VOICE_ID=$(curl -s -X POST https://api.elevenlabs.io/v1/voices/add \
-H "xi-api-key: $ELEVENLABS_API_KEY" \
-F "name=[AGENT_VOICE_NAME]" \
-F "files=@/workspace/voice/samples/sample_01.mp3" \
No suspicious patterns detected.