揭祕以太坊TIME合約黑客攻擊事件 如何利用ERC2771協議安全問題獲利?

2023-12-11 11:24 Beosin


來源:Beosin

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

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

EagleEye平台截圖

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

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

相關鏈接:https://twitter.com/thirdweb/status/1731841493407576247

https://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-2771

https://etherscan.io/address/0x4b0e9a7da8bab813efae92a6651019b8bd6c0a29#code

Muticall批處理調用庫:

Muticall是一個由openzeppelin contacts提供的單個外部調用中批量處理多個調用的功能庫。

從Time事件中我們可以看見其Multicall()函數中將循環調用DelegateCall 函數處理Calldata並調用本合約的其他函數。

參考鏈接:https://github.com/OpenZeppelin/openzeppelin-contracts

https://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萬美元。

這次攻擊事件再次提醒我們,智能合約的安全性至關重要,項目方必須加強對漏洞的識別和修復,以確保區塊鏈生態系統的可持續發展和用戶的資產安全。

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。

標題:揭祕以太坊TIME合約黑客攻擊事件 如何利用ERC2771協議安全問題獲利?

地址:https://www.sgitmedia.com/article/17760.html

相關閱讀: