Truebit Protocolが2644万ドルを盗まれた契約の脆弱性分析
- 核心的な見解:Truebit Protocolは整数オーバーフローの脆弱性によりハッカー攻撃を受けました。
- 重要な要素:
- 約2644万ドル相当のETHを損失。
- 脆弱性の原因は旧バージョンのSolidity計算ロジックの欠陥。
- 攻撃者は巨大な数値を入力することでオーバーフローを引き起こしました。
- 市場への影響:古いDeFiプロトコルは緊急のセキュリティ監査が必要であることを警告。
- 時効性の注記:短期的な影響。
2026年1月8日、Truebit Protocolがハッキングされ、8,535.36 ETH(約2644万米ドル)が失われました。Truebit Protocol公式は翌日の未明にこれを確認する投稿を行いました。ExVulセキュリティチームは本件について詳細な脆弱性分析を実施し、その結果は以下の通りです。
攻撃の流れ
攻撃者のアドレス:
0x6c8ec8f14be7c01672d31cfa5f2cefeab2562b50
攻撃トランザクションハッシュ:
0xcd4755645595094a8ab984d0db7e3b4aabde72a5c87c4f176a030629c47fb014
攻撃者は、getPurchasePrice→0xa0296215→0xc471b10bを4回ループして呼び出すトランザクションにより攻撃を完了しました。最初のループを例に分析します。
1. 攻撃者はまずgetPurchasePrice(240442509453545333947284131)関数を呼び出し、0を返しました。

2. 攻撃者は0xa0296215(c6e3ae8e2cbab1298abaa3)関数を呼び出し、同時にmsg.valueは0でした。最終的に240442509453545333947284131枚のTRUの鋳造に成功しました。

3. 攻撃者は0xc471b10b(c6e3ae8e2cbab1298abaa3)関数を呼び出しました。最終的に240442509453545333947284131枚のTRUをバーンし、5105.06枚のETHを獲得しました。
攻撃ロジックの分析
上記の攻撃フローを理解することで、getPurchasePrice関数と0xa0296215関数のロジックに問題があることが明らかです。以下、詳細に分析を開始します(契約はオープンソースではないため、以下のコードはすべて逆コンパイルされたコードです)。


二つの関数の共通点を比較することで、0x1446関数は指定数量のTRUを購入するのに必要なETHを取得するために使用されていることがわかります。明らかに0x1446関数のロジックに問題があり、ETHの計算が誤っています。以下、0x1446関数内のロジックを詳細に分析します。

0x1446関数内のロジックを観察すると、最終的な計算結果v13 == 0であるため、上記の計算ロジックに問題が生じたことは確実です。知っておくべきは、0x18efの機能は_SafeMulと同じであるため、問題はネイティブ加算v12 + v9の使用にあります(契約バージョンは ^0.6.10であるため、オーバーフローチェックはありません)。
v12とv9は、それぞれ以下を表します:

上記の分析を通じて、攻撃者の攻撃手法は、膨大な_amountInを入力することでv12 + v9をオーバーフローさせ、非常に小さな値にし、最終的に(v12 + v9) / v6 == 0となるようにすることでした。
まとめ
今回のTruebit Protocolへの攻撃事件の根本原因は、そのトークン購入価格計算ロジックに深刻な整数オーバーフロー脆弱性が存在したことです。契約がSolidity ^0.6.10バージョンを使用しており、重要な算術演算に対するセキュリティチェックが行われていなかったため、最終的に8,535.36 ETHという重大な損失が発生しました。現在の新しいバージョンのSolidity自体はオーバーフロー脆弱性を緩和しています。この攻撃事件は、ハッカーがAIを利用して、すでに稼働している古いDeFiプロトコル(前回のBalancerやyETHへの攻撃を含む)を自動的にスキャンして発見した脆弱性を悪用したものと思われます。我々は、この種のAIを利用した古いDeFiプロトコルへの攻撃事件が近い将来さらに増加すると考えています。したがって、プロジェクト側には契約コードに対して新たなセキュリティ監査を実施し、脆弱性を発見した場合は、契約のアップグレードまたは資産の移転を迅速に行い、かつオンチェーン監視を適切に行い、異常を早期に発見して損失を最小限に抑えることを推奨します。


