安全决策报告

claw-body

该技能为合法的 NuwaAI 数字人avatar集成工具,核心功能正常,但存在多项文档-行为差异(shell执行、文件写入、凭证读取)未在 SKILL.md 中声明,构成安全分析师级别的越权行为。

安装决策优先 来源: ClawHub 扫描时间: 2026/4/3
文件 6
IOC 3
越权项 5
发现 6
最直接的威胁证据

为什么得出这个结论

2/4 个维度触发
阻止
声明与实际能力

发现 5 项声明之外的能力或越权行为。

阻止
隐藏执行与外联

提取到 1 个高危 IOC 或外联信号。

通过
攻击链与高危发现

没有形成明确的恶意路径。

通过
依赖与供应链卫生

依赖结构存在,但暂未看到明显高危告警。

风险分是怎么被拉高的

未声明的 shell 执行 +18

server.mjs:310、327 两处 execSync 调用解析 PPT/PDF,SKILL.md 完全未提及

未声明的 filesystem:WRITE +10

将用户上传的 PPT/PDF 写入 os.tmpdir(),SKILL.md 未声明文件系统写入能力

未声明读取 OpenClaw 凭证 +8

server.mjs 读取 ~/.openclaw/openclaw.json 获取 gateway token,未在 SKILL.md 说明

硬编码 demo API key +6

server.mjs:34 硬编码 NuwaAI demo key,虽注释说明为公开试用key,但仍是源码级凭证暴露

最关键的证据

中危

未声明的 shell 执行(subprocess)

server.mjs 通过 execSync 调用 python3 解析用户上传的 PPT/PDF 文件,执行路径硬编码在 ~/Desktop/openclaw/work/...,执行超时 120 秒。SKILL.md 完全没有提及此行为。

server.mjs:310
在 SKILL.md allowed-tools 中声明 shell:WRITE,并在文档中说明调用的是 claw-presenter 的 parse 脚本
中危

未声明的 OpenClaw 凭证读取

server.mjs 读取 ~/.openclaw/openclaw.json 以获取 gateway token。SKILL.md 仅提到需要 enable chatCompletions 端点,未说明需要读取配置文件。

server.mjs:12
在文档中明确声明需要读取 OpenClaw 配置文件获取认证 token
低危

硬编码 demo API key

server.mjs 中硬编码了 NuwaAI demo API key(sk-ody1Xk9lw...),虽注释说明为公开试用凭证,但源码中包含活跃的 API key 存在密钥泄露风险。

server.mjs:34
将 demo key 移至环境变量 NUWA_DEMO_KEY 或从外部配置文件注入
低危

文件上传路径遍历风险(已缓解)

API /api/presentation/ 支持读取任意 dir 参数的 presentation.json 和 slides/ 目录。代码有 path.resolve 校验(server.mjs:368),但 presRoot 硬编码在 ~/Desktop/openclaw/work/presentations。

server.mjs:249
使用更严格的沙箱路径限制,避免读取 Desktop 下的其他文件
低危

SKILL.md 缺少 allowed-tools 声明

技能元数据完全没有声明 allowed-tools,违反 AI 技能安全规范。

SKILL.md:1
添加 allowed-tools 声明:{"tools": ["Bash", "Read", "Write"]} 并说明用途
提示

NuwaAI 外部服务集成

技能与 NuwaAI (nuwaai.com) 服务深度集成,涉及 WebSocket 实时通信、API 认证和数字人渲染,属于合法第三方集成但用户应知晓数据流向。

server.mjs:226
在隐私政策或 SKILL.md 中说明 NuwaAI 作为数据处理第三方

声明能力 vs 实际能力

文件系统 阻止
声明 NONE
推断 WRITE
server.mjs:58 .nuwa-config.json 写入, server.mjs:318 上传文件写入 os.tmpdir()
网络访问 阻止
声明 NONE
推断 WRITE
server.mjs:215 POST到 api.nuwaai.com, server.mjs:226 WebSocket wss://wsapi.nuwaai.com — 均未在 SKILL.md 声明
命令执行 阻止
声明 NONE
推断 WRITE
server.mjs:310 execSync python3 parse-presentation.py, server.mjs:327 同上
环境变量 阻止
声明 NONE
推断 READ
server.mjs:10 读取 OPENCLAW_GATEWAY, OPENCLAW_TOKEN; server.mjs:13 读取 HOME 拼接路径
技能调用 阻止
声明 NONE
推断 READ
SKILL.md 提到 claw-presenter skill 配合使用,但未声明 dependency

可疑产物与外联

高危 API 密钥
apiKey: "sk-ody1Xk9lw_vXkRWEPnaO8OwTFB9gbCnng2EWUl5jNbzolDSlFItc9DvWqrr6RLcL"

server.mjs:34

中危 外部 URL
https://nuwaai.com

SKILL.md:25

中危 外部 URL
https://api.nuwaai.com/web/apiKey/auth

server.mjs:215

依赖与供应链

包名版本来源漏洞备注
node (runtime) 18+ system Node.js 运行时,无第三方 npm 依赖

文件构成

6 个文件 · 2739 行
HTML 1 个文件 · 1680 行JavaScript 3 个文件 · 862 行Markdown 1 个文件 · 192 行JSON 1 个文件 · 5 行
需关注文件 · 2
server.mjs JavaScript · 579 行
未声明的 shell 执行(subprocess) · 未声明的 OpenClaw 凭证读取 · 硬编码 demo API key · 文件上传路径遍历风险(已缓解) · NuwaAI 外部服务集成 · apiKey: "sk-ody1Xk9lw_vXkRWEPnaO8OwTFB9gbCnng2EWUl5jNbzolDSlFItc9DvWqrr6RLcL" · https://api.nuwaai.com/web/apiKey/auth
SKILL.md Markdown · 192 行
SKILL.md 缺少 allowed-tools 声明 · https://nuwaai.com
其他文件 · index.html · i18n.js · pcm-processor.js · _meta.json

安全亮点

核心功能为合法工具:数字人 avatar 实时对话,无恶意目的
API key 为 NuwaAI 官方 demo key,非窃取凭证
WebSocket 通信仅用于avatar音视频,无可疑 C2 通道
路径遍历有防护(server.mjs:368 path.resolve 校验)
用户凭证(apiKey/avatarId/userId)存储在本地 .nuwa-config.json,不外传
临时文件上传后即删除(server.mjs:317 fs.unlinkSync)
无 eval、base64 解码、裸 IP 请求等高危模式