TIME 合約事件攻擊事件回顧。
當我們都以為這本是一場普通的攻擊。
2023 年 12 月 07 日,據 Beosin 旗下 Eagle Eye 平臺消息,乙太坊的 TIME 合約遭受駭客攻擊,駭客獲利約 18.8 萬美元。
![](https://web3caff.com/wp-content/uploads/2023/12/image-276.png)
但我們發現,本次事情好像不止這麼簡單。
通過追蹤溯源發現,我們發現在 2023 年 12 月 4 日,thirdweb 就在博客和官方發佈漏洞公告稱 “2023 年 11 月 20 日,我們意識到 web3 智能合約常用開源庫特定模式的集成存在安全漏洞,該漏洞影響了 Thirdweb 的一些預構建智能合約,並聯繫了相關專案方進行緩解。”
![](https://web3caff.com/wp-content/uploads/2023/12/image-275.png)
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://web3caff.com/wp-content/uploads/2023/12/image-274.png)
Muticall 批處理調用庫:
Muticall 是一個由 openzeppelin contacts 提供的單個外部調用中批量處理多個調用的功能庫。
從 Time 事件中我們可以看見其 Multicall()函數中將迴圈調用 DelegateCall 函數處理 Calldata 並調用本合約的其他函數。
![](https://web3caff.com/wp-content/uploads/2023/12/image-273.png)
TIME 合約事件相關信息
●攻擊交易
0xecdd111a60debfadc6533de30fb7f55dc5ceed01dfadd30e4a7ebdb416d2f6b6
●攻擊者位址
0xfde0d1575ed8e06fbf36256bcdfa1f359281455a
●攻擊合約
0x6980a47bee930a4584b09ee79ebe46484fbdbdd0
●被攻擊合約
0x4b0e9a7da8bab813efae92a6651019b8bd6c0a29
TIME 合約事件漏洞分析
本次攻擊主要利用了轉發器(Forwarder)合約調用了 TIME 代幣的 multicall 函數,並由於 TIME 代幣使用了 ERC2771 原生元交易的安全協定,從而惡意偽造_msg.sender 進而銷毀了 pair 中的代幣。 最終由於 token 代幣價格上漲兌換而獲利。
TIME 合約事件攻擊流程
1. 攻擊者首先使用 5 個 WTH 兌換約 34.5 億個 Time 代幣作為準備資金。
![](https://web3caff.com/wp-content/uploads/2023/12/image-272.png)
2. 接著攻擊者調用轉發器的 execute 函數通過簽名驗證,並傳入惡意的 calldata,如下
![](https://web3caff.com/wp-content/uploads/2023/12/image-271.png)
![](https://web3caff.com/wp-content/uploads/2023/12/image-270.png)
3. 此時 execute 函數會調用 req.to 位址(Time 代幣位址),並將 req.data 和 req.from 位址打包並調用 Time 代幣的 multicall 函數。 那這裡駭客是如何將 req.from 給捨棄的呢? 原因在於駭客將 data[1] 的長度(size)設置為了 0x38,那麼 muticall 在解析 data 時 req.from 將被截斷。
![](https://web3caff.com/wp-content/uploads/2023/12/image-269.png)
4. muticall 函數以 pair 的調用者身份調用 burn 函數銷毀 piar 中的 Time 代幣。
![](https://web3caff.com/wp-content/uploads/2023/12/image-268.png)
![](https://web3caff.com/wp-content/uploads/2023/12/image-267.png)
5. 最後攻擊者調用 pair 中的 sync 函數同步 pair 中的儲備量,使得 Time 代幣價格上漲。
![](https://web3caff.com/wp-content/uploads/2023/12/image-266.png)
最後駭客使用準備階段獲得的 TIME 代幣在 pair 中兌換 ETH 從而獲利 18.8 萬美元。 這次攻擊事件再次提醒我們,智慧合約的安全性至關重要,專案方必須加強對漏洞的識別和修復,以確保區塊鏈生態系統的可持續發展和用戶的資產安全。
免責聲明:作為區塊鏈資訊平臺,本站所發佈文章僅代表作者及嘉賓個人觀點,與 Web3Caff 立場無關。 文章內的資訊僅供參考,均不構成任何投資建議及要約,並請您遵守所在國家或地區的相關法律法規。