返回部落格

透過利用 Flashbots Relay 漏洞捕獲 MEV 機器人

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

2023 年 4 月,一名攻擊者利用 Flashbots 中繼器(Relay)中存在的漏洞攻擊了多個 MEV 機器人,獲利約 2,000 萬美元。此攻擊的根本原因在於,私人交易在特定條件下可能會洩漏到公共交易池中,而攻擊者可以透過「搶跑」(backrun)洩漏的交易來獲利。我們還注意到攻擊中使用了幾種精密技術,例如使用蜜罐(honeypot)交易來攻擊受害者,以及在攻擊合約中加入自我保護機制。

背景

Flashbots

正如其官網所述,Flashbots 是一個「研究與開發組織,旨在減輕最大可提取價值(MEV)對狀態區塊鏈造成的負面外部性,並以以太坊作為起點」。Flashbots 涉及多個不同的實體,包括搜尋者(searchers)、建構者(builders)和中繼器(relays)。下圖展示了它們之間的關係。

圖片來源:Flashbots 文件

PBS(提議者-建構者分離)協議允許區塊提議者將其區塊空間出售給多個建構者(因為他們被選中來建構區塊),以最大化利潤。具體來說,多個搜尋者監聽內存池(mempool)中的交易並產生交易包(bundles),隨後提交給建構者。建構者聚合來自搜尋者的交易包,建立最有價值的區塊,然後將其提交給中繼器。中繼器將區塊提交給區塊提議者,即已被選中為某個 epoch 間隙(slot)建構區塊的驗證者。

在這種架構下,中繼器是建構者和提議者雙方信賴的一方,而這兩者之間互不信任。它確保提議者在簽署區塊標頭之前無法取得區塊內容,並確保提議者能獲得相應的費用。

建議讀者參考 Flashbots 文件以了解詳細架構。我們只需要記住中繼器必須提供的安全保證:如果區塊尚未上鏈,中繼器不得向提議者洩露區塊內容。否則,惡意的提議者可能會利用洩露的區塊內容來獲利(如本次攻擊所示)。

三明治攻擊(Sandwich Attack)

三明治攻擊是指攻擊者將一筆交易置於目標交易的前後,藉此獲利。我們透過一個例子來說明。

假設有一個擁有 WETH 和 USDC 兩種代幣的去中心化交易所(DEX)池。一位用戶提交了一個將 WETH 兌換為 USDC 的請求。該交換交易將進入內存池並被 MEV 機器人(例如一個搜尋者)獲取。隨後,機器人會發出兩筆交易,一筆在用戶的交換交易之前,另一筆在之後。

具體來說,機器人的第一筆交易是使用 WETH 兌換 USDC,這會推高 USDC 的價格。接著,用戶的交換交易隨之執行(由於第一筆交易導致 USDC 價格上漲,用戶獲得的 USDC 會變少)。之後,機器人的第二筆交易將 USDC 換回 WETH,這能比機器人的第一筆交易換回更多的 WETH。

圖片來源:Liyi Zhou 等人的論文《去中心化鏈上交易所的高頻交易》。

搶跑(Backrunning)

搶跑是一種在大額交易後立即執行交易的策略。搶跑主要利用大額交易對代幣價格產生的影響所帶來的套利機會。例如,如果用戶在 DEX 池中進行了大額兌換(將 WETH 換為 USDC),這可能導致 USDC 在該交易所的價格高於其他交易所。搶跑機器人可以立即捕捉到這個套利機會,以較低的價格將 USDC 換回 WETH 以獲取更多 WETH,然後再將 WETH 賣到其他 DEX 池中賺取利潤。

漏洞

正如事故分析報告中所述,該漏洞存在於中繼器的代碼中。即使簽署的區塊標頭無效(簽名本身是有效的),它也會將建構者的區塊內容洩露給(惡意的)提議者。在這種情況下,提交給信標鏈的無效區塊標頭和區塊內容將被拒絕,而提議者可以搶先提交自己的區塊,並利用洩露的區塊內容獲利。

