{"content":{"title":"攻击事件分析｜Platypus遭遇闪电贷，损失$900万","body":"# 一、基本信息\r\n\r\n2023年2月17日安全公司CertiK Alert发推：AAVE上发生一起闪电贷攻击，导致稳定币交易项目Platypus损失了900万美元的资产。\r\n\r\nTwitter: https://twitter.com/CertiKAlert/status/1626345868151468033\r\n\r\n分析工具：https://dashboard.tenderly.co/tx/ava/0x1266a937c2ccd970e5d7929021eed3ec593a95c68a99b4920c2efa226679b430\r\n\r\n\r\n\r\n# 二、事件分析\r\n\r\n## 漏洞原因\r\n\r\nMasterPlatypusV4合约的`emergencyWithdraw`函数验证出现问题，在检查偿付能力是，只要借来的资产不超过借款限额就会返回true，验证通过后允许用户提取所有质押的资金。\r\n\r\nemergencyWithdraw一般是用于紧急情况时提取质押资金。\r\n\r\n## 攻击步骤分析\r\n\r\n### 1.\r\n\r\n攻击者向Platypus USDC资产(LP-USDC)存入了闪电贷获得的4400万USDC，并获得了4400万LP-USDC，然后攻击者将LP-USD存入MasterPlatypusV4。\r\n\r\n### 2.\r\n\r\n攻击者调用函数`borrow()`在合约platyputreasure中铸造约4170万 USP。这个金额是没有超过4400万的95%的。\r\n\r\n### 3.\r\n\r\n因为攻击者借入的资产没有超过质押资产95%的上限，所以`emergencyWithdraw`函数在验证偿付能力`isSolvent`值时返回为“true”。\r\n\r\n![image-20230217113542420.png](https://img.learnblockchain.cn/attachments/2023/02/QbAMR8so63ef0693a2383.png)\r\n\r\n而`platypusTreasure.isSolven`还有第二个返回值，是`debtAmount`,代表债务总额，值为41,794,533,641,783,253,909,671,999，约4179万。\r\n\r\n**这里没有验证债务总额`debtAmount`的值，造成只要`isSolvent`的返回值`solvent=true`就可以取出质押资产，这是漏洞产生的主要原因。**\r\n\r\n![image-20230217121330189.png](https://img.learnblockchain.cn/attachments/2023/02/M50oiG9M63ef069eeaee4.png)\r\n\r\n### 4.\r\n\r\n攻击者能够取出之前质押全部4400万枚LP-USDC，调用withdraw移除了流动性，提取出了约4399万的USDC(有手续费损耗)\r\n\r\n偿还闪电贷，并开始通过Platypus Finance池将USP换成多种资产。\r\n\r\n最后Platypus平台的总损失价值约为900万美元的资产。\r\n\r\n# 三、总结\r\n\r\n**这起事件的漏洞在于`emergencyWithdraw`函数只检查了债务金额是否达到最大限额，没有检查债务总额。导致只要借入的资产没有超过质押资产95%的上限就可以取出质押的资产，并且原来的借款也没有被扣除。**"},"author":{"user":"https://learnblockchain.cn/people/10936","address":null},"history":null,"timestamp":1676609309,"version":1}