闪电贷攻击+业务逻辑漏洞:Platypus Finance事件分析
作者: 日期:2023年02月24日 阅:2,517

北京时间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)需要向第三方专业的审计团队寻求技术帮助

申明:本文系厂商投稿收录,所涉观点不代表安全牛立场!


相关文章