S-7 · NAVCOIN-KDF-2026-01 · v1.0 · 审计日期 2026 年 10 月 25 日 · 阅读约 5 分钟
摘要
NEXT 是 NavCoin 的桌面客户端。报告检查了 sakdeniz/next 的 master 分支,重点是轻钱包服务 server-lw.js 及其 wallet.db 文件。
该文件包含助记词、WIF 私钥和 xpriv。钱包使用 AES-256-CBC 加密,但密钥仅由口令的 MD5 派生,没有盐,也没有迭代。拿到文件的人可以离线、无速率限制地尝试口令。
风险是本地性的:必须先拿到 wallet.db。这不是对 NavCoin 网络的直接远程攻击。
文件里有什么
wallet.db 是一个加密的 lowdb 文件。解密后包含:
- 恢复短语(
mnemonics); - 各地址的 WIF 私钥;
- 扩展私钥
xpriv。
因此,同一个文件可能暴露由该助记词派生的全部资产,而不只是 NAV。
受影响版本
仓库没有 tag。我们按 server-lw.js 的提交历史逐个取原文件,共检查 10 个历史状态。从加入口令保护开始,全部受影响。
| 日期 | commit | 密钥派生 | 判定 |
|---|---|---|---|
| 2019-02-10 | 3e6cf3078 | md5("password") 常量 | 0 熵:拿到文件直接解密,连爆破都不用 |
| 2019-02-13 | 7cd784876 | md5(用户口令) | 受影响(S-7 本体) |
| 2019-02-16 → 2021-01-20 | 后续 8 个提交 | md5(用户口令) | 全部受影响 |
结论:10/10 个历史版本全部受影响;最后一笔检查的提交(2021-01-20)仍未修复。
问题所在
这里的问题不只是 KDF 弱,而是几乎没有 KDF:AES 密钥就是口令的 MD5 十六进制结果。没有盐、没有迭代,也没有对密文做认证。
此外,部分代码路径会把口令明文写入日志。攻击者拿到日志,甚至不必先破解钱包文件。
长而随机的口令能增加破解成本,但不能修复架构问题。正确做法是迁移到慢速、加盐的 KDF。
影响
如果 wallet.db 被复制、备份、同步或窃取,攻击者可以离线工作;口令较弱或复用时,就可能被还原。随后攻击者得到助记词和私钥,可以转走资产。
这个文件经常出现在备份和同步目录里,应按私钥级别保护,而不是当作普通配置文件。
范围与局限
- PoC 按同一逻辑重建;未测试真实用户钱包样本。
- 实际风险取决于口令强度,以及攻击者能否拿到文件。
- 未覆盖
navcoin-core全节点;它使用不同的派生路径。 - 审计范围内未发现已修复版本。
- 不公布受害者数据、助记词或私钥。
建议
- 用 Argon2id、scrypt 或参数合理的 PBKDF2-SHA512 替换 MD5。
- 为每个文件加入随机盐,并使用带认证的加密(AES-GCM 或 ChaCha20-Poly1305)。
- 删除口令日志。
- 迁移旧文件:未重写的旧文件仍然可被攻击。
- 把
wallet.db当作密钥材料;避免未加密备份和同步目录。 - 如果文件可能已经泄露,创建新钱包和新助记词,并转移资产。
披露
完整报告和证据仍然受限。报告案例:security@frblockchain.icu。请勿发送助记词、私钥或钱包文件。