SumerMoney 专案的sdrETH合约是Compound 的CEther合约的分叉版本,最近遭到攻击。这种攻击方式并不新鲜;攻击者利用重入漏洞来操纵包装的sdrToken和底层代币之间的汇率。
概述
攻击者地址:
https://basescan.org/address/0xbb344544ad328b5492397e967fe81737855e7e77
攻击交易: https://basescan.org/tx/0x619c44af9fedb8f5feea2dcae1da94b6d7e5e0e7f4f4a99352b6c4f5e43a4661
易受攻击的合约( sdrETH代币): https://basescan.org/address/0x7b5969bb51fa3b002579d7ee41a454ac691716dc
漏洞利用分析
攻击者先进行闪电贷,向 Balancer Vault 借入大量 150 WETH 和 645,000 USDC 。然后,他尝试将这些资产推入sdrETH和sdrUSDC合约中,以铸造相应的包装代币。
以这些资产作为抵押,攻击者试图借入sdrETH市场上所有可用的基础资产,金额约为 150 ETH。借款后,攻击者立即呼叫repayBorrowBehalf函数,偿还借入的ETH加「 1 wei 」。由于repayBorrowBehalf函数使用低阶的address.call方法将多余的金额退还给付款人,因此最终触发了重入攻击流程。利用此漏洞,攻击者可以在更新totalBorrows之前在后备函数中操纵汇率。
查看Compound文件中有关汇率的内容,我们可以看到,如果还款后totalBorrows()没有正确减少,汇率会比应有的高得多。
然后,攻击者继续借入sdrcbETH和sdrUSDC市场上的所有剩余资产。
在sdrETH市场汇率被操纵的情况下,攻击者只需要大约74个sdrETH就可以赎回自己原来的150个ETH,而sdrUSDC则正常赎回。
偿还所有贷款并完成攻击后,攻击者获利约 10 cbETH 和 310,000 USDC。
结论
Web3 开发人员在自订诸如Compound 之类的通用协定时应谨慎行事,尤其是在引入新功能或修改现有功能时。
尽管重入攻击是智慧合约中众所周知的漏洞,并且已在许多先前的专案中被利用,但它仍然是 Web3 领域的常见攻击媒介。这次攻击凸显了安全审计的重要性以及开发人员在未来专案中遵循最佳实务的必要性。







