Dough Finance - 缺乏输入数据验证

本文为机器翻译
展示原文

2024 年 7 月 12 日,Dough Finance 遭受攻击,导致估计损失 180 万美元。 ConnectorDeleverageParaswap合约中的设计缺陷允许攻击者触发DoughDsaAave提取抵押品并将其转移给攻击者。

概述

攻击者:

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 函数:

此函数解析来自矿池合约的输入,其中包含来自攻击合约的swapDatadeloopAllCollat​​eal函数循环遍历所有攻击者有效负载并呼叫它们。矿池和连接器去杠杆合约相互信任并且在执行呼叫之前不验证使用者输入的风险很高。

请按照以下说明进行操作:

此循环中有两个任意呼叫: Vault.executeActionweth.transferFrom 。在第一个动作中,保险库:

金库合约遵循ConnectorDeleverageParaswap指令,呼叫Aave并提取596 WETH (用作抵押品的质押余额)。

在接下来的说明中, ConnectorDeleverageParaswap遵循swapData将所有金库余额转移到攻击合约。有了这些资金,攻击者就可以兑换成USDC,偿还闪贷,并获得大量的专案资产。

根本原因:

主要漏洞在于ConnectorDeleverageParaswap合约在deloopAllCollat​​​​erals函数内执行任意呼叫之前无法验证使用者输入。这种疏忽使得攻击者能够操纵金库,导致其撤回所有抵押品并将其转移到攻击者的合约中。

学过的知识

作为开发人员,必须坚持「绝不相信任何输入」的原则,即使是来自合作伙伴和支持合约的输入。特别是在任意呼叫的情况下,使用者输入可以操纵您的合约、提取资金,甚至销毁合约。

此外,强烈建议对所有专案进行全面的安全审计,无论它们涉及智慧合约、后端、钱包或去中心化应用程式(dApp)。

来源
免责声明:以上内容仅为作者观点,不代表Followin的任何立场,不构成与Followin相关的任何投资建议。
喜欢
收藏
评论
Followin logo