【漏洞分析】Li.Fi攻擊事件分析:缺乏關鍵引數檢查的鑽石協議

ACai_sec發表於2024-07-18

背景資訊

2024 年 7 月 16日,Li.Fi 協議遭受駭客攻擊,漏洞成因是鑽石協議中 diamond 合約新新增的 facet 合約沒有對引數進行檢查,導致 call 函式任意執行。且 diamond 合約擁有使用者的 approve,所以攻擊者可以構造惡意引數對使用者資金進行轉移。

攻擊交易https://app.blocksec.com/explorer/tx/eth/0xd82fe84e63b1aa52e1ce540582ee0895ba4a71ec5e7a632a3faa1aff3e763873

相關合約

  1. 鑽石協議 LiFiDiamondhttps://etherscan.io/address/0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae#code
  2. 邏輯合約 GasZipFacethttps://etherscan.io/address/0xf28a352377663ca134bd27b582b1a9a4dad7e534#code

鑽石協議
鑽石協議的提案是 EIP-2535 :https://eips.ethereum.org/EIPS/eip-2535 ,想詳細瞭解的讀者可以閱讀提案的具體內容。簡單理解一下就是變種的 proxy 形式,根據不同的函式呼叫不同的 implement 合約。

image

Trace 分析

攻擊者呼叫 LiFiDiamond.depositToGasZipERC20 函式,Diamond 合約 delegatecall Facet 合約

image

GasZipFacet.depositToGasZipERC20

image

LibSwap.swap 函式

image

_swap.callTo.call{value: nativeValue}(_swap.callData)函式中,攻擊者構造惡意引數,導致實際上呼叫的是 USDT.transferFrom() 函式。

image

ERC20 授權

由於在 LibAsset 中需要用到 transferFrom 函式轉移使用者的 ERC20 代幣,所以需要使用者對 LiFiDiamond 合約進行代幣授權。這是攻擊發生的第二個條件。

image

相關文章