攻擊過程

攻擊者是惡意的提議者,受害者是打算進行三明治交易的 MEV 機器人。

讓我們以一筆真實的攻擊交易為例。

區塊 16964664
位置 0 受害者交易:0xd2edf726fd3a7f179c | Phalcon Explorer (blocksec.com) MEV 機器人使用 2454.1 WETH 兌換 4.5 STG
位置 1 攻擊交易:0x4b2a2d03b3dc136ef9 | Phalcon Explorer (blocksec.com) 攻擊者使用 158 STG 兌換 2454.1 WETH

受害交易和攻擊交易分別位於區塊 16964664 的位置 0 和 1。基本上,受害者(MEV 機器人)進行了一筆大額交易,在 Uniswap WETH-STG 池中使用 2454.1 WETH 兌換 4.5 STG。這製造了一個巨大的套利機會,攻擊者隨後使用 158 STG 抽乾了池中的所有 WETH。

問題是,為什麼受害者(MEV 機器人)願意在池中使用 2,454 WETH(價值約 500 萬美元)去兌換僅 4.5 個 STG 代幣(價值約 3 美元)?請注意,當受害者執行此交換時,該池中的流動性非常低(0.005 WETH 和 4.5 STG)。

我們的分析顯示,有兩個原因促使 MEV 機器人執行如此荒謬的交換:

首先,攻擊者使用了一筆蜜罐交易來引誘受害者發送這筆交換交易,從而進行三明治攻擊。該蜜罐交易的雜湊值為 0xd534c46ba5a444e886 | Phalcon Explorer (blocksec.com)。具體來說,攻擊者在 16964664 區塊之前廣播了一筆將 WETH 兌換為 STG 的交易。由於池中流動性極低,這為 MEV 機器人製造了一個進行三明治攻擊的機會。如下圖所示,MEV 機器人可以建立一個包含三筆交易的三明治攻擊包。

其次,MEV 機器人使用了一種貪婪的三明治策略,並利用 Flashbots 發送此交易。為了最大化利潤,交易包中的第一筆交易試圖抽乾幾乎所有的 STG 代幣(使用 2,454 WETH)。這是一種非常貪婪的策略,用了 500 萬美元(2,454 WETH)僅為了獲得約 700 美元(0.35 WETH)的利潤——比例高達 7,000:1。該機器人預設除非交易被提交上鏈,否則不會被公之於眾。然而,由於中繼器的漏洞,這一假設被打破了。利用這一點,攻擊者建立了一個新的交易包,其中包含了機器人原本的三明治攻擊交易,並增加了一筆搶跑交易來奪取那 2,454 WETH。

BlockSec Twitter 上的圖表展示了整個攻擊過程。

自我保護機制

我們知道攻擊者發送蜜罐交易,透過將 WETH 兌換為 STG 來引誘受害者。但是,如果沒有三明治交易來利用這個蜜罐交易怎麼辦?在這種情況下,攻擊者會監控池的狀態並執行反向兌換,以保護其 0.35 Ether,這是一步非常聰明的操作。以下是執行蜜罐交易的智慧合約(0xe73f1576af5573714404a2e3181f7336d3d978f9)的反編譯代碼。

為了驗證我們的發現,我們在 Phalcon Fork 中模擬了這筆蜜罐交易,將其置於區塊 16964664 的位置 0。

總結

這是首個利用 Flashbots 中繼器漏洞並結合精密攻擊策略的攻擊案例。

  • 首先,此次攻擊利用了 Flashbots 中繼器中的一個零日漏洞。
  • 其次,它利用了貪婪的三明治策略,並使用蜜罐交易引誘 MEV 機器人(受害者)。
  • 第三,它包含了一套自我保護機制,在攻擊未成功時挽回蜜罐交易的成本(0.35 WETH)。

閱讀本系列的其他文章:

訂閱最新動態
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 審計