分析报告 · 2026 年 10 月 25 日

NavCoin NEXT:
本地钱包的 KDF 太弱。

NEXT 把助记词和私钥保存在加密的本地文件中,但 AES 密钥仅由口令的 MD5 派生,没有盐,也没有迭代。攻击者一旦拿到 wallet.db,就可以离线尝试口令。风险前提是文件已经泄露;这不是对 NavCoin 网络的远程攻击。评级为中等:攻击需要先拿到本地文件;如果文件外泄,风险会升为严重。

严重程度:中等 · 需本地文件KDF本地钱包桌面端

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-103e6cf3078md5("password") 常量0 熵:拿到文件直接解密,连爆破都不用
2019-02-137cd784876md5(用户口令)受影响(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。请勿发送助记词、私钥或钱包文件。

一个需要检查的本地钱包,或一个可疑文件?