安全决策报告

product-demo-video

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

安装决策优先 来源: ClawHub 扫描时间: 2026/6/24
文件 6
IOC 6
越权项 0
发现 4
最直接的威胁证据
严重 危险命令
rm -rf /

为什么得出这个结论

1/4 个维度触发
通过
声明与实际能力

声明资源与推断能力基本一致。

阻止
隐藏执行与外联

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

通过
攻击链与高危发现

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

复核
依赖与供应链卫生

发现 3 项需要关注的依赖或供应链线索。

风险分是怎么被拉高的

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 命令注入和依赖安装风险,行为与文档相符

最关键的证据

中危 代码执行

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

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

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

FFmpeg静态构建无版本锁定

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

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

puppeteer page.evaluate 沙箱逃逸风险

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

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

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

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

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

声明能力 vs 实际能力

文件系统 通过
声明 WRITE
推断 WRITE
SKILL.md:36-50 声明输出MP4/帧文件;record-demo.mjs:115 写入 /tmp/demo-video-work/
网络访问 通过
声明 READ
推断 READ
SKILL.md:18 edge-tts 调用 Microsoft 服务器;record-demo.mjs:110 page.goto() 访问用户提供URL
命令执行 通过
声明 WRITE
推断 WRITE
SKILL.md:16 声明 npm/pip/ffmpeg;record-demo.mjs:103-129 多处 execSync 调用
浏览器 通过
声明 WRITE
推断 WRITE
SKILL.md:18 Puppeteer headless Chrome;record-demo.mjs:94-126 截图/交互
技能调用 通过
声明 NONE
推断 NONE
未发现跨skill调用或agent间通信

可疑产物与外联

严重 危险命令
rm -rf /

scripts/install-deps.sh:23

中危 外部 URL
https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz

scripts/install-deps.sh:19

中危 外部 URL
https://yourapp.dev/

scripts/record-demo.mjs:56

中危 外部 URL
https://yourapp.dev/feature1/

scripts/record-demo.mjs:67

中危 外部 URL
https://clawhub.ai/user/xiazai77

skill-card.md:7

中危 外部 URL
https://clawhub.ai/xiazai77/product-demo-video

skill-card.md:30

依赖与供应链

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

文件构成

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

安全亮点

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