2026 年 1 月 8 日,去中心化链下计算协议 Truebit Protocol 遭受攻击。据慢雾安全团队及其链上追踪与反洗钱工具 MistTrack 分析,攻击者获利约 8,535 ETH,按原文估值约合 2,644 万美元。
慢雾将漏洞定位于 Purchase 合约的铸造价格计算:乘法运算使用了 SafeMath,但分子中的一处加法没有溢出保护。攻击者构造特定的铸造数量,使计算结果经溢出和整数除法后变为 0,再通过铸造、销毁 TRU 提取合约的 ETH 储备。
本文依据慢雾于 2026 年 1 月 12 日 15:51:22(UTC+8)发布的分析整理,原文作者为 enze、Lisa,编辑为 77。下述事件及资金追踪结论均对应原文发布时的情况。
铸造与赎回共用的定价边界
Truebit Protocol 是一个去中心化链下计算市场,通过将复杂计算任务转移到链下执行,并借助经济激励机制保障计算结果的正确性。
其原生代币 TRU 采用算法化弹性供应机制,价格由合约内 ETH 储备量与 TRU 流通供应量的比率函数动态决定,铸造和销毁均由链上智能合约管理:
- 铸造:用户向 Purchase 合约存入 ETH,按算法价格获得 TRU。
- 销毁:用户销毁 TRU,按算法价格从合约提取 ETH。
此次攻击利用的是铸造端的价格计算错误,随后通过销毁端将异常铸造的代币兑换为合约储备中的 ETH。
漏洞为何能绕过部分 SafeMath 检查
据慢雾对 Purchase 合约的反编译分析,铸造指定数量 TRU 所需支付的 ETH,按以下公式计算:
Price = (100 * A² * R + 200 * A * R * S) / ((100 - T) * S²)
其中:
- A(AmountIn):请求铸造的代币数量。
- R(Reserve):合约当前的 ETH 储备量。
- S(Supply):代币当前的总供应量。
- T(THETA):固定为 75 的合约参数。
原文指出,该合约使用 Solidity ^0.6.10 编译。Solidity 0.8.0 之前的版本没有为原生算术运算符内置溢出检查,超出 uint256 范围的运算可能发生静默溢出。
这份合约并非完全没有保护:相关乘法使用了 SafeMath。但在分子求和时,v12 + v9 使用原生 + 运算符,没有进行溢出检查。
攻击者构造的 AmountIn 让乘法通过 SafeMath 检查,却使随后的加法结果超过 uint256 最大值 2²⁵⁶ - 1。分子溢出回绕为极小值,再经过整数除法,最终得到 Price = 0。因此,仅为部分算术运算引入 SafeMath,并未覆盖完整的价格计算路径。
攻击执行过程
慢雾列出的相关链上标识如下:
- 攻击者地址:
0x6C8EC8f14bE7C01672d31CFa5f2CEfeAB2562b50 - 攻击合约:
0x764C64b2A09b09Acb100B80d8c505Aa6a0302EF2 - 相关攻击交易:
0xcd4755645595094a8ab984d0db7e3b4aabde72a5c87c4f176a030629c47fb014
据原文分析,攻击按以下步骤展开:
- 查询异常价格。攻击者调用 Purchase 合约的
getPurchasePrice,查询铸造 240,442,509,453,545,333,947,284,131 枚 TRU 所需的 ETH。该数量触发价格计算中的整数溢出,函数返回 0。 - 零 ETH 铸造。攻击者调用铸造函数
0xa0296215,传入上述数量。由于价格被算为 0,攻击者无需支付 ETH,便铸造了相应数量的 TRU。 - 销毁并提取储备。攻击者随即调用销毁函数
0xc471b10b,销毁刚铸造的全部 TRU,从合约中兑换出 5,105.069 ETH。 - 重复铸造与销毁。原文称,随着 TRU 供应量 S 增大,后续铸造需要支付少量 ETH,但铸造所得代币的价值仍远高于成本。攻击者持续执行这一流程,直至耗尽合约的 ETH 储备。
因此,“零成本”对应首次价格归零的铸造操作;对整个攻击过程,更准确的描述是近乎零成本铸造并套利,而非每一轮都完全免费。
MistTrack 的资金追踪结果
据 MistTrack 分析,此次攻击获利约 8,535 ETH,按原文估值约合 2,644 万美元。原文称,被盗的 8,535 ETH 先转入三个新地址,最终均流入 Tornado Cash。
MistTrack 还列出了攻击者地址在事件发生前的交易记录:
- 2025 年 11 月 20 日:在 Avalanche 上通过 Drain 获得资金,再经 Rhino.fi 跨链至 BNB Chain。
- 2025 年 12 月 6 日:在 BNB Chain 上将收到的资金经 Rhino.fi 跨链至 Ethereum。
- 2025 年 12 月 27 日:在 Ethereum 上通过 RUN 获得 4.98 ETH。原文认为,这疑似与攻击者此前发起的另一起攻击有关,并记录了共 5 ETH 转入 Tornado Cash。
上述 RUN 相关交易与另一攻击的关联,在原文中属于疑似判断,并非已确认结论。截至原文发布时,MistTrack 已对相关地址进行标记。
安全启示:保护必须覆盖完整运算链
慢雾认为,此次漏洞的根本原因,是旧版 Solidity 合约在计算铸造价格时,遗漏了对分子加法的溢出保护。乘法检查能够通过,并不意味着整个公式的计算安全。
针对使用 Solidity 0.8.0 以下版本的合约,慢雾建议开发者确保所有算术运算均使用 SafeMath 保护,避免整数溢出破坏业务逻辑。在这起事件中,缺失的加法检查直接影响了代币铸造定价,并最终使合约储备被套取。
原始来源:慢雾《2644 万美元被盗背后:Truebit Protocol 合约漏洞分析》,发布于 2026 年 1 月 12 日 15:51:22(UTC+8)。