Truebit Protocolが盗まれた2644万ドルの契約脆弱性分析
2026-01-13 15:29:12
2026年1月8日、Truebit Protocolプロトコルがハッカーに攻撃され、8,535.36 ETH(約2644万ドル)の損失を被りました。Truebit Protocolの公式は翌日の早朝にこの事実を確認しました。ExVulセキュリティチームは今回の攻撃事件について詳細な脆弱性分析を行い、分析結果は以下の通りです。
攻撃プロセス
攻撃者アドレス:
0x6c8ec8f14be7c01672d31cfa5f2cefeab2562b50
攻撃取引ハッシュ:
0xcd4755645595094a8ab984d0db7e3b4aabde72a5c87c4f176a030629c47fb014
攻撃者は4回のループでgetPurchasePrice→0xa0296215→0xc471b10bを呼び出す取引を通じて攻撃を完了しました。最初のループを例に分析します。
1.攻撃者は最初にgetPurchasePrice(240442509453545333947284131)関数を呼び出し、0を返します。

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

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


2つの関数の共通点を比較することで、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プロトコルへの攻撃事件は今後ますます増加すると考えられるため、プロジェクト側には契約コードの新たなセキュリティ監査を行うことをお勧めします。脆弱性が発見された場合は、迅速に契約をアップグレードするか、資産を移転し、オンチェーン監視を行い、異常を早期に発見して損失を最小限に抑えることが重要です。
最新の速報
ChainCatcher
2026-01-17 14:19:47
ChainCatcher
2026-01-17 14:01:03
ChainCatcher
2026-01-17 13:38:49
ChainCatcher
2026-01-17 12:54:48
ChainCatcher
2026-01-17 12:45:08












