header-langage
简体中文
繁體中文
English
Tiếng Việt
한국어
日本語
ภาษาไทย
Türkçe
扫码下载APP

一个计算漏洞,让Truebit被盗8535枚ETH

2026-01-13 07:06
阅读本文需 6 分钟
Truebit Protocol因代币购买价格计算中的整数溢出漏洞,被攻击者通过循环调用机制反复套利,最终造成超8500 ETH的损失。
原文标题:《Truebit Protocol被盗2644万美元合约漏洞分析》
原文来源:ExVul Security


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


本文来自投稿,不代表 BlockBeats 观点。


点击了解律动BlockBeats 在招岗位


欢迎加入律动 BlockBeats 官方社群:

Telegram 订阅群:https://t.me/theblockbeats

Telegram 交流群:https://t.me/BlockBeats_App

Twitter 官方账号:https://twitter.com/BlockBeatsAsia

AI 解读
Truebit协议遭受攻击的事件本质上是一个典型的智能合约整数溢出漏洞利用案例。攻击者通过精心构造的输入参数,触发了代币购买价格计算函数中的溢出错误,从而以极低成本甚至零成本大量铸造协议代币TRU,随后立即销毁这些代币以提取池中高额ETH。整个攻击流程清晰展示了计算逻辑的致命缺陷:未对关键算术运算进行安全检查,尤其在Solidity 0.6.x版本中,编译器默认不检查整数溢出,必须依赖开发者的显式处理。

从更深层次看,这类漏洞并非孤立事件。相关文章提及的Curve、Euler Finance、Raft Finance等协议遭受的攻击,均反映出DeFi生态中长期存在的安全挑战:即便经过多次审计,协议仍可能因底层编译器缺陷、数学逻辑错误或新型攻击向量而遭受损失。Euler事件甚至表明,形式化验证等高级审计手段也无法完全覆盖“未知的未知”。攻击者正利用AI自动化扫描老旧协议,系统性挖掘可重复利用的漏洞模式,这迫使项目方必须持续进行安全维护和升级。

此类事件也凸显了DeFi乐高体系的脆弱性。一个协议的漏洞往往会引发连锁反应,影响整个生态的信心和资产安全。因此,对于项目方而言,仅依赖初始审计远远不够,需建立持续监控、应急响应和快速升级的机制。同时,社区也应推动采用更安全的开发实践,如使用最新版本的Solidity(内置溢出检查)、引入安全数学库(如OpenZeppelin的SafeMath),并对关键函数进行严格的形式化验证和模糊测试。

最终,Truebit事件再次警示:DeFi的安全是一个动态过程,而非静态状态。在追求创新和效率的同时,必须将安全视为核心基础设施,持续投入资源进行维护和加固,否则类似的计算漏洞仍将不断重演。
展开
选择文库
新增文库
取消
完成
新增文库
仅自己可见
公开
保存
纠错/举报
提交