birth-system-manager
技能存在文档欺骗行为:SKILL.md 承诺绝不显示私钥,但 decrypt-wallet.js 实际将私钥明文输出到 stdout;同时 pack.js 在生成的迁移文档中泄露密码和系统指纹。
为什么得出这个结论
1/4 个维度触发声明资源与推断能力基本一致。
提取到 4 个一般风险产物,需要结合上下文判断。
报告包含 3 步攻击链,另有 2 项高危或严重发现。
发现 2 项需要关注的依赖或供应链线索。
攻击链
初始入口 · SKILL.md:1
权限提升 · decrypt-wallet.js:85
最终危害 · decrypt-wallet.js:85
风险分是怎么被拉高的
SKILL.md 第 55 行承诺'NEVER show full private key',但 decrypt-wallet.js 第 85-87 行直接打印私钥到 stdout
pack.js 第 18 行默认密码 + 第 82-91 行在 MIGRATION.md 中写入密码和 hostname/platform/arch/node_version
generate-birth-id.js 第 52 行将 private_key 明文存入 birth-info.json
最关键的证据
文档承诺不显示私钥,实际直接明文输出
SKILL.md 第 55 行明确声明'Return ONLY wallet address and success message, NEVER show full private key',但 decrypt-wallet.js 第 85-87 行当 DECRYPT_OUTPUT_TO_FILE 不为 true 时直接将私钥打印到控制台 stdout。这是明确的文档-行为差异(doc-behavior mismatch)。
decrypt-wallet.js:85 迁移包泄露密码和系统指纹
pack.js 在生成 MIGRATION.md 时将密码明文写入(第 82-91 行),并在 marker.metadata 中包含 hostname、platform、arch、node_version 等敏感系统信息。这些信息会被打包进 .tar.gz 并可能传输到其他机器。
pack.js:82 私钥明文存储在 birth-info.json
generate-birth-id.js 第 52 行将 private_key 明文存入 birthData 对象并保存到 ~/.openclaw/birth-info.json。虽然有注释说'in production, this should be encrypted',但代码没有实现加密。
generate-birth-id.js:52 unpack.js 使用 execSync 执行 shell 命令
unpack.js 第 19 行使用 execSync 执行 tar 命令提取压缩包,虽然是本地 tar 操作,但如果用户传入的 packagePath 被恶意控制,可能导致路径遍历攻击。
unpack.js:19 创建可执行环境脚本
unpack.js 第 55-68 行在目标目录创建 .openclaw-setup.sh 并设置 0o755 权限,包含固定内容 'export IS_CLONE=true'。这可能在某些场景下被利用。
unpack.js:55 pack.js 依赖 archiver 库但无版本锁定声明
pack.js 第 5 行使用 archiver 库进行打包,但项目没有 package.json 文件声明依赖版本。
pack.js:5 声明能力 vs 实际能力
多个脚本读写 ~/.openclaw/birth-info.json unpack.js:19 使用 execSync 执行 tar 命令 读取 IS_CLONE、BIRTH_PRIVATE_KEY_PASSWORD 等环境变量 可疑产物与外联
0xF80042413226cf4a5F1b7de458Cf0EEd19237662 README.md:86
https://docs.openclaw.ai pack.js:272
https://clawhub.ai/user/vg555558 skill-card.md:7
https://clawhub.ai/vg555558/birth-system-manager skill-card.md:27
依赖与供应链
| 包名 | 版本 | 来源 | 漏洞 | 备注 |
|---|---|---|---|---|
| ethers | * | bundled_with_openclaw | 否 | 依赖 OpenClaw 捆绑版本,无独立 package.json |
| archiver | * | require | 否 | 无版本锁定,通过 require 直接引用 |
文件构成
pack.js README.md generate-birth-id.js unpack.js decrypt-wallet.js skill-card.md