北京时间 2023 年 10 月 12 日,Platypus Finance 遭受闪电贷攻击,获利约 223 万美元,目前追回 57.5 万美元。
SharkTeam 对此事件第一时间进行了技术分析,并总结了安全防范手段,希望后续项目可以引以为戒,共筑区块链行业的安全防线。
一、事件分析
攻击者地址:
0x464073F659591507d9255B833D163ef1Af5ccc2C
0x0cD4fD0EECD2c5Ad24DE7f17Ae35f9db6aC51Ee7
攻击合约:
0x4cfb527f51b391ecb1a5197edc7a38160c261b6f
0x86d6337c5b970705ab49d07c12b850a748603233
0xF2c444572A402ec83B7Cb64E4A9Fc2188F0628F2
被攻击合约:
0xC73eeD4494382093C6a7C284426A9a00f6C79939
0xA2A7EE49750Ff12bb60b407da2531dB3c50A1789
攻击交易:
0xab5f6242fb073af1bb3cd6e891bc93d247e748a69e599a3744ff070447acb20f
攻击流程:
1. 攻击者(0x0cD4fD0E)通过闪电贷借取 1100000 枚 WAVAX 和 991000sAVAX。
2. 随后将 1.1m WAVAX 存入被攻击合约(0xC73eeD44)并收到 1.1m LP-AVAX,将 330k sAVAX 存入 被攻击合约(0xA2A7EE49)并收到 330k LP-sAVAX。
3. 攻击者(0x0cD4fD0E)将剩下的 600k SAVAX 兑换为 661k WAVAX
4. 随后从被攻击合约(0xC73eeD44)中提取出 801k WAVAX,
5. 攻击者(0x0cD4fD0E)调用 swap 函数用 1.4m 的 WAVAX 兑换了 1.39m sAVAX
6. 攻击者(0x0cD4fD0E)调用 withdraw 函数提取出剩余的 80k WAVAX.
7. 然后调用 swap 函数将剩下的 700k sAVAX 兑换为了 991k 的 WAVAX
8. 随后提取出被攻击合约(0xA2A7EE49)中剩余的 330k sAVAX
9. 攻击者(0x0cD4fD0E)继续调用 swap 函数将 70k sAVAX 兑换为 76k WAVAX
10. 最后攻击者(0x0cD4fD0E)偿还闪电贷后仍剩下 111k WAVAX 和 20k 的 sAVAX,获利离场。
二、漏洞分析
被攻击合约通过 cash 和 liability 两个状态变量进行价格的计算。
攻击者(0x0cD4fD0E)在第三步中使用 sAVAX 兑换了 WAVAX,使的合约中的 cash 数量减少
随后又调用了 withdraw 函数,这时合约减少的 cash 数量和 liability 数量本应一致,但由于上一步中的 swap 函数减少了大量的 cash,合约中没有足够的 cash 用来减少,所以导致 cash 归零。
cash 归零导致 WAVAX 和 sAVAX 的比例接近,使 WAVAX 的价格升高,攻击者利用升高的价格得到了更多的 sAVAX。
攻击的根本原因是利用闪电贷操纵了影响价格的 cash 和 liability,使得 WAVAX 和 sAVAX 的价格发生了变化,攻击者实现套利。
三、安全建议
针对本次攻击事件,我们在开发过程中应遵循以下注意事项:
(1)在开发币价相关逻辑时时,严格校验是否存在价格操纵问题。
(2)推荐使用时间加权算法(twap)来进行价格的计算。
(3)项目上线前,需要通过第三方专业的审计团队进行智能合约审计。
【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。