ゼロ タイム テクノロジー | Nomad クロスチェーン ブリッジが盗まれた 1 億 8000 万ドルのイベント分析

 

0x1 イベントの背景

Zero Hour Technology のブロックチェーン セキュリティ インテリジェンス プラットフォーム監視ニュース、北京時間 2022 年 8 月 2 日、クロスチェーン ソリューションの Nomad がハッキングされました。WETH、WBTC、および USDC は、毎回 100 万ドルの頻度で送金されますが、まだ 1 億 2,600 万ドルがリスクにさらされている可能性があります。Zero Hour Technology のセキュリティ チームは、このセキュリティ インシデントをタイムリーに分析します。

0x2 攻撃情報

  • 部分攻撃トランザクション

USDC を転送します。

0x811a54270e38154c30e65bdb8ee484883f5a9659dd16f1a335f9ff8f7eee342f転送WETH

0x12efbc03ecc8d56ebbadd637dbfc30c0d709b463e2c831034233427dfaecf777 転送 FRAX

0xc78bc10c77ca92693513e5b97b4a0063167ca8488b019f6b740bc9f8cad103bf 転送 CQT

0x8c65b2b25be2c929d86f1fb556aa0b981bd54c2ad54d8de63d3876c4c833293e 転送 DAI

0x5304e01a4cb926523f681bc34a8b71a1dfae35b5a5159f78aecc7f685f42422c 転送カード

  • 攻撃された契約

0xB92336759618F55bd0F8313bd843604592E27bd8 レプリカ

0x3 攻撃分析

上記の攻撃トランザクションの分析から、攻撃者はこのトランザクションで Nomad:ERC20 Bridge から資金を転送するために同じプロセスを 10 回実行しました。

 各呼び出しプロセスで Replica.process() メソッドが呼び出され、渡されるパラメーターは基本的に同じです。唯一の違いは、その時点でコントラクト アドレスが生成されることです。

 

Replica.process() メソッドのフォローアップ

 

ここの process メソッドのコメントでは、このメソッドが受信メッセージに許容可能なマークル ルートが含まれているかどうかを確認し、メッセージが証明されていない場合はフォールバックすることは明らかです。ここでの主な判断は185行目です。

 

ここで渡されるパラメータは0x000...000で、その後に判定方法acceptableRoot()が続きます。

 

上記の判定では、最初の 2 つの if 判定条件が満たされないため、受信した _root はゼロですが、レプリカ コントラクトの LEGACY_STATUS_PROVEN と LEGACY_STATUS_PROCESSED はゼロに設定されていません。

次の判定条件において、_time が 0 の場合、結果は false、つまり、acceptableRoot メソッドの戻り値が true になる可能性は 1 つだけです。 、初期化時に値に 1 が割り当てられます。初期化のために 0x000...000 が渡され、結果から実行が成功した可能性があります。

 

レプリカ コントラクトの初期化パラメーターのフォローアップを続けてください。

 

41 日前、プラットフォーム担当者がコントラクトを展開した後、初期化操作を実行しましたが、ここの初期化コンテンツはすべて 0 です。この時点で、初期化によって 0x000..000 のマークル ルートが受け入れ可能なルートとして割り当てられるため、デフォルトですべてのメッセージが証明書を通過し、Nomad ブリッジ ファンドが転送されることは明らかです。

0x4 攻撃コア

Replica.initialize

 

レプリカ コントラクトが初期化されたときに _committedRoot がゼロ値で渡されたため、後続のコントラクトの confirmAt[0x000...000] はすべて true です。process メソッドでは、判定条件を直接渡すことができるため、各メッセージはデフォルトで有効であることが証明され、誰でも構築されたメッセージを送信して資金を移動できます。

0x5 まとめと提案

Nomad ではこれまでに 1 億 8,000 万米ドル以上が送金されました.この攻撃によると、コントラクト デプロイヤーは、コントラクトを初期化するときに受信パラメーターに特定の値を割り当てず、すべてゼロの値を渡したため、契約の一部の判断では 条件は常に true であり、誰でも建設メッセージを送信することで資金を転送できます.

安全アドバイス

  • デフォルトのゼロパスされたパラメーターによって引き起こされるコントラクトのリスクを回避するために、コントラクトの初期化時に受信パラメーターに特定の値を割り当てることをお勧めします
  • 契約開発者は、監査レポートのリスク プロンプトを厳密に確認して、リスク コンテンツの過失によって引き起こされる契約リスクを回避することをお勧めします。

おすすめ

転載: blog.csdn.net/m0_37598434/article/details/126158841