闪电贷攻击如何防范?Avalanche链上Platypus项目损失850万美元攻击事件分析
摘要: 攻击原因是MasterPlatypusV4合约中的emergencyWithdraw函数检查机制存在问题,仅检测了用户的借贷额是否超过该用户的borrowLimitUSP(借贷上限)而没有检查用户是否归还债务的情况,造成损失约850万美元。
2023年2月17日,据区块链安全审计公司Beosin旗下BeosinEagleEye安全风险监控、预警与阻断平台监测显示,Avalanche平台的Platypus Finance遭遇闪电贷攻击,Beosin安全团队分析发现,攻击原因是MasterPlatypusV4合约中的emergencyWithdraw函数检查机制存在问题,仅检测了用户的借贷额是否超过该用户的borrowLimitUSP(借贷上限)而没有检查用户是否归还债务的情况,造成损失约850万美元。Beosin安全团队对事件进行了分析,结果如下。
#事件相关信息
攻击交易:
0x1266a937c2ccd970e5d7929021eed3ec593a95c68a99b4920c2efa226679b430
攻击者地址:
0xeff003d64046a6f521ba31f39405cb720e953958
攻击者合约地址:
0x67afdd6489d40a01dae65f709367e1b1d18a5322
#攻击流程
1.首先,攻击者通过AAVE合约闪电贷借出4400万枚的USDC,作为发起攻击的准备金。
2.接下来,攻击者把借出的4400万枚USDC存入Pool合约中,然后mint了4400万枚LP-USDC (“0xaef”),通过这一步,攻击的前置工作已经完成。
3.攻击者调用positionView来获取最大的_borrowLimitUSP,也就是可借贷的最大的USP数量,根据返回值可知攻击者一共可以借出4179万枚USP。于是攻击者调用borrow函数借出了4179万枚USP。
4.攻击者借出USP以后,立马下一步调用了EmergencyWithdraw函数。正常来说,因为之前已经借出了数量的USP代币,不应该存在可以提取的问题,但攻击者还是成功的提取出了之前的4400万枚LP-USDC。
通过进一步代码跟进我们发现在EmergencyWithdraw函数中有一个isSolvent函数来验证借贷的余额超过可借贷最大值,返回true就可以进入transfer操作,而没有考虑验证负债金额是否已经偿还的情况。所以攻击者可以在没有偿还债务的情况下直接调用成功提取出之前质押的4400万枚LP-USDC。
之后,攻击者把LP-USDC通过withdraw函数换回USDC了,然后利用获利的USP 兑换成其他稳定币,归还闪电贷后换成其他稳定币一共获利大约850万美元,被盗资金现在还在攻击者合约里。
#总结
针对本次事件,Beosin安全团队建议:
1.借贷项目需要考虑对借贷偿还资金的检查。
2.项目上线前,建议选择专业的安全审计公司进行全面的安全审计,规避安全风险。
Beosin作为一家全球领先的区块链安全公司,在全球10多个国家和地区设立了分部,业务涵盖项目上线前的代码安全审计、项目运行时的安全风险监控、预警与阻断、虚拟货币被盗资产追回、安全合规KYT/AML等“一站式”区块链安全产品+服务,目前已为全球2000多个区块链企业提供安全技术服务,审计智能合约超过3000份,保护客户资产高达5000多亿美元。
评论(0)
Oh! no
您是否确认要删除该条评论吗?