voice-agent
5 findings (1 high, 4 medium), mainly unauthorized tool use, data exfiltration, resource abuse. Most recent scan 2026-02-07.
This voice agent skill presents MEDIUM-HIGH security risks primarily related to external service dependencies and credential handling. The skill communicates with a localhost Docker container API without authentication, automatically pulls Docker images without version pinning (supply chain risk), and potentially mounts AWS credentials into containers. While designed for legitimate voice transcription functionality, the lack of authentication, version pinning, and file path validation creates multiple attack vectors. The skill would benefit from stronger isolation, authentication mechanisms, and supply chain security controls. The missing optional metadata fields reduce transparency but are low severity. No direct prompt injection or malicious code was detected in the instruction body.
Scanner's overall assessment (LLM analyzer)
Second scanner: NVIDIA SkillSpector
Independent static run, no language model, over the same files as the Cisco scan above. How the two scanners compare across the whole corpus: Two scanners, one corpus.
What this skill does
Local Voice Input/Output for Agents using the AI Voice Agent API.
- Package
- 4 files, 9.7 KB
- SKILL.md
- 213 words, 7 sections
- Code
- Python (1), Shell (1)
- Version
- 1.0.0
SKILL.md covers: Voice Agent · Behavior Guidelines · Tools · Transcribe File · Synthesize to File · Health Check · Service Management
Findings
HIGH Hardcoded Localhost API Endpoint Without Authentication Data Exfiltrationllm
The skill communicates with a localhost API (http://localhost:8000) without any authentication mechanism. While localhost services are typically trusted, this creates a security risk if: (1) the Docker container is compromised, (2) other malicious processes on localhost can intercept/manipulate traffic, or (3) the container is misconfigured to expose ports externally. The skill sends audio files and receives transcriptions without verifying the identity or integrity of the API endpoint.
scripts/client.py:9
API_URL = "http://localhost:8000"MEDIUM Undeclared network usage Unauthorized Tool Usestatic
Skill code uses network libraries but doesn't declare network requirement
MEDIUM Docker Container Auto-Pull Without Version Pinning Resource Abusellm
The start.sh script automatically pulls the latest Docker image (trevisanricardo/ai-voice-backend) without version pinning. This creates a supply chain risk where a compromised or malicious image update could be automatically downloaded and executed on the user's system. The script uses 'docker pull $IMAGE_NAME || true' which silently fails if the pull encounters issues, potentially running outdated or cached images.
scripts/start.sh
echo "☁️ checking for image updates..."
docker pull $IMAGE_NAME || trueMEDIUM Potential Credential Exposure via Docker Volume Mount Data Exfiltrationllm
The start.sh script attempts to mount ~/.aws credentials into the Docker container. While the actual mount command is truncated, this pattern indicates the skill may be providing AWS credentials to an external Docker container. If the container or image is compromised, these credentials could be exfiltrated. The comment 'Assuming .env and ~/.aws exist' suggests environment variables and AWS credentials are being shared with the container.
scripts/start.sh
# Assuming .env and ~/.aws exist in the current directory context or user home
# We need to resolve absolute paths for volumes usually, but ~ works in shell expansion.MEDIUM Unrestricted File Path Access for Audio Transcription Unauthorized Tool Usellm
The transcribe function accepts arbitrary file paths from user input without validation or sandboxing. While the skill is designed to transcribe audio files, there's no verification that the file is actually an audio file or that it's within an expected directory. A malicious user could potentially point the skill to sensitive files, which would then be uploaded to the localhost API (and potentially logged or processed in unexpected ways).
scripts/client.py
def transcribe(filename):
if not os.path.exists(filename):
print(f"❌ File not found: {filename}")
return
try:
print(f"📤 Transcribing {filename}...")What is in the package
| File | Kind | Size |
|---|---|---|
CHANGELOG.md | doc | 502 B |
SKILL.md | doc | 1.7 KB |
scripts/client.py | script | 5.0 KB |
scripts/start.sh | script | 2.5 KB |
External hosts referenced
github.com
Hostnames that appear in the skill's files. Referencing a host is not a finding; compare against the findings above and the skill's stated purpose.
Environment variables referenced
PORT
Package contents recorded 2026-10-22. The scan above ran against the version current at scan time; the two can differ if the skill has since been updated.
What we checked
- Static analyzer. Pattern rules over SKILL.md and bundled files: known-bad commands, exfiltration URLs, secrets, obfuscation.
- Llm analyzer. A language model reads the skill and reports intent-level issues the rules cannot express.
- Meta analyzer. A second model pass that validates, deduplicates and re-scores the other analyzers' findings.
What we did not check
- Runtime behaviour. The skill was not executed; findings come from reading its files.
- Anything fetched at install or run time, including remote scripts, package dependencies, and URLs the skill tells the agent to open.
- Content the analyzers cannot read: images, binaries, and some non-English text.
- Known scanner bypass classes. See the methodology and limitations page.
Sources
- Repository: https://clawhub.ai/skills/voice-agent
- Raw scan result: voice-agent-scan.json
- Badge for your README:
 - Request a re-scan