攻击事件分析|Platypus遭遇闪电贷,损失$900万

  • Ellen
  • 更新于 2023-02-20 10:22
  • 阅读 1998

2023年2月17日安全公司CertiKAlert发推:AAVE上发生一起闪电贷攻击,导致稳定币交易项目Platypus损失了900万美元的资产。

一、基本信息

2023年2月17日安全公司CertiK Alert发推:AAVE上发生一起闪电贷攻击,导致稳定币交易项目Platypus损失了900万美元的资产。

Twitter: https://twitter.com/CertiKAlert/status/1626345868151468033

分析工具:https://dashboard.tenderly.co/tx/ava/0x1266a937c2ccd970e5d7929021eed3ec593a95c68a99b4920c2efa226679b430

二、事件分析

漏洞原因

MasterPlatypusV4合约的emergencyWithdraw函数验证出现问题,在检查偿付能力是,只要借来的资产不超过借款限额就会返回true,验证通过后允许用户提取所有质押的资金。

emergencyWithdraw一般是用于紧急情况时提取质押资金。

攻击步骤分析

1.

攻击者向Platypus USDC资产(LP-USDC)存入了闪电贷获得的4400万USDC,并获得了4400万LP-USDC,然后攻击者将LP-USD存入MasterPlatypusV4。

2.

攻击者调用函数borrow()在合约platyputreasure中铸造约4170万 USP。这个金额是没有超过4400万的95%的。

3.

因为攻击者借入的资产没有超过质押资产95%的上限,所以emergencyWithdraw函数在验证偿付能力isSolvent值时返回为“true”。

image-20230217113542420.png

platypusTreasure.isSolven还有第二个返回值,是debtAmount,代表债务总额,值为41,794,533,641,783,253,909,671,999,约4179万。

这里没有验证债务总额debtAmount的值,造成只要isSolvent的返回值solvent=true就可以取出质押资产,这是漏洞产生的主要原因。

image-20230217121330189.png

4.

攻击者能够取出之前质押全部4400万枚LP-USDC,调用withdraw移除了流动性,提取出了约4399万的USDC(有手续费损耗)

偿还闪电贷,并开始通过Platypus Finance池将USP换成多种资产。

最后Platypus平台的总损失价值约为900万美元的资产。

三、总结

这起事件的漏洞在于emergencyWithdraw函数只检查了债务金额是否达到最大限额,没有检查债务总额。导致只要借入的资产没有超过质押资产95%的上限就可以取出质押的资产,并且原来的借款也没有被扣除。

  • 原创
  • 学分: 9
  • 分类: 安全
  • 标签:
点赞 1
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

1 条评论

请先 登录 后评论
Ellen
Ellen
江湖只有他的大名,没有他的介绍。