Truebit Protocol被盗2644万美元合约漏洞分析

2026-01-13 15:29:12

分享至

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协议的攻击事件近期会越来越多,所以建议项目方对合约代码能进行新的安全审计,如果发现漏洞,需尽快升级合约或者进行资产转移,并且做好链上监控,及时发现异常,把损失降到最低。

最近融资

查看更多
$5M 01-12
-- 01-12

近期发行Token

查看更多
01-26
01-21
Fogo FOGO
01-15

𝕏 最新关注

查看更多