claw-body
该技能为合法的 NuwaAI 数字人avatar集成工具,核心功能正常,但存在多项文档-行为差异(shell执行、文件写入、凭证读取)未在 SKILL.md 中声明,构成安全分析师级别的越权行为。
为什么得出这个结论
2/4 个维度触发发现 5 项声明之外的能力或越权行为。
提取到 1 个高危 IOC 或外联信号。
没有形成明确的恶意路径。
依赖结构存在,但暂未看到明显高危告警。
风险分是怎么被拉高的
server.mjs:310、327 两处 execSync 调用解析 PPT/PDF,SKILL.md 完全未提及
将用户上传的 PPT/PDF 写入 os.tmpdir(),SKILL.md 未声明文件系统写入能力
server.mjs 读取 ~/.openclaw/openclaw.json 获取 gateway token,未在 SKILL.md 说明
server.mjs:34 硬编码 NuwaAI demo key,虽注释说明为公开试用key,但仍是源码级凭证暴露
最关键的证据
未声明的 shell 执行(subprocess)
server.mjs 通过 execSync 调用 python3 解析用户上传的 PPT/PDF 文件,执行路径硬编码在 ~/Desktop/openclaw/work/...,执行超时 120 秒。SKILL.md 完全没有提及此行为。
server.mjs:310 未声明的 OpenClaw 凭证读取
server.mjs 读取 ~/.openclaw/openclaw.json 以获取 gateway token。SKILL.md 仅提到需要 enable chatCompletions 端点,未说明需要读取配置文件。
server.mjs:12 硬编码 demo API key
server.mjs 中硬编码了 NuwaAI demo API key(sk-ody1Xk9lw...),虽注释说明为公开试用凭证,但源码中包含活跃的 API key 存在密钥泄露风险。
server.mjs:34 文件上传路径遍历风险(已缓解)
API /api/presentation/ 支持读取任意 dir 参数的 presentation.json 和 slides/ 目录。代码有 path.resolve 校验(server.mjs:368),但 presRoot 硬编码在 ~/Desktop/openclaw/work/presentations。
server.mjs:249 SKILL.md 缺少 allowed-tools 声明
技能元数据完全没有声明 allowed-tools,违反 AI 技能安全规范。
SKILL.md:1 NuwaAI 外部服务集成
技能与 NuwaAI (nuwaai.com) 服务深度集成,涉及 WebSocket 实时通信、API 认证和数字人渲染,属于合法第三方集成但用户应知晓数据流向。
server.mjs:226 声明能力 vs 实际能力
server.mjs:58 .nuwa-config.json 写入, server.mjs:318 上传文件写入 os.tmpdir() server.mjs:215 POST到 api.nuwaai.com, server.mjs:226 WebSocket wss://wsapi.nuwaai.com — 均未在 SKILL.md 声明 server.mjs:310 execSync python3 parse-presentation.py, server.mjs:327 同上 server.mjs:10 读取 OPENCLAW_GATEWAY, OPENCLAW_TOKEN; server.mjs:13 读取 HOME 拼接路径 SKILL.md 提到 claw-presenter skill 配合使用,但未声明 dependency 可疑产物与外联
apiKey: "sk-ody1Xk9lw_vXkRWEPnaO8OwTFB9gbCnng2EWUl5jNbzolDSlFItc9DvWqrr6RLcL" server.mjs:34
https://nuwaai.com SKILL.md:25
https://api.nuwaai.com/web/apiKey/auth server.mjs:215
依赖与供应链
| 包名 | 版本 | 来源 | 漏洞 | 备注 |
|---|---|---|---|---|
| node (runtime) | 18+ | system | 否 | Node.js 运行时,无第三方 npm 依赖 |
文件构成
server.mjs SKILL.md