返回部落格

#2:Euler Finance事件:2023年最大規模的駭客攻擊

Code Auditing
2024年2月9日
閱讀約 6 分鐘

2023年3月13日,我們的系統偵測到 Euler Finance 的借貸池遭受閃電貸攻擊,損失達1.97億美元。我們首先向社群發出警報,隨後提供了分析報告,以協助找出根本原因。

此次事件的根本原因在於 donateToReserves() 函式中缺乏償債能力檢查。具體而言,該漏洞合約提供了一項功能,允許用戶將其抵押品捐贈給協議,卻未檢查用戶頭寸是否具備償債能力。更糟糕的是,為了清除這些不良頭寸,協議為清算人提供了大幅折扣,使其只需支付較少的債務即可完成清算。攻擊者利用此功能建立了一個龐大頭寸,並使其陷入資不抵債的狀態,從而得以折價購回自己的抵押品並從中獲利。

背景

Euler Finance 概述

Euler Finance 是以太坊上的一個借貸協議,允許用戶存入和借出指定代幣。當貸款人向 Euler 的流動性池存款時,系統會鑄造相應數量的 EToken(計息 ERC20 代幣)並發送給他們。這些 EToken 可用於贖回所存入的基礎資產。

另一方面,借款人在獲得流動性後會收到 DToken。這些 DToken 符合 ERC20 標準,但持有人無法自行銷毀它們。具體來說,這些代幣並非允許發送給任何人,而是可以被任何人提取,但接受它們需要事先批准。就基礎資產而言,借款人須負責支付貸款利息,其中一部分利息用於彌補協議上的壞帳。

Euler Finance 的槓桿借款(又稱自我借款)機制與軟清算機制,是兩個幫助我們更好理解此次攻擊成因的關鍵概念。

槓桿借款

Euler Finance 提供槓桿借款功能,使用戶能夠模擬遞迴借款策略。簡單來說,用戶可以存入抵押品並鑄造 EToken,這些 EToken 隨後可作為抵押品再借入更多 EToken。合約同時也會鑄造相應數量的 dToken 作為債務代幣。用戶頭寸的健康狀況根據 EToken 與 dToken 的價值計算。根據 Euler Finance 的文件說明,用戶最高可使用19倍槓桿。槓桿借款功能在此次事件中扮演了關鍵角色——若無此功能的協助,攻擊者將無法獲利。透過槓桿借款,攻擊者將其頭寸規模擴大至閃電貸初始資金的近11倍。

軟清算

如 Euler Finance 的白皮書所述,軟清算機制使清算人能夠靈活地幫助被清算方償還債務,而非像 Compound 和 Aave 等協議採用固定係數進行清算。軟清算意味著頭寸的健康狀況越差,可被清算的抵押品比例越高——根據此次事件的數據,在發生壞帳的情況下最高可達75%。因此,以大幅折扣清算抵押品的機制,使攻擊者得以償還閃電貸並獲取利潤。

漏洞分析

主要漏洞——即缺乏償債能力檢查——存在於 donateToReserves() 函式中,該函式用於讓用戶將其頭寸中的 EToken 作為捐贈轉移至協議的儲備金。對於一般用戶而言,通常沒有執行此操作的動機或誘因。事實上,此漏洞的關鍵在於 donateToReserves() 函式在將 EToken 從用戶頭寸中轉出時,並未執行健康狀況檢查。這使得攻擊者可以直接將透過槓桿借款所建立的大型頭寸中的 EToken 捐出,導致該頭寸的健康因子降至100%以下,進而形成壞帳。

根據設計,Euler Finance 使用動態平倉因子對頭寸執行「軟清算」。簡言之,頭寸的健康狀況越差,該頭寸中可被清算的抵押品比例越高。在發生壞帳的情況下,清算比例最高可達頭寸內抵押品的75%(根據實際攻擊交易計算得出)。因此,被大幅折價清算的大量抵押品,使攻擊者得以償還閃電貸並從中獲利。

攻擊分析

此次攻擊針對不同資金池發起了多筆攻擊交易:

  • 0xc310a0affe2169d1f6feec1c63dbc7f7c62a887fa48795d327d4d2da2d6b111d(DAI)
  • 0x71a908be0bef6174bccc3d493becdfd28395d8898e355d451cb52f7bac38617(WBTC)
  • 0x62bd3d31a7b75c098ccf28bc4d4af8c4a191b4b9e451fab4232258079e8b18c4(wstETH)
  • 0x465a6780145f1efe3ab52f94c006065575712d2003d83d85481f3d110ed13d9(USDC)
  • 0x3097830e9921e4063d334acb82f6a79374f76f0b1a8f857e89b89bc58df1f311(stETH)
  • 0x47ac3527d02e6b9631c77fad1cdee7bfa77a8a7bfd4880dccbda5146ace4088f(WETH)

