一、事件分析 攻击者详细地址:0x67AfDD6489D40a01DaE65f709367E1b1D18a5322 Avalanche攻击交易:0x1266a937c2ccd970e5d7929021eed3ec593a95c68a99b4920c2efa226679b430 攻击步骤: 1. 首先,攻击者(0x67AfDD64)使用闪电贷从Aave借入了4400万个USDC。然后,将要借入的USDC全部存入USDC池,并获得相同数量的LP-USDC代币。 2. 攻击者(0x67AfDD64)将4400万个LP-USDC代币存入MasterPlatypusV4合约,合约详细地址为:0xc007f27b757a782c833c568f5851ae1dfe0e6ec7。 3. 此时,PlatypusFinance服务平台的抵押比例为4.92%,攻击者(0x67AfDD64)抵押了4400万个LP-USDC代币并借入了4179.45万个USP代币。 4. 因为攻击者(0x67AfDD64)借入的USP数量没有超过平台的额度(95%),MasterPlatypusV4合约中的emergencyWithdraw函数中的isSolvent参数始终为true。因此,攻击者(0x67AfDD64)能够取回抵押的LP-USDC代币。 5. 攻击者(0x67AfDD64)清空了流动性,成功取回了4399.99万个LP-USDC代币。 6. 攻击者利用swap方式获得了多种稳定币。 7. 最终,攻击者偿还了闪电贷,并获得了约850万美元的利润。
系统漏洞原因: (1)MasterPlatypusV4合约中的emergencyWithdraw函数中的isSolvent参数始终为true。 (2)在PlatypusTreasure(0xbcd6796177ab8071f6a9ba2c3e2e0301ee91bef5)合约中,isSolvent函数进一步调用了内部封装形式的函数_isSolvent。 (3)在_isSolvent函数中,solvent的值取决于debtAmount是否小于等于_borrowLimitUSP(_user,_token)。其中,debtAmount指借款额度,_borrowLimitUSP指借款额度。因此,solvent始终为true。 截至2023年2月17日16时,攻击者钱包中持有多种稳定币,金额约为850万美元。
事情总结: 此次事件的直接原因在于MasterPlatypusV4合约中的emergencyWithdraw函数,在核对偿还时并未考虑用户借款债务的具体情况,而是通过检查用户负债是否达到借款额度。只要满足条件,攻击者就能获取所有资产。
二、安全建议 针对此类情况,合约开发者在研发时很可能未能充分考虑领域模型的安全性。为了构建安全的智能合约,我们应该考虑以下实际操作规定: (1)当调用低级别的方法时,请确保对传入参数进行检查以处理调用失败的可能性。 (2)在接收主要参数时,验证输入数据属性的可靠性和准确性。 (3)在业务设计过程中,确保业务的精确性、完整性和投资模型的正确性。 (4)如有需要,可寻求第三方专业的财务审计团队提供技术协助。
About Us SharkTeam致力于维护Web3全球的安全性。我们的精英团队由来自全国各地的资深安全专业人员和高级科研人员组成,熟悉区块链智能合约的底层基础理论,提供专业的智能合约财务审计、链上分析、应急处理等服务。我们已与Polkadot、Moonbeam、polygon、OKC、HuobiGlobal、imToken、ChainIDE等区块链生态系统的重要参与者建立了长期合作伙伴关系。 Twitter:https://twitter.com/sharkteamorg Discord:https://discord.gg/jGH9xXCjDZ Telegram:https://t.me/sharkteamorg 大量区块链安全咨询和分析,请点击以下链接查询 链上风险审查:https://app.chainaegis.com 转载:驼鸟区块链