北京时间2023年2月17日凌晨,Avalanche 上的 DeFi平台Platypus Finance遭遇闪电贷攻击,被盗走约850 万美元。SharkTeam第一时间对此事件进行了技术分析,并总结了安全防范手段,希望后续项目可以引以为戒,共筑区块链行业的安全防线。

一、事件分析

攻击者地址:0x67AfDD6489D40a01DaE65f709367E1b1D18a5322


(资料图)

Avalanche攻击交易:0x1266a937c2ccd970e5d7929021eed3ec593a95c68a99b4920c2efa226679b430

攻击流程:

1.首先,攻击者(0x67AfDD64)通过闪电贷方式,从Aave上贷了44,000,000个USDC。然后,将所贷的USDC全部存入USDC池中,同时获得相等数量的LP-USDC。

2.攻击者(0x67AfDD64)将44,000,000个LP-USDC存入MasterPlatypusV4合约,合约地址为:0xc007f27b757a782c833c568f5851ae1dfe0e6ec7。

3.此时Platypus Finance平台抵押比率为4.92%,攻击者(0x67AfDD64)将44,000,100.592104个LP-USDC抵押并且借得41,794,533.64个USP。

4.由于攻击者(0x67AfDD64)抵押LP-USDC借来的USP数额没有超过平台的限额(95%),MasterPlatypusV4. emergencyWithdraw函数中的isSolvent变量总是为true。因此,攻击者(0x67AfDD64)可以提取抵押的LP-USDC。

5.攻击者(0x67AfDD64)移除流动性后,成功提取43,999,999个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、Huobi Global、imToken、ChainIDE等建立长期合作关系。

Twitter:https://twitter.com/sharkteamorg

Discord:https://discord.gg/jGH9xXCjDZ

Telegram:https://t.me/sharkteamorg

更多区块链安全咨询与分析,点击下方链接查看

D查查|链上风险核查https://app.chainaegis.com

推荐内容