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 万美元,被盗资金现在还在攻击者合约里。
1.借贷项目需要考虑对借贷偿还资金的检查。
2.项目上线前,建议选择专业的安全审计公司进行全面的安全审计,规避安全风险。
Beosin 作为一家全球领先的区块链安全公司,在全球 10 多个国家和地区设立了分部,业务涵盖项目上线前的代码安全审计、项目运行时的安全风险监控、预警与阻断、虚拟货币被盗资产追回、安全合规 KYT/AML 等“一站式”区块链安全产品 + 服务,目前已为全球 2000 多个区块链企业提供安全技术服务,审计智能合约超过 3000 份,保护客户资产高达 5000 多亿美元。欢迎点击公众号留言框,与我们联系。
🕹
近期热点文章阅读:
【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。