扫描报告
25 /100
voice-tts
语音输入(Whisper ASR)+ 语音输出(Edge TTS)技能,支持 agent 专属音色,可调用 send_voice_reply.mjs 发送 Telegram 语音消息
Legitimate voice TTS/ASR skill for OpenClaw with no malicious behavior, but with undocumented shell execution, credential reading, and network access in code that is not declared in SKILL.md.
可以安装
Add explicit declarations to SKILL.md: (1) shell:WRITE for subprocess/pip/curl usage, (2) credential reading (openclaw.json botToken access), (3) network:WRITE for Telegram API calls. Also remove the references to non-existent scripts/edge_tts and scripts/whisper from SKILL.md.
安全发现 5 项
| 严重性 | 安全发现 | 位置 |
|---|---|---|
| 中危 | Undocumented shell subprocess execution 文档欺骗 | bin/voice-asr.mjs:67 |
| 中危 | Undocumented network access (Telegram API) 文档欺骗 | scripts/send_voice_reply.mjs:80 |
| 低危 | SKILL.md references non-existent internal script files 文档欺骗 | SKILL.md:200 |
| 低危 | Credential reading from openclaw.json not capability-declared 敏感访问 | scripts/send_voice_reply.mjs:49 |
| 低危 | install.sh uses proxy variable unquoted in pip command 文档欺骗 | install.sh:40 |
| 资源类型 | 声明权限 | 推断权限 | 状态 | 证据 |
|---|---|---|---|---|
| 文件系统 | NONE | READ | ✓ 一致 | bin/voice-asr.mjs:7 (fs.readFileSync reads openclaw.json); lib/config.mjs:43 |
| 文件系统 | NONE | WRITE | ✓ 一致 | bin/voice-asr.mjs:85-91 (copyFileSync/unlinkSync for archiving); bin/voice-tts.m… |
| 命令执行 | NONE | WRITE | ✓ 一致 | bin/voice-asr.mjs:67 (spawn('python3', ...)); bin/voice-tts.mjs:51 (spawn('pytho… |
| 网络访问 | NONE | WRITE | ✓ 一致 | scripts/send_voice_reply.mjs:80-91 (curl POST to https://api.telegram.org/) |
| 环境变量 | NONE | READ | ✓ 一致 | bin/voice-asr.mjs:82 (process.env.OPENCLAW_WORKSPACE); scripts/send_voice_reply.… |
| 技能调用 | NONE | READ | ✓ 一致 | bin/voice-asr.mjs:93-95 (generates output instructing agent to call send_voice_r… |
4 项发现
中危 外部 URL 外部 URL
http://127.0.0.1:7897 SKILL.md:50 中危 外部 URL 外部 URL
https://nodejs.org/ install.sh:37 中危 外部 URL 外部 URL
https://pypi.tuna.tsinghua.edu.cn/simple install.sh:49 中危 外部 URL 外部 URL
https://api.telegram.org/bot$ scripts/send_voice_reply.mjs:80 目录结构
11 文件 · 34.1 KB · 980 行 JavaScript 6f · 473L
Markdown 1f · 261L
Shell 2f · 208L
JSON 2f · 38L
├─
▾
bin
│ ├─
voice-asr.mjs
JavaScript
│ └─
voice-tts.mjs
JavaScript
├─
▾
lib
│ ├─
audio.mjs
JavaScript
│ ├─
config.mjs
JavaScript
│ └─
errors.mjs
JavaScript
├─
▾
scripts
│ └─
send_voice_reply.mjs
JavaScript
├─
▾
tests
│ └─
smoke.sh
Shell
├─
config.default.json
JSON
├─
install.sh
Shell
├─
package.json
JSON
└─
SKILL.md
Markdown
依赖分析 3 项
| 包名 | 版本 | 来源 | 已知漏洞 | 备注 |
|---|---|---|---|---|
edge-tts | latest (unpinned in install.sh) | pip | 否 | No version pinning in install.sh — pip install without version constraint |
whisper | latest (unpinned in install.sh) | pip | 否 | No version pinning in install.sh — pip install without version constraint |
click | latest (unpinned in install.sh) | pip | 否 | No version pinning in install.sh — pip install without version constraint |
安全亮点
✓ No evidence of reverse shell, C2, or data exfiltration to unauthorized destinations
✓ All network calls are to legitimate, documented endpoints (api.telegram.org, pypi.org, nodejs.org)
✓ No base64 encoding, obfuscation, or anti-analysis techniques detected
✓ No credential exfiltration — botToken is only used locally for Telegram API authentication
✓ File operations are scoped to expected paths (media directories, /tmp, workspace)
✓ Audio file archiving uses copy-before-delete pattern to prevent data loss
✓ Timeout protection on subprocess calls (SIGKILL after timeout)
✓ No access to ~/.ssh, ~/.aws, .env, or other sensitive credential paths
✓ pip install uses trusted packages (edge-tts, whisper, click) from official PyPI