SharkTeam
- 关注
北京时间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)项目上线前,需要通过第三方专业的审计团队进行智能合约审计。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)