2026/4/17 10:08:00
网站建设
项目流程
网站建设 视频,wordpress 数据库空间,学校网站开发实际意义,.网站建设风险20260109#xff0c;ETH 链上的 TRU 协议遭受了黑客攻击#xff0c;损失约 2600 万美元。漏洞原因是计算购买 TRU 代币所需要的 ETH 数量的计算公式设计存在缺陷#xff0c;购买大量 TRU 代币时会因为精度丢失而得到 0 值#xff0c;使得攻击者可以以 0 ETH 购买大量的 TRU…20260109ETH 链上的 TRU 协议遭受了黑客攻击损失约 2600 万美元。漏洞原因是计算购买 TRU 代币所需要的 ETH 数量的计算公式设计存在缺陷购买大量 TRU 代币时会因为精度丢失而得到 0 值使得攻击者可以以 0 ETH 购买大量的 TRU 代币最后抛售完成获利。TXhttps://app.blocksec.com/explorer/tx/eth/0xcd4755645595094a8ab984d0db7e3b4aabde72a5c87c4f176a030629c47fb014Trace 分析黑客调用 buyTRU() 函数以零成本购入大量的 TRU 代币然后调用 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% 的一个比例。/* by 01022.hk - online tools website : 01022.hk/zh/jianfan.html */ function TRUtoETH(uint256 TRUAmount) private view returns (uint256) { uint256 totalSupply TRU.totalSupply(); // numerator: (100 - 75) * totalSupply² 25 * totalSupply² uint256 numerator (100 - _setParameters) * totalSupply * totalSupply; // denominator: 100 * TRUAmount * _reserve * (TRUAmount 2 * totalSupply) uint256 denominator 100 * TRUAmount * _reserve * (TRUAmount 2 * totalSupply); return numerator / denominator; }由上面的代码分析可得当 _setParameterstotalSupply 和 _reserve 为固定值时传入的参数 TRUAmount 越大分母就越大返回值就会相应的变小。而当分母大于分子时由于 solidity 精度丢失的特性返回值将会为 0。也就是说当 TRUAmount 的值非常大当前的计算公式在计算所需要提供的 ETH 数量时会由于 solidity 的精度丢失返回 0 值。这样攻击者就完成了攻击的第一个步骤以零或极低成本的价格购买 TRU 代币。随后就是正常使用 sellTRU() 函数卖出所有 TRU 代币完成了获利。