Euler Finance遭2億美元閃電貸攻擊 智能合約漏洞成禍根

robot
摘要生成中

Euler Finance遭受閃電貸攻擊,損失近2億美元

3月13日,Euler Finance項目因其智能合約存在漏洞而遭受閃電貸攻擊,造成約1.97億美元的巨額損失。這次攻擊涉及6種不同的加密貨幣代幣。

Euler Finance漏洞分析:如何遭閃電貸攻擊,損失1.97億美金!

攻擊過程分析

攻擊者首先從某借貸平台獲取了3000萬DAI的閃電貸,並部署了兩個關鍵合約:一個用於借貸操作,另一個用於清算。

隨後,攻擊者將2000萬DAI質押到Euler Protocol合約中,獲得了約1950萬eDAI。利用Euler Protocol的10倍槓杆功能,攻擊者進一步借出了1.956億eDAI和2億dDAI。

接着,攻擊者使用剩餘的1000萬DAI償還部分債務,銷毀了相應的dDAI。然後再次借出同樣數量的eDAI和dDAI。

關鍵的一步是,攻擊者利用donateToReserves函數的漏洞,捐贈了10倍於償還資金的金額,即1億eDAI。這一操作使得攻擊者能夠觸發清算機制,從而獲得3.1億dDAI和2.5億eDAI。

最後,攻擊者通過提現功能獲取了3890萬DAI,歸還了3000萬DAI的閃電貸,最終獲利約887萬DAI。

Euler Finance漏洞分析:如何遭閃電貸攻擊,損失1.97億美金!

Euler Finance漏洞分析:如何遭閃電貸攻擊,損失1.97億美金!

Euler Finance漏洞分析:如何遭閃電貸攻擊,損失1.97億美金!

Euler Finance漏洞分析:如何遭閃電貸攻擊,損失1.97億美金!

Euler Finance漏洞分析:如何遭閃電貸攻擊,損失1.97億美金!

Euler Finance漏洞分析:如何遭閃電貸攻擊,損失1.97億美金!

Euler Finance漏洞分析:如何遭閃電貸攻擊,損失1.97億美金!

Euler Finance漏洞分析:如何遭閃電貸攻擊,損失1.97億美金!

Euler Finance漏洞分析:如何遭閃電貸攻擊,損失1.97億美金!

漏洞原因分析

此次攻擊的核心漏洞在於Euler Finance的donateToReserves函數缺少必要的流動性檢查。與其他關鍵函數(如mint函數)相比,donateToReserves函數沒有調用checkLiquidity進行用戶流動性驗證。

正常情況下,checkLiquidity函數會通過調用RiskManager模塊來確保用戶的eToken數量大於dToken數量,以維持系統的安全性。然而,由於donateToReserves函數缺少這一關鍵步驟,攻擊者得以操縱自身帳戶狀態,使其符合被清算的條件,然後執行清算獲利。

Euler Finance漏洞分析:如何遭閃電貸攻擊,損失1.97億美金!

安全建議

針對此類攻擊,我們建議區塊鏈項目方:

  1. 在智能合約上線前進行全面的安全審計,尤其關注資金借貸、流動性管理和債務清算等關鍵環節。

  2. 對所有可能影響用戶資產狀態的函數實施嚴格的安全檢查,包括但不限於流動性驗證。

  3. 定期進行代碼審查和漏洞掃描,及時修復潛在的安全隱患。

  4. 建立完善的風險管理機制,設置合理的借貸限額和清算閾值。

  5. 考慮引入多重籤名或時間鎖等額外的安全措施,以防止大規模資金流失。

通過採取這些預防措施,可以顯著提高DeFi項目的安全性,降低遭受類似攻擊的風險。

EUL2.83%
查看原文
此頁面可能包含第三方內容,僅供參考(非陳述或保證),不應被視為 Gate 認可其觀點表述,也不得被視為財務或專業建議。詳見聲明
  • 讚賞
  • 7
  • 分享
留言
0/400
ServantOfSatoshivip
· 07-19 18:22
又出事故了真糟心
回復0
无情哈拉vip
· 07-19 08:53
又见合约盲区
回復0
深度DYOR达人vip
· 07-17 03:24
又是合约掉坑了
回復0
StableNomadvip
· 07-17 03:24
又一个变砖项目
回復0
闪电站岗人vip
· 07-17 03:19
又被薅走一波羊毛
回復0
just_another_fishvip
· 07-17 03:11
合约审计必不可少
回復0
大饼霸霸vip
· 07-17 02:56
又见智能合约事故了
回復0
交易,隨時隨地
qrCode
掃碼下載 Gate APP
社群列表
繁體中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)