2024 年 7 月 12 日,Dough Finance 遭受攻击,导致估计损失 180 万美元。 ConnectorDeleverageParaswap合约中的设计缺陷允许攻击者触发DoughDsa从Aave提取抵押品并将其转移给攻击者。
概述
攻击者:
https://etherscan.io/address/0x67104175fc5fabbdb5a1876c3914e04b94c71741
脆弱合约:
https://etherscan.io/address/0x9f54e8eAa9658316Bb8006E03FFF1cb191AafBE6
交易攻击:
https://etherscan.io/tx/0x92cdcc732eebf47200ea56123716e337f6ef7d5ad714a2295794fdc6031ebb2e
漏洞利用分析
交易完成后,攻击者在Aave中检查了Vault的债务余额,并从Balancer闪贷了USDC以偿还Vault 。
然后,该交易呼叫ConnectorDeleverageParaswap ,透过 swapData 中的特定操作来触发闪贷请求。
连接器从池中启动闪贷并在executeOperation函数中处理回应。
深入研究ConnectorDeleverage合约中的executeOperation 函数:
此循环中有两个任意呼叫: Vault.executeAction和weth.transferFrom 。在第一个动作中,保险库:
金库合约遵循ConnectorDeleverageParaswap指令,呼叫Aave并提取596 WETH (用作抵押品的质押余额)。
在接下来的说明中, ConnectorDeleverageParaswap遵循swapData将所有金库余额转移到攻击合约。有了这些资金,攻击者就可以兑换成USDC,偿还闪贷,并获得大量的专案资产。
根本原因:
学过的知识
作为开发人员,必须坚持「绝不相信任何输入」的原则,即使是来自合作伙伴和支持合约的输入。特别是在任意呼叫的情况下,使用者输入可以操纵您的合约、提取资金,甚至销毁合约。