birth-system-manager
声明与行为严重不符:SKILL.md承诺不显示私钥但decrypt-wallet.js将私钥明文输出到stdout,且generate-birth-id.js将私钥明文写入磁盘
SKILL.md明确声明'Return ONLY wallet address and success message, NEVER show full private key',但decrypt-wallet.js第69-70行将解密后的私钥通过console.log直接打印到标准输出stdout
decrypt-wallet.js:69 为什么得出这个结论
2/4 个维度触发发现 2 项声明之外的能力或越权行为。
提取到 2 个一般风险产物,需要结合上下文判断。
报告包含 4 步攻击链,另有 3 项高危或严重发现。
发现 1 项需要关注的依赖或供应链线索。
攻击链
初始入口 · SKILL.md:1
权限提升 · decrypt-wallet.js:1
最终危害 · decrypt-wallet.js:69
最终危害 · decrypt-wallet.js:70
风险分是怎么被拉高的
SKILL.md声明'NEVER show full private key'但decrypt-wallet.js:69-70行明文打印私钥到stdout
generate-birth-id.js:51行将wallet.privateKey明文写入~/.openclaw/birth-info.json
pack.js:21行无密码时使用'default-secret-password'作为默认加密密码
所有脚本访问~/.openclaw/birth-info.json含敏感凭证
最关键的证据
文档承诺不显示私钥但代码明文输出
SKILL.md明确声明'Return ONLY wallet address and success message, NEVER show full private key',但decrypt-wallet.js第69-70行将解密后的私钥通过console.log直接打印到标准输出stdout
decrypt-wallet.js:69 私钥明文写入磁盘
generate-birth-id.js第51行将wallet.privateKey明文保存到~/.openclaw/birth-info.json文件中,任何能访问该文件的人都可获取钱包私钥
generate-birth-id.js:51 私钥解密逻辑处理不当
clone-init.js和fix-clone.js尝试处理encrypted_private_key时存在逻辑缺陷,若解密失败会回退使用原始signature而非正确报错
clone-init.js:95 依赖包无版本锁定
代码使用ethers库但无package.json指定版本,存在依赖投毒风险
unknown 弱默认加密密码
pack.js第21行使用'default-secret-password'作为默认打包密码,若用户未设置BIRTH_PACK_PASSWORD,备份钱包将以弱密码加密
pack.js:21 收集系统指纹信息
pack.js第138-141行在clone marker中记录hostname、platform、arch、node_version等系统信息
pack.js:138 访问系统环境变量
脚本访问process.env.HOME、process.env.IS_CLONE等环境变量,虽然这是正常功能但需注意敏感环境变量泄露风险
clone-init.js:14 声明能力 vs 实际能力
generate-birth-id.js:51 将私钥写入birth-info.json unpack.js:69 使用execSync执行tar命令 所有脚本无网络调用 可疑产物与外联
0xF80042413226cf4a5F1b7de458Cf0EEd19237662 fix-clone.js:30
https://docs.openclaw.ai pack.js:272
依赖与供应链
| 包名 | 版本 | 来源 | 漏洞 | 备注 |
|---|---|---|---|---|
| ethers | * | unknown | 否 | 无package.json锁定版本 |
文件构成
pack.js fix-clone.js clone-init.js generate-birth-id.js decrypt-wallet.js