低风险 — 风险评分 20/100
上次扫描:2 天前 重新扫描
20 /100
claw-body
Give your Claw a body! Turn your AI Claw into a real-time digital avatar with face, voice, and expressions.
Claw Body 技能功能透明、声明一致,硬编码 API Key 为公开演示密钥(非用户凭证),shell 执行有文档说明,存在轻微瑕疵但不影响安全可用性。
技能名称claw-body
分析耗时55.9s
引擎pi
可以安装
可安全使用。建议将硬编码的演示 API Key 移至独立配置文件,并将 claw-presenter 脚本路径改为相对路径以减少供应链依赖。

安全发现 4 项

严重性 安全发现 位置
低危
硬编码公开演示 API Key
server.mjs 第34行硬编码了 NuwaAI 的公开演示密钥 sk-ody1Xk9lw_vXkRWEPnaO8OwTFB9gbCnng2EWUl5jNbzolDSlFItc9DvWqrr6RLcL,注释说明这是 NuwaAI 发行的公开试用密钥,用于5分钟免费试用模式。密钥本身不涉及用户凭证,但硬编码在源码中仍非最佳实践。
apiKey: "sk-ody1Xk9lw_vXkRWEPnaO8OwTFB9gbCnng2EWUl5jNbzolDSlFItc9DvWqrr6RLcL"
→ 将演示密钥移至 .demo-keys.json 等独立配置文件,不与主配置混淆
server.mjs:34
低危
execSync 依赖外部技能脚本
server.mjs:308 和 326 行使用 execSync 执行 claw-presenter 技能的 parse-presentation.py 脚本,路径硬编码为 ~/Desktop/openclaw/work/skills/claw-presenter/...。这创造了供应链依赖:若 claw-presenter 被篡改,本技能也会受影响。
const scriptPath = path.join(process.env.HOME, "Desktop", "openclaw", "work", "skills", "claw-presenter", "scripts", "parse-presentation.py");
→ 考虑将 parse-presentation.py 复制到本技能目录作为备用,或使用相对路径 <skill-dir>/scripts/
server.mjs:308
低危
环境变量读取未在文档声明
代码读取了多个环境变量(NUWA_PORT, OPENCLAW_GATEWAY, OPENCLAW_GATEWAY_TOKEN, OPENCLAW_TOKEN, HOME 等)但 SKILL.md 未提及这些环境变量配置需求。
const PORT = process.env.NUWA_PORT || 3099;
const OPENCLAW_GATEWAY = process.env.OPENCLAW_GATEWAY || "http://localhost:18789";
→ 在 SKILL.md 的 Requirements 或 Quick Start 部分补充环境变量配置说明
server.mjs:6
提示
路径遍历保护存在但位置靠后
slide image API (/api/presentation/slide/) 有路径遍历保护(line 369-373),但仅检查 imgPath 是否在 presDir 内。若 presDir 参数被注入(如 ../../etc),保护可能失效。
if (!imgPath.startsWith(path.resolve(presDir))) { res.writeHead(403); res.end("Forbidden"); return; }
→ 在解析 dir 参数时先进行标准化:const presDir = path.resolve(decodeURIComponent(presDirParam))
server.mjs:369
资源类型声明权限推断权限状态证据
网络访问 READ READ ✓ 一致 server.mjs:150 连接到 OpenClaw Gateway,server.mjs:168 连接 NuwaAI API
命令执行 WRITE WRITE ✓ 一致 server.mjs:308 execSync 调用 parse-presentation.py 解析 PPT/PDF
文件系统 READ READ ✓ 一致 server.mjs:12 读取 ~/.openclaw/openclaw.json,server.mjs:53-59 读写 .nuwa-config.json
环境变量 NONE READ ✓ 一致 server.mjs:6 读取 NUWA_PORT, OPENCLAW_GATEWAY 等环境变量
1 高危 3 项发现
🔑
高危 API 密钥 疑似硬编码凭证
apiKey: "sk-ody1Xk9lw_vXkRWEPnaO8OwTFB9gbCnng2EWUl5jNbzolDSlFItc9DvWqrr6RLcL"
server.mjs:34
🔗
中危 外部 URL 外部 URL
https://nuwaai.com
SKILL.md:25
🔗
中危 外部 URL 外部 URL
https://api.nuwaai.com/web/apiKey/auth
server.mjs:215

目录结构

6 文件 · 106.0 KB · 2739 行
HTML 1f · 1680L JavaScript 3f · 862L Markdown 1f · 192L JSON 1f · 5L
├─ 📁 public
│ ├─ 📜 i18n.js JavaScript 230L · 10.3 KB
│ ├─ 📄 index.html HTML 1680L · 66.3 KB
│ └─ 📜 pcm-processor.js JavaScript 53L · 1.4 KB
├─ 📋 _meta.json JSON 5L · 128 B
├─ 📜 server.mjs JavaScript 579L · 21.5 KB
└─ 📝 SKILL.md Markdown 192L · 6.4 KB

安全亮点

✓ 功能透明:所有核心功能(数字人视频、WebRTC、语音识别、PPT解析)均在代码中可见,无隐藏行为
✓ 文档一致:shell 执行 PPT/PDF 解析在 SKILL.md 第96-106行有完整说明
✓ 凭证处理正确:用户 API Key 通过 POST /api/config 接收并存储到本地配置文件,不在源码中暴露
✓ WebRTC 安全:使用 peerConnection 和安全的 wss:// 连接传输视频流
✓ 路径遍历保护:静态文件服务和 slide image API 均有路径检查
✓ 无恶意模式:未发现 base64|bash 管道、eval()、环境变量遍历、凭证外传等高危模式