Skill Trust Decision

birth-system-manager

技能存在文档欺骗行为:SKILL.md 承诺绝不显示私钥,但 decrypt-wallet.js 实际将私钥明文输出到 stdout;同时 pack.js 在生成的迁移文档中泄露密码和系统指纹。

Install decision first Source: ClawHub Scanned: Jun 21, 2026
Files 11
Artifacts 4
Violations 0
Findings 6
Most direct threat evidence
01
用户调用 decrypt wallet 功能 Entry · SKILL.md
02
decrypt-wallet.js 将私钥明文打印到 stdout,攻击者通过日志/TTY 截获 Escalation · decrypt-wallet.js
03
攻击者获得私钥后可完全控制关联的钱包地址 Impact · decrypt-wallet.js

Why this conclusion was reached

1/4 dimensions flagged
Pass
Declared vs actual capability

Declared resources and inferred behavior are broadly aligned.

Review
Hidden execution and egress

4 lower-risk artifacts were extracted and still need context.

Block
Attack chain and severe findings

The report includes 3 attack-chain steps and 2 severe findings.

Review
Dependencies and supply chain hygiene

2 dependency or supply-chain issues need attention.

Attack Chain

01
用户调用 decrypt wallet 功能

Entry · SKILL.md:1

02
decrypt-wallet.js 将私钥明文打印到 stdout,攻击者通过日志/TTY 截获

Escalation · decrypt-wallet.js:85

03
攻击者获得私钥后可完全控制关联的钱包地址

Impact · decrypt-wallet.js:85

What drove the risk score up

文档欺骗 - 私钥泄露 +20

SKILL.md 第 55 行承诺'NEVER show full private key',但 decrypt-wallet.js 第 85-87 行直接打印私钥到 stdout

密码和系统指纹泄露 +15

pack.js 第 18 行默认密码 + 第 82-91 行在 MIGRATION.md 中写入密码和 hostname/platform/arch/node_version

私钥明文存储 +10

generate-birth-id.js 第 52 行将 private_key 明文存入 birth-info.json

Most important evidence

High Doc Mismatch

文档承诺不显示私钥,实际直接明文输出

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
修改 decrypt-wallet.js 默认行为,移除直接输出私钥到 stdout 的逻辑,改为仅在用户明确确认时才输出。
High Credential Theft

迁移包泄露密码和系统指纹

pack.js 在生成 MIGRATION.md 时将密码明文写入(第 82-91 行),并在 marker.metadata 中包含 hostname、platform、arch、node_version 等敏感系统信息。这些信息会被打包进 .tar.gz 并可能传输到其他机器。

pack.js:82
从 MIGRATION.md 中移除密码明文,改为提示用户从安全渠道获取。将系统指纹信息移到单独的 metadata.json 而非在迁移文档中暴露。
Medium Sensitive Access

私钥明文存储在 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
实现私钥加密存储,使用用户提供的密码通过 scrypt 派生密钥后 AES-256-CBC 加密。
Medium Priv Escalation

unpack.js 使用 execSync 执行 shell 命令

unpack.js 第 19 行使用 execSync 执行 tar 命令提取压缩包,虽然是本地 tar 操作,但如果用户传入的 packagePath 被恶意控制,可能导致路径遍历攻击。

unpack.js:19
对 packagePath 和 targetDir 进行路径规范化检查,防止 ../ 路径遍历攻击。
Medium Sensitive Access

创建可执行环境脚本

unpack.js 第 55-68 行在目标目录创建 .openclaw-setup.sh 并设置 0o755 权限,包含固定内容 'export IS_CLONE=true'。这可能在某些场景下被利用。

unpack.js:55
评估是否需要创建此脚本,或改为仅在日志中提示用户手动执行。
Low Supply Chain

pack.js 依赖 archiver 库但无版本锁定声明

pack.js 第 5 行使用 archiver 库进行打包,但项目没有 package.json 文件声明依赖版本。

pack.js:5
添加 package.json 文件并锁定依赖版本。

Declared capability vs actual capability

Filesystem Pass
Declared NONE
Inferred WRITE
多个脚本读写 ~/.openclaw/birth-info.json
Shell Pass
Declared NONE
Inferred WRITE
unpack.js:19 使用 execSync 执行 tar 命令
Environment Pass
Declared NONE
Inferred READ
读取 IS_CLONE、BIRTH_PRIVATE_KEY_PASSWORD 等环境变量

Suspicious artifacts and egress

Medium Wallet Address
0xF80042413226cf4a5F1b7de458Cf0EEd19237662

README.md:86

Medium External URL
https://docs.openclaw.ai

pack.js:272

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

skill-card.md:7

Medium External URL
https://clawhub.ai/vg555558/birth-system-manager

skill-card.md:27

Dependencies and supply chain

PackageVersionSourceKnown vulnNotes
ethers * bundled_with_openclaw No 依赖 OpenClaw 捆绑版本,无独立 package.json
archiver * require No 无版本锁定,通过 require 直接引用

File composition

11 files · 1775 lines
JavaScript 7 files · 1488 linesMarkdown 3 files · 282 linesJSON 1 files · 5 lines
Files of concern · 6
pack.js JavaScript · 395 lines
迁移包泄露密码和系统指纹 · pack.js 依赖 archiver 库但无版本锁定声明 · https://docs.openclaw.ai
README.md Markdown · 144 lines
0xF80042413226cf4a5F1b7de458Cf0EEd19237662
generate-birth-id.js JavaScript · 164 lines
私钥明文存储在 birth-info.json
unpack.js JavaScript · 125 lines
unpack.js 使用 execSync 执行 shell 命令 · 创建可执行环境脚本
decrypt-wallet.js JavaScript · 103 lines
文档承诺不显示私钥,实际直接明文输出
skill-card.md Markdown · 42 lines
https://clawhub.ai/user/vg555558 · https://clawhub.ai/vg555558/birth-system-manager
Other files · fix-clone.js · clone-init.js · whoami.js · SKILL.md · _meta.json

Security positives

技能功能合理,用于 AI agent 身份和克隆管理
使用 ethers.js 进行密码学签名验证
迁移包使用 AES-256-CBC 加密钱包数据
无外部网络请求(声称的 local-only 行为在网络层面得到遵守)
代码结构清晰,有完整的错误处理