
根据 NUMEN 链上监控显示,Jun-07-2023 04:14:11 AM +UTC, Ethereum 链上 Compounder Finance 项目由于流动性池中比例可通过调用方法更新发生变化,导致兑换资金数量出现波动从而遭到攻击,损失 27,147 枚 DAI,价值约 27,147 美元。
目前被盗资金暂未移动。
攻击者地址:
etherscan.io/address/0x0e816b0d0a66252c72af822d3e0773a2676f3278
攻击者合约地址:
etherscan.io/address/0x2d7973177d594237a9b347cd41082af4cbb40f2b
被攻击合约:etherscan.io/address/0xaf274e912243b19b882f02d731dacd7cd13072d0
由于流动性池中比例发生变化,导致兑换资金数量出现波动。
1.最初,攻击者通过 Uniswap V3 闪电贷借入 123.9 万枚 DAI。
然后攻击者抵押了 20 万枚 DAI 和 100 万枚 DAI,分别获得了 134 万枚 cDAI 和 88 万枚 yDAI。
2.攻击者将 88 万枚 yDAI 分别兑换成 5 万 yDAI 以及 4.1 万枚 yUSDC。他们还将 16 万枚 yDAI 转换为 9.4 万枚 yTUSD,将 67 万枚 yDAI 转换为48,693,900 亿枚 yUSDT。
3.随后,攻击者将 134 万 cDAI 解除质押,并立即调用 StrategyDAICurve 存款,这里会将当前合约所有的 DAI 存入并且将 yDAI 添加流动性,这一步改变了交易对平衡。4.攻击者将之前的三笔兑换(yDAI 分三笔兑换为 4.1 万 yUSDC,9.4 万 yTUSD,48,693,900 亿枚 yUSDT)按照原路径兑换:- 4.1 万 yUSDC 兑换成 75 万 yDAI(兑换获利 70 万 yDAI)
- 9.4 万 yTUSD 兑换成 10 万 yDAI(兑换亏损 6 万 yDAI)
- 48,693,900 亿 yUSDT 兑换成 5.1 万 yDAI(兑换亏损 62 万 yDAI)
- 共计 90 万 yDAI,比兑换之前的 88 万枚获利 2 万 yDAI。
5.最后,在提现过程中,攻击者释放了质押中累计的 91 万枚 yDAI,从而提现了 103 万枚 DAI。在偿还闪电贷和手续费后,攻击者获利 27,147 枚 DAI。
更新流动性时需要考虑两种代币的数量是否处于正常比例,避免直接更新池子中单个币种数量,导致兑换资金数量出现波动从而被操控。
此外,代码上线前应做好全面的安全审计。

https://github.com/NumenCyberhttps://twitter.com/@numencyberhttps://medium.com/@numencyberlabshttps://www.linkedin.com/company/numencyber/