零时科技 || SumerMoney 攻击事件分析
2024-04-16 11:36
零时科技
2024-04-16 11:36
订阅此专栏
收藏此文章


背景介绍


我们监控到 base 链上的一起攻击事件,

https://basescan.org/tx/0x619c44af9fedb8f5feea2dcae1da94b6d7e5e0e7f4f4a99352b6c4f5e43 a4661

攻击者通过此次攻击共获利310570 USDC10 cbETH,共约合35 万美金


被攻击项目为SumerMoney,SumerMoney 是一个基于 Compond 修改的借贷协议,用户可以通过提供流动性来获利。SumerMoney 共支持的 underlying assets 有 ETH, USDC, USDbc, DAI, wstETH, cbETH, suUSD, suETH。其中,每一个 underlying asset 对应一个借贷池 poll。用户可以通过和借贷池 poll 交互来完成对应的操作。



攻击及事件分析


首先,攻击者通过攻击合约 1 从 Balancer 中利用 flashloan 借了645000 USDC 150 ETH



随后,攻击合约 1 创建了另一个攻击合约(攻击合约 2),并将 Balancer 中借来的645000 USDC 转入新的攻击合约 2 中,并转入了1 wei



接着,在攻击合约 2 的攻击函数中,攻击者将645000 USDC通过mint 兑换为643630 sdrUSDC

随后,攻击者再通过 borrow 从 sdrETH pool 中借出 150.358797170664290045 ETH 。并向 sdrETH pool 中转入150.358797170664290046 ETH执行 repayBorrowBehalf 进行还款。

repayBorrowBehalf 的具体实现如下:



我们可以看到,合约会将超出总借款的部分再转回给用户。由于,sdrETH pool 收到了150.358797170664290046 ETH ,但是只借出了150.358797170664290045 ETH ,所以会将0.000000000000000001 ETH再转给攻击合约 2。由于接到了 ETH 转账,攻击合约 2 触发了fallback函数,fallback 函数中又调用了攻击合约 1,再次进行 borrow 和 redeemUnderlying 。



我们注意到,攻击者 redeem 150 ETH 只需要74.99998941541294 sdrETH(本应是 150 sdrETH )。



接下来,我们看一下合约是如何计算sdrTokenunderlying token的兑换比例。



由上面的公式,我们可以知道兑换的 underlying token 为对应的 sdr token 除以 exchangRate 。由下面的公式同样可以知道exchangeRate的计算方式。



其中totalCash是由以下函数计算



那么,漏洞其实就比较明显了。mint 、 borrow 、 redeem 、 repay 这些操作均应该是原子操作。但是,repayBorrowBehalf出现了一个重入漏洞,攻击者通过构造一个特殊的金额( borrowsAmount + 1 wei )。sdrETH 将多余的1 wei重新发送给攻击者合约,从而触发了攻击合约 2 的fallback函数,在 fallback 函数中(在 ETH 转入时,exchangeRate 已经增长了 1 倍,攻击者手中的 sdrToken 的价值增加了一倍),攻击者进行重入攻击,调用借贷函数,借出了其他资产。最后,还清 SumerMoney 和 Balancer 的借贷,攻击完成。




END


往期回顾

· 零时科技 ||《2022 年全球 Web3 行业安全研究报告》正式发布!

· 零时科技 || 分布式资本创始人 4200 万美金资产被盗分析及追踪工作

· 零时科技 || 警惕恶意聊天软件!聊天记录被劫持损失数千万资产追踪分析

· 零时科技联合创始人黄鱼先生受邀对话《Web3 应用创新与生态安全》

· 零时科技创始人邓永凯先生受邀对话《公链隐私保护及生态安全》

· 国家网络安全宣传周|零时科技出版国内首本区块链安全书籍,助力行业发展!



点击阅读全文 立刻直达官网

     /www.noneage.com/    


【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。

零时科技
数据请求中
查看更多

推荐专栏

数据请求中
在 App 打开