Skill Trust Decision

product-demo-video

存在已声明的shell命令注入风险和第三方依赖锁定缺失,但未见明确的凭证窃取或数据外泄行为。

Install decision first Source: ClawHub Scanned: Jun 24, 2026
Files 6
Artifacts 6
Violations 0
Findings 4
Most direct threat evidence
Critical Dangerous Command
rm -rf /

Why this conclusion was reached

1/4 dimensions flagged
Pass
Declared vs actual capability

Declared resources and inferred behavior are broadly aligned.

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.

Review
Dependencies and supply chain hygiene

3 dependency or supply-chain issues need attention.

What drove the risk score up

shell命令注入风险 +20

record-demo.mjs:105-107 将用户提供的 narration 拼入 execSync 命令,未完全转义特殊字符

FFmpeg 下载无版本锁定 +10

install-deps.sh:15-17 从 johnvansickle.com 动态匹配文件名,可能被供应链攻击

预扫描标记 rm -rf +5

install-deps.sh:23 实为 rm -rf /tmp/... 子路径,非根目录删除,但命令构造本身需注意

文档-行为一致性 +-5

skill-card.md 明确声明了 shell 命令注入和依赖安装风险,行为与文档相符

Most important evidence

Medium RCE

shell命令注入 — 用户叙文案文拼接入execSync

record-demo.mjs:105 将 narration 文本直接拼入 shell 命令,仅替换双引号字符,未转义反引号、$()、| 等shell元字符。如果用户导入来自不可信来源的演示定义,可能导致命令注入。

scripts/record-demo.mjs:105
使用列表参数而非字符串拼接调用 edge-tts,或对 narration 执行全面shell转义
Medium Supply Chain

FFmpeg静态构建无版本锁定

install-deps.sh:15-17 使用通配符模式匹配 johnvansickle.com 的FFmpeg发布文件名(ffmpeg-*-amd64-static),攻击者可能通过中间人替换下载产物。

scripts/install-deps.sh:15
使用包管理器安装FFmpeg(apt/dnf),或固定下载链接到已验证的发布版本SHA256
Low RCE

puppeteer page.evaluate 沙箱逃逸风险

record-demo.mjs:61-73 的 reactSetValue 函数将用户提供的 selector 传入 page.evaluate 执行DOM操作,但仅作用于headless浏览器沙箱内,理论上不会逃逸。

scripts/record-demo.mjs:61
当前作用域内风险可控,但建议对 selector 参数做格式校验
Info Priv Escalation

全局npm/pip安装声明与实践一致

skill-card.md 已知风险中声明了全局npm/pip安装风险,install-deps.sh 确实使用 npm i -g puppeteer 和 pip3 install(无 --user),行为与文档相符。

scripts/install-deps.sh:9
建议使用 --user 标志或虚拟环境以减少权限提升风险

Declared capability vs actual capability

Filesystem Pass
Declared WRITE
Inferred WRITE
SKILL.md:36-50 声明输出MP4/帧文件;record-demo.mjs:115 写入 /tmp/demo-video-work/
Network Pass
Declared READ
Inferred READ
SKILL.md:18 edge-tts 调用 Microsoft 服务器;record-demo.mjs:110 page.goto() 访问用户提供URL
Shell Pass
Declared WRITE
Inferred WRITE
SKILL.md:16 声明 npm/pip/ffmpeg;record-demo.mjs:103-129 多处 execSync 调用
Browser Pass
Declared WRITE
Inferred WRITE
SKILL.md:18 Puppeteer headless Chrome;record-demo.mjs:94-126 截图/交互
Skill Invoke Pass
Declared NONE
Inferred NONE
未发现跨skill调用或agent间通信

Suspicious artifacts and egress

Critical Dangerous Command
rm -rf /

scripts/install-deps.sh:23

Medium External URL
https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz

scripts/install-deps.sh:19

Medium External URL
https://yourapp.dev/

scripts/record-demo.mjs:56

Medium External URL
https://yourapp.dev/feature1/

scripts/record-demo.mjs:67

Medium External URL
https://clawhub.ai/user/xiazai77

skill-card.md:7

Medium External URL
https://clawhub.ai/xiazai77/product-demo-video

skill-card.md:30

Dependencies and supply chain

PackageVersionSourceKnown vulnNotes
puppeteer * npm (global) No 全局安装,无版本锁定
edge-tts * pip3 No 无版本锁定
Pillow * pip3 No 无版本锁定
ffmpeg dynamic johnvansickle.com (HTTPS) No 静态构建,文件名通配符匹配,无版本哈希验证

File composition

6 files · 643 lines
JavaScript 1 files · 303 linesMarkdown 3 files · 285 linesShell 1 files · 50 linesJSON 1 files · 5 lines
Files of concern · 3
scripts/record-demo.mjs JavaScript · 303 lines
shell命令注入 — 用户叙文案文拼接入execSync · puppeteer page.evaluate 沙箱逃逸风险 · https://yourapp.dev/ · https://yourapp.dev/feature1/
skill-card.md Markdown · 43 lines
https://clawhub.ai/user/xiazai77 · https://clawhub.ai/xiazai77/product-demo-video
scripts/install-deps.sh Shell · 50 lines
FFmpeg静态构建无版本锁定 · 全局npm/pip安装声明与实践一致 · rm -rf / · https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz
Other files · SKILL.md · demo-planning.md · _meta.json

Security positives

文档完整、详细说明了工作流和依赖关系
skill-card.md 主动声明了已知风险(shell注入、依赖安装、隐私声明),透明度高
生成overlay.py时使用JSON序列化隔离代码,无直接eval()执行用户代码
Puppeteer运行在headless沙箱中,DOM操作不逃逸
未发现凭证收割、环境变量遍历、敏感路径访问等高危行为
未发现base64/eval混淆或隐藏指令
FFmpeg清理临时文件(rm -rf /tmp/...)在子目录范围内,非根删除