北京时间?2023?年?2?月?16?日凌晨,Avalanche?上的?DeFi?平台Platypus?Finance遭遇闪电贷攻击,被盗走约900?万美元。攻击者部署了未经验证的合约,并利用闪电贷消耗了协议中的约?900?万美元。
攻击步骤
三次攻击,我们将选择金额最大的用来解析流程:
1.攻击者将闪电贷获得的?4400?万?USDC?存入?PlatypusUSDC?池,并获得?4400?万LP-USDC。
2.攻击者将这?4400?万?LP-USDC?存入?MasterPlatypusV?4?。
3.该平台的借贷限额被设置为?95%?,这意味着攻击者最多可以用他们的?4400?万?LP-USDC?借到大约?4180?万?USP。
4.攻击者在?PlatypusTreasure?合约中调用了borrow来铸造大约?4180?万?USP。
5.由于借来的?USP?数额没有超过限额,协议的isSolvent值将总是返回?true。
6.由于isSolvent变量为?true,攻击者可以调用EmergencyWithdraw来提取其质押的?4400?万?LP-USDC?全部资金。
7.攻击者在支付了移除流动性的手续费用后,总共提取了?43,?999,?999,?921,?036USDC。
8.攻击者偿还了闪电贷款,并以多个稳定币的形式获利约?850?万美元。
2,?425,?762USDC
1,?946,?900USDC.e?
1,?552,?550USDT
1,?217,?581USDT.e
687,?369BUSD
691,?984DAI.e?
在撰写本文时,共大约?900?万美元被盗。其中攻击者部署的合约中仍有价值?850?万美元的资产;171,?000?美元在攻击者的地址;399,?400?美元在一个?Aave?池。
漏洞分析
造成该事件的漏洞在于?MasterPlatypusV?4?合约的函数emergencyWithdraw中偿付能力检查出现问题。其偿付能力检查没有考虑到用户的负债价值,而只检查了债务金额是否达到最大限额。偿付能力检查通过后,合约允许用户提取所有存入的资产。
函数platypusTreasure.isSolvent会返回两个值。第一个值是solvent,是一个决定了用户的债务金额是否低于借款限额的布尔值。第二个值debtAmount则显示用户所欠的债务金额。
如果用户的债务额不超过用户抵押物的?95%?的借款限额,那么solvent的值将为?true。
然而,在emergencyWithdraw函数中,偿付能力检查只验证了布尔值solvent,而忽略了债务金额。这意味着,如果用户的债务不超过借款限额,用户可以调用函数emergencyWithdraw来提取所有存入的抵押品。
通过安全审计,可以发现该设计缺陷问题。
本次事件的预警已于第一时间在?CertiK?官方推特进行了播报。欢迎大家随时关注?CertiK?官方推特,获取更多与漏洞、黑客袭击以及?RugPull?相关的社群预警信息。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。