Truebit協議合約漏洞分析
2026 年 1 月 8 日,Truebit Protocol 協議遭駭客攻擊,損失高達 8,535.36 ETH(約 2,644 萬美元),官方於隔日凌晨發文證實此事件。ExVul 安全團隊針對此次攻擊進行深入的漏洞分析,結果如下:
攻擊流程
駭客地址:
0x6c8ec8f14be7c01672d31cfa5f2cefeab2562b50
攻擊交易 hash:
0xcd4755645595094a8ab984d0db7e3b4aabde72a5c87c4f176a030629c47fb014
攻擊者透過連續四輪調用 getPurchasePrice → 0xa0296215 → 0xc471b10b 的交易完成攻擊,以下以第一輪為例說明。
1. 攻擊者首先調用 getPurchasePrice(240442509453545333947284131) 函數,返回值為 0。

2. 接著調用 0xa0296215(c6e3ae8e2cbab1298abaa3) 函數,msg.value 為 0,成功鑄造出 240,442,509,453,545,333,947,284,131 枚 TRU 代幣。

3. 最後調用 0xc471b10b(c6e3ae8e2cbab1298abaa3) 函數,銷毀上述數量的 TRU 代幣,並提領出 5,105.06 枚 ETH。
漏洞成因分析
從攻擊流程可明顯看出,getPurchasePrice 與 0xa0296215 函數之間存在邏輯缺陷。由於合約未開源,以下分析基於反編譯後的程式碼。


兩函數共用 0x1446 函數來計算購買指定數量 TRU 所需的 ETH 數量。然而該函數在計算過程中存在整數溢出漏洞,導致所需支付的 ETH 被錯誤計算為極低甚至為零。

進一步分析發現,0x1446 函數最終結果 v13 為 0,問題根源在於 v12 + v9 的加法運算未進行溢出檢查(合約使用 Solidity ^0.6.10 版本,該版本不自動防範溢出)。其中 0x18ef 函數功能等同於 _SafeMul,因此問題出現在原生加法操作上。
v12 與 v9 分別代表:

攻擊者透過輸入極大的 _amountIn 參數,使 v12 + v9 發生整數溢出,變為一個極小值,進而導致 (v12 + v9) / v6 的結果為 0,實現以接近零成本鑄造大量 TRU 代幣的目的。
總結與建議
本次 Truebit Protocol 遭攻擊的根本原因,在於其代幣價格計算邏輯中存在嚴重的整數溢出漏洞。由於合約採用舊版 Solidity(^0.6.10)且未對關鍵算術運算加入安全檢查機制,最終導致價值逾 2,600 萬美元的資產損失。現今新版 Solidity 已內建溢出保護,可有效降低此類風險。
此類攻擊顯示,駭客正利用 AI 技術自動掃描已上線的老舊 DeFi 協議,尋找未修補的漏洞(如先前 Balancer 與 yETH 攻擊案例)。預期未來類似事件將持續增加。建議項目方盡速對現有合約進行安全性審計,若發現漏洞應立即升級合約或轉移資產,同時加強鏈上監控機制,及早發現異常行為,將潛在損失降至最低。
