公開事故ケース分析Ethereum复盘 v1.0事故評価 · 重大リスク

Nomad Bridge 可信根初始化为零事件复盘

基于公开披露资料的事后复盘,非 umibit 受托审计。2022-08-01,一次例行升级把 Replica 合约的 可信根错误地初始化为 0x00;由于 Solidity 中未设置的 mapping 键默认返回 0x00,任何伪造消息的 证明校验都会命中这个「可信」零根而通过。漏洞公开后被数百人复制 calldata、替换收款地址哄抢, 史称「首例去中心化哄抢式抢劫」,960 笔交易掏空约 $1.9 亿。

これは公開事故ケース分析であり、umibit の受託監査ではありません。

本ページは公開情報に基づく実際の事故の事後分析で、セキュリティ研究と方法論の説明のためのものです。umibit と Nomad(乐观式跨链消息桥) の間に取引関係があることを示すものではありません。各結論は下記のソースと照合して独立に検証できます。

レポート番号
NOMAD-2022
対象プロジェクト
Nomad(乐观式跨链消息桥)
チェーン
Ethereum
言語
Solidity
損失規模
≈ $190M(近乎全部 TVL)
レポート版
复盘 v1.0
事故日
2022-08-01
事故評価
重大リスク

関連コントラクト / オンチェーン対象

事故に関わるコントラクト / オンチェーン対象と検証可能な識別子(アドレス / commit)。公開情報より整理。

名称種類commitアドレス
Replica.sol · process()消息处理
Replica.sol · acceptableRoot() / confirmAt根校验
Replica 合约(据公开披露)链上地址0xb92336759618f55bd0f8313bd843604592e27bd8

根本原因と発見

重大 3
IDタイトル深刻度状態分類
NOMAD-01升级时把可信根初始化为 0x00(confirmAt[0x00] 被设为有效时间戳)重大Resolved 修正済初期化
NOMAD-02未设置的 mapping 键默认返回 0x00,致任意伪造消息证明通过 acceptableRoot重大Resolved 修正済Merkle / クロスチェーン証明
NOMAD-03漏洞可被无门槛复制(替换收款地址即可),引发群体哄抢重大Resolved 修正済ビジネスロジック

公开事件复盘。 本页基于公开披露资料对一起真实安全事故做事后分析,用于安全研究与方法论说明, 并非 umibit 受托审计。文中数据请以「核验来源」所列公开资料为准。

事件概览

Nomad 是一座乐观式(optimistic)跨链消息桥。2022-08-01,其桥合约在数小时内被掏空 约 $1.9 亿—— 几乎是全部 TVL(WBTC、WETH、USDC、USDT、DAI 等)。与多数攻击不同,这次没有「一个黑客」:漏洞一旦公开, 数百个地址复制同一份攻击 calldata、只把收款地址换成自己,演变成一场公开哄抢,共 960 笔交易、1,175 次提款

根因:可信根被初始化为零

Replica 合约的 process() 在执行跨链消息前,会用 acceptableRoot() 检查该消息对应的 Merkle 根是否「可信」, 其依据是 confirmAt[root] 这个 mapping 中记录的确认时间戳。

一次例行升级把可信根 初始化为 0x00,即 confirmAt[0x00] 被设成了一个有效时间戳。而 Solidity 的语义是: 任何未显式设置的 mapping 键都默认返回 0x00。于是对于 任意伪造消息,其「未被确认」的根都会取到 0x00, 再被当成那个「可信零根」而 acceptableRoot() 返回 true——证明校验形同虚设,任何人都能让桥相信「这条提款已被证明」。

时间线细节:错误初始化约在 2022-05-26 引入,并在 2022-06-21 的升级中进入生产环境。

影响与处置

  • 白帽陆续归还资金,普遍报道 约 $30M+;Nomad 设立回收地址并承诺归还 90% 者不追究法律责任。
  • 后续有关键嫌疑人被引渡至美国(据 TRM Labs)。

AI 视角 · 为什么这类风险只会更多

Nomad 是 「升级/初始化引入的单点致命错误」 的典型:一行被错误初始化的状态,叠加 Solidity「零值默认」的语义陷阱, 就让整座桥的证明校验归零。它还展示了 Web3 特有的放大效应——链上漏洞一旦暴露即被群体复制,从单点变成踩踏。

启示有二:其一,每次升级/初始化都必须被当作完整审查对象(最危险的改动往往只有一行);其二,攻击者复制与变体的速度 正被自动化与 AI 拉满,留给团队的反应窗口越来越短。把「初始化不变量、零值/默认值假设、升级前后差异」纳入可规模化的 自动核查,并在上线前跑满覆盖,是与这种速度赛跑的唯一现实做法。

検証ソース

本ページが依拠する公開資料。各データと結論はこれと照合して検証できます。

本分析の検証方法

上記「検証ソース」の公式根本原因分析・セキュリティ企業のレポート・ブロックエクスプローラと照合し、事故日・損失規模・根本原因・オンチェーンアドレスなどを独立に検証してください。

← インシデント分析へ戻る