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相關的任何投資建議。
喜歡
收藏
評論