Skill Trust Decision

claw-body

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

Install decision first Source: ClawHub Scanned: Apr 3, 2026
Files 6
Artifacts 3
Violations 5
Findings 6
Most direct threat evidence

Why this conclusion was reached

2/4 dimensions flagged
Block
Declared vs actual capability

5 undeclared or violating capabilities were inferred.

Block
Hidden execution and egress

1 high-risk artifacts or egress signals were extracted.

Pass
Attack chain and severe findings

There is no explicit malicious chain in the report.

Pass
Dependencies and supply chain hygiene

Dependencies are present but no obvious high-risk issue stands out.

What drove the risk score up

未声明的 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,但仍是源码级凭证暴露

Most important evidence

Medium

未声明的 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 脚本
Medium

未声明的 OpenClaw 凭证读取

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

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

硬编码 demo API key

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

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

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

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

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

SKILL.md 缺少 allowed-tools 声明

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

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

NuwaAI 外部服务集成

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

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

Declared capability vs actual capability

Filesystem Block
Declared NONE
Inferred WRITE
server.mjs:58 .nuwa-config.json 写入, server.mjs:318 上传文件写入 os.tmpdir()
Network Block
Declared NONE
Inferred WRITE
server.mjs:215 POST到 api.nuwaai.com, server.mjs:226 WebSocket wss://wsapi.nuwaai.com — 均未在 SKILL.md 声明
Shell Block
Declared NONE
Inferred WRITE
server.mjs:310 execSync python3 parse-presentation.py, server.mjs:327 同上
Environment Block
Declared NONE
Inferred READ
server.mjs:10 读取 OPENCLAW_GATEWAY, OPENCLAW_TOKEN; server.mjs:13 读取 HOME 拼接路径
Skill Invoke Block
Declared NONE
Inferred READ
SKILL.md 提到 claw-presenter skill 配合使用,但未声明 dependency

Suspicious artifacts and egress

High API Key
apiKey: "sk-ody1Xk9lw_vXkRWEPnaO8OwTFB9gbCnng2EWUl5jNbzolDSlFItc9DvWqrr6RLcL"

server.mjs:34

Medium External URL
https://nuwaai.com

SKILL.md:25

Medium External URL
https://api.nuwaai.com/web/apiKey/auth

server.mjs:215

Dependencies and supply chain

PackageVersionSourceKnown vulnNotes
node (runtime) 18+ system No Node.js 运行时,无第三方 npm 依赖

File composition

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

Security positives

核心功能为合法工具:数字人 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 请求等高危模式