# Euler Finance項目遭受閃電貸攻擊,損失近2億美元2023年3月13日,Euler Finance項目因合約漏洞遭受閃電貸攻擊,損失高達1.97億美元。攻擊者利用了項目合約中donateToReserves函數缺少流動性檢查的漏洞,通過多次操作獲取了巨額利潤。## 攻擊過程分析1. 攻擊者首先從某借貸平台閃電貸借入3000萬DAI,並部署了兩個合約:借貸合約和清算合約。2. 攻擊者將借來的2000萬DAI質押到Euler Protocol合約中,獲得19.5萬個eDAI。3. 利用Euler Protocol的10倍槓杆功能,攻擊者借出了195.6萬個eDAI和200萬個dDAI。4. 攻擊者使用剩餘的1000萬DAI償還部分債務,銷毀了相應的dDAI,隨後再次借出同等數量的eDAI和dDAI。5. 關鍵步驟:攻擊者調用donateToReserves函數,捐贈了100萬eDAI,隨後通過liquidate函數清算,獲得310萬dDAI和250萬eDAI。6. 最後,攻擊者提取了38.9萬DAI,歸還了30萬DAI的閃電貸,最終獲利8.87萬DAI。## 漏洞原因此次攻擊的核心漏洞在於Euler Finance合約中的donateToReserves函數缺少必要的流動性檢查。與其他關鍵函數如mint相比,donateToReserves函數沒有執行checkLiquidity操作。這導致攻擊者能夠繞過正常的流動性檢查,人爲制造可被清算的狀態,然後完成清算獲利。正常情況下,checkLiquidity函數會調用RiskManager模塊,確保用戶的Etoken數量大於Dtoken數量,以維持合約的安全性。然而,由於donateToReserves函數缺少這一關鍵步驟,攻擊者得以利用這一漏洞進行攻擊。## 安全建議針對此類攻擊,我們建議區塊鏈項目方:1. 在合約上線前進行全面的安全審計,確保合約的安全性。2. 對於借貸類項目,需特別關注資金償還、流動性檢測和債務清算等關鍵環節。3. 確保所有可能影響用戶資產狀態的函數都包含必要的安全檢查,如流動性檢查。4. 定期進行代碼審查和更新,及時修復發現的漏洞。5. 建立應急響應機制,以便在發生安全事件時能夠迅速反應和處理。通過採取這些措施,項目方可以大大降低遭受類似攻擊的風險,提高合約的整體安全性。
Euler Finance遭閃電貸攻擊 近2億美元損失
Euler Finance項目遭受閃電貸攻擊,損失近2億美元
2023年3月13日,Euler Finance項目因合約漏洞遭受閃電貸攻擊,損失高達1.97億美元。攻擊者利用了項目合約中donateToReserves函數缺少流動性檢查的漏洞,通過多次操作獲取了巨額利潤。
攻擊過程分析
攻擊者首先從某借貸平台閃電貸借入3000萬DAI,並部署了兩個合約:借貸合約和清算合約。
攻擊者將借來的2000萬DAI質押到Euler Protocol合約中,獲得19.5萬個eDAI。
利用Euler Protocol的10倍槓杆功能,攻擊者借出了195.6萬個eDAI和200萬個dDAI。
攻擊者使用剩餘的1000萬DAI償還部分債務,銷毀了相應的dDAI,隨後再次借出同等數量的eDAI和dDAI。
關鍵步驟:攻擊者調用donateToReserves函數,捐贈了100萬eDAI,隨後通過liquidate函數清算,獲得310萬dDAI和250萬eDAI。
最後,攻擊者提取了38.9萬DAI,歸還了30萬DAI的閃電貸,最終獲利8.87萬DAI。
漏洞原因
此次攻擊的核心漏洞在於Euler Finance合約中的donateToReserves函數缺少必要的流動性檢查。與其他關鍵函數如mint相比,donateToReserves函數沒有執行checkLiquidity操作。這導致攻擊者能夠繞過正常的流動性檢查,人爲制造可被清算的狀態,然後完成清算獲利。
正常情況下,checkLiquidity函數會調用RiskManager模塊,確保用戶的Etoken數量大於Dtoken數量,以維持合約的安全性。然而,由於donateToReserves函數缺少這一關鍵步驟,攻擊者得以利用這一漏洞進行攻擊。
安全建議
針對此類攻擊,我們建議區塊鏈項目方:
在合約上線前進行全面的安全審計,確保合約的安全性。
對於借貸類項目,需特別關注資金償還、流動性檢測和債務清算等關鍵環節。
確保所有可能影響用戶資產狀態的函數都包含必要的安全檢查,如流動性檢查。
定期進行代碼審查和更新,及時修復發現的漏洞。
建立應急響應機制,以便在發生安全事件時能夠迅速反應和處理。
通過採取這些措施,項目方可以大大降低遭受類似攻擊的風險,提高合約的整體安全性。