20260109–TRU协议攻击事件分析:买得够多免费送了喂!

admin 2026-04-16 04:42:07 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 2026年1月9日Truebit协议因智能合约计算公式缺陷遭受黑客攻击,损失约2600万美元。漏洞源于0.6.10版本Solidity缺乏溢出保护机制,攻击者通过传入特定TRU代币数量触发计算上溢出,使购买所需ETH归零,随后抛售获利。建议智能合约开发需采用新版Solidity并加强算术运算安全审计。 综合评分: 86 文章分类: 漏洞分析,区块链安全,智能合约安全,应急响应,威胁情报


cover_image

20260109 – TRU 协议攻击事件分析:买得够多免费送了喂!

原创

ACaiSec ACaiSec

ACai Note

2026年1月12日 22:32 广东

在小说阅读器读本章

去阅读

背景

20260109,ETH 链上的 Truebit Protocol 遭受了黑客攻击,损失约 2600 万美元。漏洞原因是计算购买 TRU 代币所需要的 ETH 数量的计算公式设计存在缺陷,购买大量 TRU 代币时会因为 0.6.10 版本没有防溢出机制而发生上溢出得到 0 值,使得攻击者可以以 0 ETH 购买大量的 TRU 代币,最后抛售完成获利。

  • TX:https://app.blocksec.com/explorer/tx/eth/0xcd4755645595094a8ab984d0db7e3b4aabde72a5c87c4f176a030629c47fb014

Trace 分析

  1. 黑客调用 buyTRU() 函数以零成本购入大量的 TRU 代币
  2. 然后调用 sellTRU() 函数卖出所有 TRU 代币完成获利

随后攻击者利用漏洞以零或极低成本的价格购买 TRU 代币后出售的流程重复多次。

代码分析

TRU 合约是一个代理合约:0x764C64b2A09b09Acb100B80d8c505Aa6a0302EF2

其具体的逻辑逻辑合约为:0x18ceDF1071EC25331130C82D7AF71D393Ccd4446

由于逻辑合约并没有开源,所以接下来会采用 dedaub 反编译 + 人工校正的方式分析项目的业务逻辑。

  • 逻辑合约的反编译地址:https://app.dedaub.com/ethereum/address/0xc186e6f0163e21be057e95aa135edd52508d14d3/decompiled

在 buyTRU() 函数中,会根据输入的 TRUAmount 参数值计算所需要的 ETH 数量,并检查 msg.value 的值是否为相等。通过检查后,会给用户 mint TRUAmount 数量的 TRU 代币。

其问题就出在计算 ETH 数量的 TRUtoETH() 函数上,其反编译的内容如下,根据输入的 TRUAmount 值进行一系列的计算。

通过 solidity 重写这个函数,得到以下的内容。其中 _setParameters 的值为 75,代表 75% 的一个比例。

    function TRUtoETH(uint256 amount) private view returns (uint256) {
        uint256 totalSupply = token.totalSupply();

        // numerator: 100 * reserve * amount * (amount + 2 * totalSupply)
        uint256 numerator = 100 * reserve * amount * (amount + 2 * totalSupply);

        // denominator: (100 - theta) * totalSupply²
        uint256 denominator = (100 - theta) * totalSupply * totalSupply;

        return numerator / denominator;
    }

由上面的代码分析可得,当 _setParameters,totalSupply 和 _reserve 为固定值时,传入的参数 amount 越大,返回值应该会相应增大。

但是,这个合约采用的是 0.6.10 版本的 solidity,没有防溢出保护。

所以,当传入 amount 的值经过 100 * reserve * amount * (amount + 2 * totalSupply) 的计算后刚好可以触发上溢出时,会使得 numerator 的值为 0。

这样,攻击者就完成了攻击的第一个步骤:以零或极低成本的价格购买 TRU 代币。

随后就是正常使用 sellTRU() 函数卖出所有 TRU 代币完成了获利。


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:ACai Note ACaiSec ACaiSec《20260109 – TRU 协议攻击事件分析:买得够多免费送了喂!》

评论:0   参与:  0