攻擊步驟如下(以第一筆攻擊交易為例):

  1. 攻擊者透過 AAVE 閃電貸借入3000萬 DAI。
  2. 攻擊者存入2000萬 DAI,並獲得2000萬 eDAI。
  3. 由於 Euler Finance 提供槓桿借款功能,攻擊者鑄造了1.95億 eDAI 和2億 dDAI。此時攻擊者持有2.15億 eDAI 和2億 dDAI。
  4. 接續上步驟,攻擊者償還了1000萬債務,以便鑄造更多 eDAI。此時攻擊者持有2.15億 eDAI 和1.9億 dDAI。
  5. 重複步驟3。此時攻擊者持有4.1億 eDAI 和3.9億 dDAI。
  6. 攻擊者呼叫 donateToReserve 函式捐出1億 eDAI,然而在此過程中並未檢查攻擊者的健康因子。此時該頭寸已可被清算(3.1億 eDAI 對應3.9億 dDAI),從而為攻擊者創造了獲利機會。
  7. 攻擊者透過另一個地址合約作為清算人(0xa0b3...)對該頭寸進行清算。清算人(0xa0b3...)獲得3.1億 eDAI 和2.59億 dDAI。
  8. 攻擊者在清算人頭寸(0xa0b3...)中銷毀3890萬 eDAI,提取3890萬 DAI(因償債能力檢查而無法提取更多)。
  9. 攻擊者償還閃電貸。

關鍵攻擊步驟2至7已在交易追蹤圖中標註。

總結

這是2023年規模最大的駭客事件,創紀錄地盜取了1.97億美元資金,犯案者是一名20歲的阿根廷人 Federico Jaime,他向媒體提供了「一個迂迴曲折、有時令人困惑甚至自相矛盾的說法」。儘管如此,「所有可追回的資金」後來均已歸還至 Euler Finance 的國庫地址。然而,有一小部分資金(約20萬美元)被「無意中」轉入 Lazarus Group——一個被指控為受北韓國家支持、並遭美國財政部制裁的犯罪集團。您可以參閱以下連結,即link2和link2,以了解這個詳細而有趣的故事。

此次事件的根本原因在於缺乏償債能力檢查,這為我們提供了深刻的教訓。事實上,對於借貸協議而言,評估是否應針對任何可能影響用戶頭寸的操作實施頭寸健康狀況檢查至關重要。此外,項目團隊應主動監控其借貸協議中的重大清算活動,並建立有效的警報系統,以便及時偵測和應對此類事件。

閱讀本系列其他文章:

訂閱最新動態
Bitget 3.875億美元鏈下違規事件:超越金鑰與合約的範疇
Security Insights

Bitget 3.875億美元鏈下違規事件:超越金鑰與合約的範疇

2026年9月24日,攻擊者利用第三方安全產品漏洞,獲取內部憑證並偽造提款指令,導致約3.875億美元從Bitget部分營運錢包(涵蓋Ethereum、其他EVM網絡、XRP Ledger、Zcash及TRON)轉出;私鑰及冷錢包未受影響。本文深入梳理事件路徑與資金流向,分析快速轉換為原生資產及生態恢復應對,提出機構縱深防禦框架,並說明授權區塊鏈滲透測試如何驗證跨層假設。

約1130萬美元損失:Multicall Router、Nostra|BlockSec Weekly
Security Insights

約1130萬美元損失:Multicall Router、Nostra|BlockSec Weekly

本報告涵蓋2026/09/14至2026/09/20期間,探討以太坊與Starknet上兩起合計損失約1130萬美元的安全事件。較大一起中,多重呼叫路由器將自身位址接受為分派目標,導致巢狀呼叫以路由器自身已授權身分而非外部呼叫者身分進入Safe錢包的Gateway模組,約2900枚`aEthrsETH`被轉出至攻擊者建立的Uniswap v4池。在Starknet上,Nostra預言機整合僅要求最少一個聚合來源,當三個設定價格來源中僅兩個達成聚合時,操縱的薄池報價與正常報價平均後將`NSTR`估值約49.52美元,支撐約350萬美元以高估抵押品借貸。

损失約3.2億美元:Liquid Network與Symbiosis遭攻擊事件 | BlockSec
Security Insights

损失約3.2億美元:Liquid Network與Symbiosis遭攻擊事件 | BlockSec

本報告涵蓋2026/09/07至2026/09/13,探討兩起造成約3.2億美元損失的安全事件,包括前份報告未提及、發生於2026/09/06的Liquid Network漏洞事件。較大者為該Liquid Network漏洞:Elements中的rangeproof驗證快取藉由雜湊四個欄位(其中兩個長度可變)串接而成金鑰,且未標示欄位邊界,導致某輸出的驗證結果被錯誤套用至另一個未經檢驗證明的輸出,使攻擊者得以憑空創造4,000枚無擔保L-BTC,並將幾乎全數兌回比特幣。在橫跨BNB Smart Chain、Ethereum與Rootstock的Symbiosis跨鏈橋比特幣路徑中,讀取比特幣存款的鏈下程式碼從存款人可自行控制的欄位取得其身份,並在未檢查手續費是否為負值的情況下自存款中扣除,使330聰的存款鑄造出`46,116,860,184.27388234 syBTC`;其須賣出所經之資金池僅有11.26 syBTC,致使流動性提供者與用戶損失約9.97 BTC(約77萬美元)。

Web3 最佳安全審計方

在上線之前驗證設計、程式碼與業務邏輯,對標業內最高安全標準。

BlockSec 審計
#2:Euler Finance事件:2023年最大規模的駭客攻擊