
Nomadが1.9億ドルを盗まれた原因の分析:一回のアップグレードが引き起こした惨事
TechFlow厳選深潮セレクト

Nomadが1.9億ドルを盗まれた原因の分析:一回のアップグレードが引き起こした惨事
あるアップグレードの際に、コントラクトが0x00を有効なルートとしてマークしたため、Nomadには偽の情報が大量に流入しました。攻撃者はこの点を悪用して有効なトランザクションアドレスをコピー・ペーストし、混乱の中、ブリッジの資産が急速に枯渇しました。
執筆:Samczsun
編集:TechFlow intern
TL;DR
あるアップグレードにおいて、コントラクトが0x00を有効なルートとしてマークしたことで、Nomadに偽の情報が氾濫した。攻撃者はこれを悪用し、有効なトランザクションアドレスをコピー&ペーストすることで、混迷の中、クロスチェーンブリッジの資産を急速に枯渇させた。
直近で発生したNomadの出来事は、私がWeb3で目にしてきた中でも最も混沌としたハッキングの一つであり、1.5億ドル以上が巻き上げられた。一体どうしてこのようなことが起きたのか?根本原因とは何か?その舞台裏をご紹介しよう。

すべては、ETHSecurityのTelegramチャンネルでCIA OfficerがSpreekのツイートを共有したことから始まった。当時私は何が起きたのか理解できなかったが、多数の資産がブリッジから流出していることだけは明らかで、好ましくない兆候だった。

最初の推測は、「トークンの小数点設定が間違っているのではないか」だった。なぜなら、私の目には「0.01 WBTCを送信すると、100 WBTCが返ってくる」というキャンペーンが実行されているように見えたからだ。

当初は信じがたいと思っていたが、Moonbeamネットワーク上でいくつか手動で調査した結果、Moonbeamからは確かに0.01 WBTCしか送信されていないのに、なぜかイーサリアム上では100 WBTCを受け取っていたことが確認できた。

さらに、このWBTCのブリッジ取引には、本来必要なProve(証明)ステップが存在せず、直接`Process`関数が呼び出されていた。証明なしでメッセージを処理できるというのは、極めて問題である。

この状況には二つの可能性がある:証明が以前のブロックで別途提出されたか、またはReplicaコントラクトに重大なバグがあるかだ。しかし、最近に証明が個別に提出されたという痕跡はまったく見当たらなかった。

そうなると残る可能性は一つ――Replicaコントラクトに致命的な欠陥があるということになる。だが、なぜなのか?メッセージの内容を素早く確認したところ、メッセージは許容されるルートに属していなければならない。そうでなければ、185行目のチェックで失敗するはずだ。

幸運にも、この仮説を検証する簡単な方法があった。未証明のメッセージのルートが0x00であることを私は知っていた。なぜならmessages[_messageHash]が未初期化状態を示しており、つまりルート値が0x00だからだ。あとは、コントラクトがこのルートを受け入れるかどうかを確認すればよい。

コントラクトは受け入れた…。

結局のところ、アップグレード中にNomadチームは信頼できるルートを0x00に初期化していたのだ。正直に言えば、0値を初期化値として使うことはよくある慣習である。しかし残念ながら、今回のケースでは「すべてのメッセージが自動的に検証されてしまう」という小さな副作用が生じてしまった。


これが今回の事件がこれほど混乱した理由だ。SolidityやMerkle Treeのような知識は一切不要だった。必要なのは有効な取引を見つけ、自分のアドレスで相手のアドレスを置き換え、それを再送信するだけだったのだ。
TechFlow公式コミュニティへようこそ
Telegram購読グループ:https://t.me/TechFlowDaily
Twitter公式アカウント:https://x.com/TechFlowPost
Twitter英語アカウント:https://x.com/BlockFlow_News














