Beosin EagleEyeによると、2023年12月7日、イーサリアムのTIME契約がハッカー攻撃の被害に遭い、攻撃者は約18万8000ドルの利益を得た。

これは普通の攻撃ではありませんでした。

発生源をたどると、2023年12月4日にthirdwebが自社のブログと公式チャンネルで脆弱性に関する勧告を発行し、「2023年11月20日、Web3スマートコントラクト用の共通オープンソースライブラリパターンの統合にセキュリティ上の脆弱性があることが判明しました。この脆弱性はThirdwebのいくつかの事前構築済みスマートコントラクトに影響を及ぼしており、当社は緩和策のために関連プロジェクトチームに連絡を取りました」と述べていることが判明しました。

12 月 7 日、イーサリアムの TIME コントラクトがこのセキュリティ問題の被害を受けた最初のプロジェクトとなりました。今日は、この攻撃の背後にある真実を明らかにしましょう。

プロトコルの背景概要

ERC2771 ネイティブ メタ トランザクション セキュリティ プロトコル:

EIP 2771 プロトコルは、受信者のコントラクトが信頼できるリレー コントラクトを通じてメタ トランザクションを受け入れるためのコントラクト レベルのプロトコルを定義します。プロトコルの変更は行われません。このプロトコルは、ガス料金を支払うための ETH を持たない外部アカウントからの呼び出しを Ethereum が受け入れることができるように設計されています。このプロトコルは、追加の呼び出しデータを付加することにより、有効な msg.sender (msgSender() と呼ばれます) と msg.data (msgData() と呼ばれます) を受信者のコントラクトに送信します。その目的は、ガス料金を支払うための ETH を持たない外部アカウントからの呼び出しを Ethereum が受け入れられるようにすることです。

特定の設計により、プロトコルで説明されている msg.sender は、_msgSender() 関数を通じて取得されます。この関数は、イニシエーターが信頼できるリレーであるかどうかを確認し、そうである場合は、トランザクションのイニシエーターとして着信コールデータの最後の 20 バイトを傍受します。

https://eips.ethereum.org/EIPS/eip-2771

Muticall バッチ処理ライブラリ:
Muticall は、単一の外部呼び出しで複数の呼び出しを処理するために OpenZeppelin Contracts によって提供される機能ライブラリです。

Time イベントから、コードベース内の Multicall() 関数が DelegateCall 関数を反復処理して Calldata を処理し、このコントラクト内の他の関数を呼び出すことがわかります。

https://github.com/OpenZeppelin/openzeppelin-contracts

TIME契約イベント情報

● 攻撃トランザクション

0xecdd111a60debfadc6533de30fb7f55dc5ceed01dfadd30e4a7ebdb416d2f6b6

● 攻撃者の住所

0xfde0d1575ed8e06fbf36256bcdfa1f359281455a

● 攻撃契約

0x6980a47bee930a4584b09ee79ebe46484fbdbdd0

● 攻撃を受けた契約

0x4b0e9a7da8bab813efae92a6651019b8bd6c0a29

TIME 契約イベントの脆弱性分析

この攻撃は主に、TIME トークンのマルチコール機能を呼び出す Forwarder コントラクトを悪用しました。TIME トークンは ERC2771 ネイティブ メタトランザクション セキュリティ プロトコルを使用しているため、攻撃者は悪意を持って _msg.sender を偽造し、ペアのトークンを破壊しました。最終的に、攻撃者は取引所を通じてトークンの価格上昇から利益を得ました。

TIME契約イベント攻撃フロー

1. 攻撃者は当初、5 WTH を使用して、準備資金として約 34.5 億 Time トークンと交換しました。

2. その後、攻撃者は署名検証を通じてフォワーダーの実行関数を呼び出し、次のように悪意のある呼び出しデータを渡しました。

3. この時点で、execute 関数は req.to アドレス (Time トークン アドレス) を呼び出し、req.data と req.from アドレスをパッケージ化し、Time トークンの multicall 関数を呼び出します。ハッカーはどのようにして req.from を破棄したのでしょうか。ハッカーは data[1] の長さ (サイズ) を 0x38 に設定し、multicall がデータを解析するときに req.from を切り捨てるようにしました。

4. マルチコール関数はバーン関数を呼び出し、呼び出し元としてペア内の Time トークンを破棄します。

5. 最後に、攻撃者はペアの同期関数を呼び出して準備金を同期させ、Time トークンの価格を上昇させました。

結局、ハッカーは準備段階で入手したTIMEトークンをETHと交換し、18万8000ドルの利益を得ました。この攻撃事件は、スマートコントラクトのセキュリティの重要性を改めて思い起こさせます。プロジェクトチームは、ブロックチェーンエコシステムの持続可能な発展とユーザーのセキュリティを確保するために、脆弱性の特定と修復の取り組みを強化する必要があります。

接触

ブロックチェーン セキュリティ サービスが必要な場合は、お気軽にお問い合わせください。

公式ウェブサイト Beosin EagleEye Twitter Telegram Linkedin