# Euler Finance遭遇閃電貸攻擊,損失近2億美元2023年3月13日,Euler Finance項目因智能合約漏洞遭受閃電貸攻擊,造成約1.97億美元的重大損失。攻擊者利用了合約中donateToReserves函數缺少流動性檢查的漏洞,通過多次操作完成了攻擊。## 攻擊過程分析攻擊者的主要步驟如下:1. 從某借貸平台閃電貸借入3000萬DAI,並部署了借貸和清算兩個合約。2. 將2000萬DAI質押到Euler Protocol合約中,獲得1950萬eDAI。3. 利用Euler Protocol的10倍槓杆功能,借出1.956億eDAI和2億dDAI。4. 用剩餘1000萬DAI償還部分債務,銷毀相應dDAI,隨後再次借出同等數量的eDAI和dDAI。5. 通過donateToReserves函數捐贈1億eDAI,然後調用liquidate函數進行清算,獲得3.1億dDAI和2.5億eDAI。6. 最後提取3890萬DAI,歸還3000萬閃電貸,淨利潤約887萬DAI。## 漏洞原因攻擊的核心在於Euler Finance合約中donateToReserves函數缺少必要的流動性檢查。與其他關鍵函數(如mint)相比,donateToReserves函數未調用checkLiquidity進行用戶流動性驗證。這使得攻擊者能夠通過特定操作使自己處於可被清算的狀態,然後完成清算獲利。正常情況下,checkLiquidity函數會調用RiskManager模塊,確保用戶的Etoken始終大於Dtoken,以維持合約的安全性。然而,donateToReserves函數跳過了這一重要步驟,導致了嚴重的安全漏洞。## 教訓與建議此次事件再次強調了智能合約安全審計的重要性。對於借貸類項目,需要特別關注以下幾個關鍵方面:1. 資金償還機制的完整性2. 流動性檢測的全面性3. 債務清算流程的安全性項目方在上線前應進行全面的安全審計,確保合約的每個功能都經過嚴格的安全檢查。同時,持續的安全監控和漏洞賞金計劃也是保障項目長期安全的有效措施。此外,開發者應該注意函數間的一致性,確保關鍵的安全檢查(如流動性檢查)在所有相關函數中都得到正確實施。這不僅包括主要功能,還應涵蓋輔助功能如捐贈等。最後,建議項目方和開發者保持對新興攻擊手法的警惕,定期更新安全策略,以應對不斷演變的區塊鏈安全威脅。
Euler Finance遭閃電貸攻擊 損失近2億美元
Euler Finance遭遇閃電貸攻擊,損失近2億美元
2023年3月13日,Euler Finance項目因智能合約漏洞遭受閃電貸攻擊,造成約1.97億美元的重大損失。攻擊者利用了合約中donateToReserves函數缺少流動性檢查的漏洞,通過多次操作完成了攻擊。
攻擊過程分析
攻擊者的主要步驟如下:
從某借貸平台閃電貸借入3000萬DAI,並部署了借貸和清算兩個合約。
將2000萬DAI質押到Euler Protocol合約中,獲得1950萬eDAI。
利用Euler Protocol的10倍槓杆功能,借出1.956億eDAI和2億dDAI。
用剩餘1000萬DAI償還部分債務,銷毀相應dDAI,隨後再次借出同等數量的eDAI和dDAI。
通過donateToReserves函數捐贈1億eDAI,然後調用liquidate函數進行清算,獲得3.1億dDAI和2.5億eDAI。
最後提取3890萬DAI,歸還3000萬閃電貸,淨利潤約887萬DAI。
漏洞原因
攻擊的核心在於Euler Finance合約中donateToReserves函數缺少必要的流動性檢查。與其他關鍵函數(如mint)相比,donateToReserves函數未調用checkLiquidity進行用戶流動性驗證。這使得攻擊者能夠通過特定操作使自己處於可被清算的狀態,然後完成清算獲利。
正常情況下,checkLiquidity函數會調用RiskManager模塊,確保用戶的Etoken始終大於Dtoken,以維持合約的安全性。然而,donateToReserves函數跳過了這一重要步驟,導致了嚴重的安全漏洞。
教訓與建議
此次事件再次強調了智能合約安全審計的重要性。對於借貸類項目,需要特別關注以下幾個關鍵方面:
項目方在上線前應進行全面的安全審計,確保合約的每個功能都經過嚴格的安全檢查。同時,持續的安全監控和漏洞賞金計劃也是保障項目長期安全的有效措施。
此外,開發者應該注意函數間的一致性,確保關鍵的安全檢查(如流動性檢查)在所有相關函數中都得到正確實施。這不僅包括主要功能,還應涵蓋輔助功能如捐贈等。
最後,建議項目方和開發者保持對新興攻擊手法的警惕,定期更新安全策略,以應對不斷演變的區塊鏈安全威脅。