Woo Finance被攻击事件分析 [区块链安全]
前言
2024年3月5日,Woo Finance部署在Arbitrum上的合约遭受闪电贷攻击,损失约850万美元。此前,2月23日,Woo Finance部署在Ethereum上的合约就曾被攻击,损失约3,891美元,很显然黑客团队将Woo Finance作为攻击目标进行了系统化的漏洞挖掘,非常可惜Woo Finance没有能及时对多链合约的安全性进行全面检查,没能阻止这次攻击。
一、攻击交易分析
攻击者地址:
0x9961190b258897bca7a12b8f37f415e689d281c4
攻击合约:
0x1759f791214168e0292ab6b2180da1c4cf9b764e
0xc3910dca5d3931f4a10261b8f58e1a19a13e0203
0xd4c633c9a765bc690e1fba566981c1f4eab52df0
0x66634590d7d631e3bf85ef4cd6c89ca7479e22bc
0x27a116a48c6dd23fc005ea6ea02847723d5b3856
0x2458464afec10e973ac61860718328ce8358be3a
被攻击合约:
0xeff23b4be1091b53205e35f3afcd9c7182bf3062
攻击交易:
0x57e555328b7def90e1fc2a0f7aa6df8d601a8f15803800a5aaf0a20382f21fbd
0x40e1b8c78083fc666cb7598efcecd0ae0af313fc41441386e4db716c2808ce07
0xe80a16678b5008d5be1484ec6e9e77dc6307632030553405863ffb38c1f94266
攻击流程:
1. 以第一笔攻击交易为例,攻击合约(0x1759f791)通过闪电贷借取10580749枚USDC.e代币和2704558枚WOO代币。
2. 后通过在Silo合约中抵押7000000枚USDC.e代币,借出了5092663枚WOO代币,再将2000000枚USDC.e代币兑换成了WETH。
3. 攻击合约(0x1759f791)将100000枚USDC.e兑换为173684枚WOO,并略微抬高WOO的价格。
4. 攻击合约(0x1759f791)用7856868枚WOO代币在被攻击合约(0xeff23b4b)中兑换为2246892枚USDC.e,并将合约中WOO代币的价格从578535. 在价格被更改后,攻击合约(0x1759f791)仅用0.9枚USDC.e就换出了10232908枚WOO。
5. 在价格被更改后,攻击合约(0x1759f791)仅用0.9枚USDC.e就换出了10232908枚WOO。
6. 攻击合约(0x1759f791)归还silo中借出的WOO代币提出抵押的USDC.e代币并归还闪电贷函数,最后获利559枚ETH和2549710枚WOO。
二、漏洞分析
攻击的本质是合约的价格计算式中参数可以被黑客操控,导致WOO代币的价格被操纵。被攻击合约(0xeff23b4b)中_calcQuoteAmountSellBase对价格进行计算时逻辑出现漏洞。
价格计算式中的baseAmount以及state.price都可以被操控,攻击者(0x9961190b)在第三步时抬高了一些stake.price,第四步使用大量WOO代币进行兑换,导致baseAmount参数很大,由于红框中计算的结果作为减数存在,所以当红框计算结果越大,newPrice参数越小,使得兑换结束后price值被设定为了9。价格比例严重失衡,使用极少USDC.e即可换出大量WOO代币。
三、安全建议
针针对本次攻击事件,我们在开发过程中应注意以下事项:
1. 开发者在设计价格计算式时,应严格考虑参数是否会被操控的问题。
2. 项目上线前,需要通过专业的第三方审计团队进行智能合约审计。