Truebit Protocol被盜2644萬美元合約漏洞分析
2026年1月8日,Truebit Protocol協議被黑客攻擊,損失8,535.36 ETH(約2644萬美元),Truebit Protocol官方於次日凌晨發文證實。 ExVul安全團隊對本次攻擊事件進行了詳細的漏洞分析,分析結果如下:
攻擊流程攻擊者地址:
0x6c8ec8f14be7c01672d31cfa5f2cefeAB2562b50
攻擊交易hash:
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函數的邏輯存在問題。 下面開始深入分析(由於合約未開源,下面的代碼均為反編譯代碼)。


通過比較兩個函數的共同點,我們可以發現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協議的攻擊事件近期會越來越多,所以建議項目方對合約代碼能進行新的安全審計,如果發現漏洞,需盡快升級合約或者進行資產轉移,並且做好鏈上監控,及時發現異常,把損失降到最低。