TIME 合約事件攻擊事件回顧。

封面:Photo by FLY:D on Unsplash

當我們都以為這本是一場普通的攻擊。

2023 年 12 月 07 日,據 Beosin 旗下 Eagle Eye  平臺消息,乙太坊的 TIME 合約遭受駭客攻擊,駭客獲利約 18.8 萬美元。

EagleEye 平台截圖

但我們發現,本次事情好像不止這麼簡單。

通過追蹤溯源發現,我們發現在 2023 年 12 月 4 日,thirdweb 就在博客和官方發佈漏洞公告稱 “2023 年 11 月 20 日,我們意識到 web3 智能合約常用開源庫特定模式的集成存在安全漏洞,該漏洞影響了 Thirdweb 的一些預構建智能合約,並聯繫了相關專案方進行緩解。”

相關連結:
https://twitter.com/thirdweb/status/1731841493407576247https://blog.thirdweb.com/security-vulnerability/

12 月 7 日,乙太坊的 TIME 合約,成為第一個因該安全問題受害的第一專案。

今天讓我們還原一下本次攻擊事件真相。

協定背景簡介

ERC2771 原生元交易安全協定:

EIP 2771 協定為接收者合約定義了合約級協定,以通過可信轉發器合約接受元交易。 沒有進行任何協定更改。 通過附加額外的 calldata 向接收者合約發送有效的 msg.sender(稱為 _msgSender())和 msg.data(稱為 _msgData()),該協議設計的初衷在於讓乙太坊接受來自沒有 ETH 來支付 Gas 費用的外部帳戶的調用。

由於該設計的特殊性,其 msg.sender 正如其協定描述的那樣是通過_msgSender()函數獲取的,該函數會會判斷發起者是否為可信轉發器,如果是,則將截取傳入的 Calldata 的最後 20 個字節作為交易的發起者。

參考連結:https://eips.ethereum.org/EIPS/eip-2771https://etherscan.io/address/0x4b0e9a7da8bab813efae92a6651019b8bd6c0a29#code


Muticall 批處理調用庫:

Muticall 是一個由 openzeppelin contacts 提供的單個外部調用中批量處理多個調用的功能庫。
從 Time 事件中我們可以看見其 Multicall()函數中將迴圈調用 DelegateCall 函數處理 Calldata 並調用本合約的其他函數。

參考連結:https://github.com/OpenZeppelin/openzeppelin-contractshttps://etherscan.io/address/0x4b0e9a7da8bab813efae92a6651019b8bd6c0a29#code

TIME 合約事件相關信息

●攻擊交易

0xecdd111a60debfadc6533de30fb7f55dc5ceed01dfadd30e4a7ebdb416d2f6b6

●攻擊者位址

0xfde0d1575ed8e06fbf36256bcdfa1f359281455a

●攻擊合約

0x6980a47bee930a4584b09ee79ebe46484fbdbdd0

●被攻擊合約

0x4b0e9a7da8bab813efae92a6651019b8bd6c0a29

TIME 合約事件漏洞分析

本次攻擊主要利用了轉發器(Forwarder)合約調用了 TIME 代幣的 multicall 函數,並由於 TIME 代幣使用了 ERC2771 原生元交易的安全協定,從而惡意偽造_msg.sender 進而銷毀了 pair 中的代幣。 最終由於 token 代幣價格上漲兌換而獲利。

TIME 合約事件攻擊流程

1. 攻擊者首先使用 5 個 WTH 兌換約 34.5 億個 Time 代幣作為準備資金。

2. 接著攻擊者調用轉發器的 execute 函數通過簽名驗證,並傳入惡意的 calldata,如下

3. 此時 execute 函數會調用 req.to 位址(Time 代幣位址),並將 req.data 和 req.from 位址打包並調用 Time 代幣的 multicall 函數。 那這裡駭客是如何將 req.from 給捨棄的呢? 原因在於駭客將 data[1] 的長度(size)設置為了 0x38,那麼 muticall 在解析 data 時 req.from 將被截斷。

參考:https://docs.soliditylang.org/en/v0.8.12/abi-spec.html

4. muticall 函數以 pair 的調用者身份調用 burn 函數銷毀 piar 中的 Time 代幣。

5. 最後攻擊者調用 pair 中的 sync 函數同步 pair 中的儲備量,使得 Time 代幣價格上漲。

最後駭客使用準備階段獲得的 TIME 代幣在 pair 中兌換 ETH 從而獲利 18.8 萬美元。 這次攻擊事件再次提醒我們,智慧合約的安全性至關重要,專案方必須加強對漏洞的識別和修復,以確保區塊鏈生態系統的可持續發展和用戶的資產安全。

免責聲明:作為區塊鏈資訊平臺,本站所發佈文章僅代表作者及嘉賓個人觀點,與 Web3Caff 立場無關。 文章內的資訊僅供參考,均不構成任何投資建議及要約,並請您遵守所在國家或地區的相關法律法規。