北京时间2023年2月17日凌晨,雪崩上的DeFi平台鸭嘴兽金融(Platypus Finance)遭到闪电贷款攻击,约850万美元被盗。SharkTeam第一时间对此事件进行了技术分析,并总结了安全注意事项。希望后续项目能引以为戒,为区块链行业筑起一道安全防线。
一、事件分析攻击者地址:0x 67 afdd 6489d 40 a 01 DAE 65f 709367 E1 B1 D18A 5322
雪崩攻击交易:0x 1266 a 937 C2 CCC d 970 e5d 7929021 eed 3c 593 a 95 c 68 a 99 b 4920 C2 EFA 226679 b430。
攻击过程:
1.首先,攻击者(0x67AfDD64)通过闪电向Aave借了4400万USDC。然后,所有借入的美元债券都存入USDC池,并获得相同数量的LP-美元债券。
2.攻击者(0x67AfDD64)将44,000,000 LP-USDC存入MasterPlatypusV4合同,合同地址为0xc 007 f 27 b 757 a 782 c 833 c 568 f 5851 AE 1 dfee 0 E6 EC 7。
3.此时鸭嘴兽金融平台抵押比例为4.92%,攻击者(0x67AfDD64)抵押44000,100.592104 LP-USDC,借款41,794,533.64 USPs。
4.因为攻击者(0x67AfDD64)通过抵押LP-USDC借入的USP金额没有超过平台限制(95%),所以master platypusv 4 . emergency withdraw函数中的isSolvent变量始终为真。因此,攻击者(0x67AfDD64)可以提取抵押的LP-USDC。
5.攻击者(0x67AfDD64)在移除流动性后成功提取了43,999,999 LP-USDC。
6.攻击者通过交换方法获得多个稳定的硬币。
7.最后,攻击者偿还了闪电贷款,总利润约为850万美元。
漏洞原因:
(masterplatypusv4中isSolvent变量的值。emergencywdrawfunction始终为true。
(2)在鸭嘴兽宝(0x BCD 6796177 ab 8071 f 6a 9 ba 2c 32e 0301 e 91 bef 5)契约中,isSolvent函数进一步调用内部封装函数_isSolvent。
(3)在_ issolved函数中,溶剂的值来自debta amount=_ borrowlimitusp(_ user,_ token)。DebtAmount是贷款金额,而_borrowLimitUSP是贷款限额。因此,溶剂是不变的。
截至2023年2月17日16时,攻击者的钱包中有多种稳定的硬币,金额约为850万美元。
事件摘要:
这件事的根本原因在于鸭嘴兽V4。紧急提现功能,在检查还款时不考虑用户的借款债务明细,而是直接检查用户的债务是否达到借款限额。只要检查通过,用户就可以提取所有资产。
二、安全建议对于此次事件,合约开发者在开发时可能没有充分考虑业务逻辑的安全性。为了构建安全的智能合约,我们需要考虑其业务逻辑的安全性。在处理业务逻辑时,我们应该遵循以下操作要求:
(1)如果使用低级调用方法,请确保通过检查返回值来处理调用失败的可能性。
(2)函数接收参数时,需要验证输入的数据属性是否安全正确。
(3)在业务设计过程中,要保证业务的严谨性和完整性以及经济模型的正确性。
(4)需要寻求第三方专业审计团队的技术帮助。
来自https://www.aqniu.com/vendor/93941.html