背景介紹
2024年7月16日,我們監控到了一筆Ethereum上的攻擊事件,https://etherscan.io/tx/0xd82fe84e63b1aa52e1ce540582ee0895ba4a71ec5e7a632a3faa1aff3e763873
被攻擊的協議爲LI.FI Protocol,LI.FI Protocol是一個聚合協議。此次攻擊中,攻擊者共獲利2,276,295 USDT折合227萬USD。
攻擊及事件分析
首先,攻擊者查詢了地址0xabe45ea636df7ac90fb7d8d8c74a081b169f92ef的USDT余額,和該地址對余額對於LI.FI Protocol可以花費的額度。接着,攻擊者調用了depositToGasZipERC20這個函數,
我們可以看到上述函數的具體代碼實現,如下圖:
我們可以看到,在函數depositToGasZipERC20中調用了LibSwap.swap函數,具體代碼如下:
其中SwapData的結構如下:
我們可以看到,只要控制了swap函數的參數_swap,既可以利用LI.FI Protocol合約調用任意合約,傳入任意參數。我們可以看到,攻擊者傳入的參數爲:
根據SwapData的數據結構,我們可以看到,攻擊者利用傳入的參數調用了合約0xdac17f958d2ee523a2206206994597c13d831ec7: callTo(USDT),傳入的inputData爲:
由於0x23b872dd爲transferFrom的signature,根據該函數的參數解析的數據爲:
相當於利用LI.FI Protocol,從0xabe45ea636df7ac90fb7d8d8c74a081b169f92ef將2276295880553 USDT轉給了0x8b3cb6bf982798fba233bca56749e22eec42dcf3,至此,攻擊者完成了攻擊。
總結
本次漏洞的成因是被攻擊合約對攻擊者傳入參數校驗不嚴格,導致攻擊者可以通過構造特殊inputData來使受害者合約調用任意合約並傳入任意參數。最終,攻擊者利用特殊的參數,使得受害者合約通過transferFrom將授權給其合約的代幣轉入到攻擊者控制的地址。建議項目方在設計代碼運行邏輯時要多方驗證,合約上线前審計時盡量選擇多個審計公司交叉審計。
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。