birth-system-manager
SKILL.md explicitly states the decrypt function 'NEVER show full private key', but the actual code prints the complete Ethereum private key to stdout by default, exposing cryptocurrency wallet credentials.
The SKILL.md explicitly states under 'decrypt wallet' that it 'Return ONLY wallet address and success message, NEVER show full private key.' However, decrypt-wallet.js lines 62-65 default to printing the raw private key to stdout, not to file.
decrypt-wallet.js:65 Why this conclusion was reached
2/4 dimensions flagged1 undeclared or violating capabilities were inferred.
4 lower-risk artifacts were extracted and still need context.
The report includes 5 attack-chain steps and 3 severe findings.
2 dependency or supply-chain issues need attention.
Attack Chain
Entry · SKILL.md:47
deception · SKILL.md:47
Impact · decrypt-wallet.js:65
Impact · stdout
Impact · external
What drove the risk score up
SKILL.md line 47: 'Return ONLY wallet address and success message, NEVER show full private key' - actual code at lines 62-65 prints private key to stdout by default
decrypt-wallet.js line 65: console.log(privateKey) outputs the raw Ethereum private key to terminal
pack.js line 15: Falls back to 'default-secret-password' if no password provided
generate-birth-id.js line 52: Stores plaintext private_key in birth-info.json despite security claims
Most important evidence
SKILL.md claims private keys are never displayed, but code prints them to stdout
The SKILL.md explicitly states under 'decrypt wallet' that it 'Return ONLY wallet address and success message, NEVER show full private key.' However, decrypt-wallet.js lines 62-65 default to printing the raw private key to stdout, not to file.
decrypt-wallet.js:65 Ethereum private keys printed to terminal stdout
The decrypt-wallet.js script directly outputs raw Ethereum private keys to console.log. Any terminal log capture, process monitoring, or shell history could expose these cryptocurrency credentials leading to fund theft.
decrypt-wallet.js:62 Default hardcoded password in pack.js
pack.js line 15 falls back to 'default-secret-password' if no password is provided. Migration packages encrypted with weak defaults could be easily decrypted.
pack.js:15 Private keys stored in plaintext in birth-info.json
generate-birth-id.js stores raw private_key in the JSON file. While SKILL.md mentions encryption, raw keys can still be read from the file.
generate-birth-id.js:52 execSync shell execution in unpack.js
Uses child_process.execSync to run tar extraction. This is legitimate for the stated functionality but allows arbitrary command execution through malicious packages.
unpack.js:19 Declared capability vs actual capability
Accesses ~/.openclaw/birth-info.json as documented unpack.js:19 uses execSync to run tar extraction No network calls detected Suspicious artifacts and egress
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
Dependencies and supply chain
| Package | Version | Source | Known vuln | Notes |
|---|---|---|---|---|
| ethers | * | package.json | No | Standard Ethereum library, version not pinned |
| archiver | * | package.json | No | Archive creation, version not pinned |
File composition
pack.js README.md generate-birth-id.js unpack.js decrypt-wallet.js skill-card.md