Euler Finance遭1.97億美元閃電貸攻擊 donateToReserves函數漏洞成禍因

robot
摘要生成中

Euler Finance漏洞事件分析:閃電貸攻擊導致1.97億美元損失

2023年3月13日,Euler Finance項目遭遇了一次重大安全事件。根據鏈上監控數據顯示,由於Etoken中的donateToReserves函數存在流動性檢查漏洞,項目遭受了閃電貸攻擊。攻擊者通過多次操作不同幣種,最終造成了高達1.97億美元的巨額損失,涉及6種代幣。目前,這筆資金仍然留存在攻擊者的帳戶中。

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

攻擊過程分析

  1. 攻擊者首先從某借貸平台獲取了3000萬個Dai的閃電貸,隨後部署了兩個合約:一個用於借貸,另一個用於清算。

  2. 攻擊者將借來的2000萬Dai質押到Euler Protocol合約中,獲得了約1950萬個eDAI。

  3. 利用Euler Protocol的10倍槓杆功能,攻擊者借出了1.956億個eDAI和2億個dDAI。

  4. 攻擊者使用剩餘的1000萬DAI償還部分債務並銷毀相應的dDAI,隨後再次借出1.956億個eDAI和2億個dDAI。

  5. 關鍵步驟:攻擊者調用donateToReserves函數,捐贈了10倍於償還資金的金額,即1億eDAI。緊接着,攻擊者觸發清算函數,獲得了3.1億dDAI和2.5億eDAI。

  6. 最後,攻擊者提取了3890萬Dai,歸還了3000萬的閃電貸,最終獲利約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億美金!

漏洞成因分析

此次攻擊的核心問題出在donateToReserves函數上。與其他關鍵函數(如mint函數)相比,donateToReserves函數缺少了一個至關重要的步驟:checkLiquidity。

checkLiquidity函數的作用是調用RiskManager模塊,對用戶進行檢查,確保Etoken大於Dtoken,從而保證用戶的流動性狀況。正常情況下,每次操作都需要進行這項檢查。然而,donateToReserves函數缺少這一步驟,導致攻擊者可以先將自己置於可被清算的狀態,然後完成清算操作。

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

安全建議

針對此類漏洞,我們建議項目方在上線前務必進行全面的安全審計,以確保合約的安全性。對於借貸類項目,尤其需要重點關注以下幾個方面:

  1. 資金償還機制的完整性
  2. 流動性檢測的全面性
  3. 債務清算流程的安全性

只有通過嚴格的安全審核和全面的風險評估,才能最大程度地降低類似安全事件的發生概率,保障項目和用戶的資金安全。

EUL-0.09%
查看原文
此頁面可能包含第三方內容,僅供參考(非陳述或保證),不應被視為 Gate 認可其觀點表述,也不得被視為財務或專業建議。詳見聲明
  • 讚賞
  • 3
  • 分享
留言
0/400
空投碰瓷哥vip
· 08-05 08:04
又割又割 天天被割
回復0
DeFi安全卫士vip
· 08-05 08:04
*叹气* 又一天,又一个协议因为基本的 donateToReserves 漏洞而被重创……老实说,我几个月前就说过了。关键提醒:永远要对流动性检查进行清理,真是的。这些业余的错误持续让我们损失九位数,真让人无奈。
查看原文回復0
瓦斯烧烤大师vip
· 08-05 07:50
哥这基础防御都不过关 真菜
回復0
交易,隨時隨地
qrCode
掃碼下載 Gate APP
社群列表
繁體中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)