根據 LI.FI 專案發布的報告以及 Daniel Von Fange 的 Twitter,我們注意到 LI.FI 在 2022 年 3 月 20 日遭受了攻擊。由於目前尚無針對此漏洞的詳細技術分析,我們在下方對該攻擊進行了進一步分析。我們發現此次攻擊的根本原因在於未經檢查的外部呼叫 (unchecked external call)。
攻擊交易
我們以該攻擊交易為切入點來闡述攻擊過程。下圖顯示了我們交易視覺化系統的結果。

如上圖所示,整個攻擊過程相當簡單,過程中沒有部署任何惡意智慧合約,也沒有涉及閃電貸 (flashloan)。 攻擊者僅採取了的一個步驟:呼叫 CBridgeFacet 合約 中的 swapAndStartBridgeTokensViaCBridge(0x01c0a31a) 函式,隨後該函式便將各種代幣(例如 USDC、MATIC、RPL、GNO、USDT、MVI、AUDIO、AAVE、JRT 及 DAI)從不同的授權者轉移至該攻擊者控制的 EOA 帳戶中。
程式碼分析
接著我們深入分析受害邏輯合約的程式碼。


根據上述程式碼,swapAndStartBridgeTokensViaCBridge 是來源鏈上跨鏈交易的入口。

LIFI 專案聲稱他們可以為用戶找到最佳路由,這被稱為發生在鏈下的「智慧路由 (Smart Routing)」。具體而言,前端網頁會計算出最佳路由,並將參數(包括交換合約與路由路徑)編碼到 swapAndStartBridgeTokensViaCBridge 函式的參數中。
顯然,LIFI 專案並未考慮到該函式可能會被區塊鏈上的任何帳戶所呼叫,因為該函式未對參數執行任何檢查(例如白名單限制或交換滑點限制)。最嚴重的是,CBridgeFacet 合約要求用戶授權代幣,這導致了用戶的資金面臨風險。
獲利情況
結果就是,攻擊者透過呼叫 swapAndStartBridgeTokensViaCBridge 函式,竊取了已將代幣授權給 CBridgeFacet 合約的 LIFI 用戶資金;該函式隨後呼叫了不同代幣的 transferFrom 函式。損失統計如下表所示。總損失約為 59.6 萬美元,這與 LIFI 專案提供的統計數據基本一致。
| 代幣 | 數量 | 價格 |
|---|---|---|
| GNO | 0.94 | 310.22 |
| USDC | 202,012.28 | 0.999655 |
| MATIC | 3,144.89 | 1.46 |
| AUDIO | 1,202.37 | 1.10 |
| AAVE | 8.99 | 149.99 |
| RPL | 44.86 | 31.2 |
| MVI | 22.95 | 131.82 |
| USDT | 368,745.29 | 1 |
| DAI | 8,421.49 | 0.999847 |
| JRT | 136,805.06 | 0.03789613 |
教訓
LIFI 是一個跨鏈橋聚合器,受害合約是跨鏈傳輸的入口。此漏洞並非源於複雜的跨鏈邏輯(這在此前其他跨鏈橋安全事件中常出現),而是源於未經檢查的外部呼叫,這是 Solidity 中十大常見問題之一。
隨著 DeFi 專案變得日益複雜,專案開發人員除了撰寫正確的業務程式碼外,還需要更關注程式碼的安全性。我們強烈建議專案切勿在區塊鏈上部署未經審計的合約。
關於 BlockSec
BlockSec 是一家開拓性的區塊鏈安全公司,由一群全球傑出的安全專家於 2021 年創立。公司致力於增強新興 Web3 世界的安全性和可用性,以促進其大規模普及。為此,BlockSec 提供智慧合約與 EVM 鏈安全審計服務、用於安全開發與主動威脅封鎖的 Phalcon 平台、用於資金追蹤與調查的 MetaSleuth 平台,以及協助 Web3 建設者在加密世界中高效探索的 MetaDock 擴充功能。
迄今為止,公司已服務超過 300 家知名客戶,如 MetaMask、Uniswap Foundation、Compound、Forta 和 PancakeSwap,並從 Matrix Partners、Vitalbridge Capital 和分布式資本 (Fenbushi Capital) 等著名投資者處獲得了兩輪數千萬美元的融資。
官方 Twitter 帳號:https://twitter.com/BlockSecTeam



