首頁  >  文章  >  Hedgey攻擊事件分析:損失上千萬美元的代幣授權

Hedgey攻擊事件分析:損失上千萬美元的代幣授權

WBOY
WBOY轉載
2024-04-24 14:43:22786瀏覽

2024 年 4 月 19 日,Hedgey Token Claim 合約在以太坊、Arbitrum 等多條鏈上被攻擊,損失高達數千萬美元。 Hedgey 專案方隨即發出安全告警,提醒創建代幣認領活動的用戶透過官方管道取消代幣認領活動。 (https://twitter.com/hedgeyfinance/status/1781257581488418862

Hedgey攻擊事件分析:損失上千萬美元的代幣授權

攻擊簡述

Hedgey 幫助DAOs 和鏈上組織透過鏈上、程式化的代幣發放,將代幣分配給他們的團隊、貢獻者、投資者和社群。本次出現漏洞的工具是其Token Claims 產品,該產品可讓用戶創建一個代幣認領頁面,透過CSV 檔案添加多達十萬多名接收者到白名單中,並控制如何透過串流、時間鎖、回收等方式釋放已認領的代幣。

而這次攻擊事件所利用的合約漏洞在於:Token Claims 產品中的 ClaimCampaigns 合約在創建一個代幣認領活動時,將自身的 token 授權給了創建者指定的地址。當該創建者取消認領活動時,將活動創建階段創建者轉入的token 返還給創建者指定的另一個地址,但並未撤銷token 授權,導致活動創建者的地址依然可以使用ClaimCampaigns 合約所授權的token。

攻擊中涉及的關鍵地址

本攻擊涉及到多筆交易,我們僅以下面這筆盜取NOBL 代幣的交易為例來對攻擊原理進行分析。

攻擊交易:https://etherscan.io/tx/0x017ce9593350cba65d506e1a87e52d2c20079fdfa80a350a89fe6fc875f2d9f9##b#b#b# 7d415a40bcad44e98f47181dda2

攻擊者(合約):

0xd818ff3d5cfc938014b270d0c8029ba04629b549

##」漏洞合約(Claim#Campaigns)

0xbc452fdc8f851d7c5b72e1fe74dfb63bb793d511

#被竊代幣(NobleBlocks: NOBL Token):

被竊代幣(NobleBlocks: NOBL Token):

ff
#18638 b3195

攻擊流程分析

1.

攻擊實作

#在攻擊實作階段,攻擊者多次呼叫漏洞合約的「 createLockedCampaign 」 函數建立campaign,再呼叫“ cancelCampaign ”函數刪除campaign。在創建 campaign 時,攻擊者向漏洞合約轉入指定數量的 NOBL 代幣,並獲得漏洞合約給其授權的 NOBL 代幣使用額度。刪除 campaign 時,漏洞合約退還攻擊者在創建 campaign 時轉入的 NOBL 代幣,然而此時漏洞合約並未撤銷給攻擊者授權的 NOBL 代幣使用額度。因此攻擊者透過創建 campaign 再刪除 campaign,可以憑空獲取花費漏洞合約持有的 NOBL 代幣的權力。

具體攻擊步驟如下:

攻擊者呼叫漏洞合約的「createLockedCampaign 」函數建立campaign,在參數中將「 campaign.manager 」和「claimLockup.tokenLocker 」都設定為攻擊者自己,將“ campaign.token ”設定為NOBL 代幣,“ campaign.amount ”設定為“ 680000000000000000000000 ”(NOBL 代幣的decimal 為18,因此此處代表68000 個代幣amount ”設定為0。從「 createLockedCampaign 」函數程式碼可以看出,攻擊者先將NOBL 代幣轉給漏洞合約,然後再透過「 safeIncreaseAllowance 」函數,讓漏洞合約給「 claimLockup.tokenLocker 」(攻擊者)授權花費漏洞合約持有的NOBL 代幣的權力,此處授權了「 campaign.amount 」這麼多的額度給攻擊者。
  1. Hedgey攻擊事件分析:損失上千萬美元的代幣授權

  2. 攻擊者呼叫「 cancelCampaign 」函數刪除第1 步驟中建立的campaign,從函數程式碼可以看出,漏洞合約將該campaign 的資料刪除,並且呼叫TransferHelper 函式庫的「 withdrawTokens 」函數將第1 步驟中攻擊者轉入的NOBL 代幣還給「 campaign.manager 」(攻擊者)。至此 campaign 成功被取消,然而第 1 步中漏洞合約授權給攻擊者的 NOBL 代幣使用額度並沒有同步刪除。因此攻擊者此時仍具備花費漏洞合約 NOBL 代幣的權力。
  3. Hedgey攻擊事件分析:損失上千萬美元的代幣授權

    Hedgey攻擊事件分析:損失上千萬美元的代幣授權

  4. 攻擊者重複25 次第1 步和第2 步的操作,最終從漏洞合約獲取到了680000 * 25 = 17000000 個NOBL 代幣的使用額度。

2.收割贓物

在收割贓物階段,攻擊者直接呼叫NOBL 代幣的「 transferFrom 」函數,將NOBL 代幣從漏洞合約轉到攻擊者EOA 地址上,由於在攻擊實施階段攻擊者已經拿到了花費漏洞合約持有的NOBL 代幣的權力,因此在“ transferFrom ”函數中的額度校驗可以順利通過,最終攻擊者成功盜取了漏洞合約中的NOBL 代幣。

具體細節請查看交易:https://etherscan.io/tx/0x47da1ac72d488f746865891c9196c1632ae04f018b285b762b2b564ad1d3a9e5

攻擊中涉及到的交易

透過ZAN KYT 資料分析,攻擊者在從漏洞合約中取走NOBL token 之前,利用合約漏洞讓漏洞合約給攻擊者approve token 的交易hash 如下(僅羅列了以太坊上的交易):

Hedgey攻擊事件分析:損失上千萬美元的代幣授權

#目前,攻擊者已將部分非法所得轉移到了另外一個位址0xd84f48b7D1AaFA7bd5905c95c5d1ffB2625AdA46上,目前暫時沒有其他動作。而claims 合約的開發者(0x5a4bC2bdA1f6B9929b6efdCef4728246bEc4C635)透過Blockscan chat 與攻擊者聯繫,承認了合約中的漏洞並假定了他們的行為為白帽行動聯繫。

安全建議

透過分析本次攻擊事件,我們有以下建議:

  1. 嚴格審查專案中代幣授權的操作。專案開發者和合約稽核者應該明確哪些業務場景需要代幣授權,哪些業務場景需要回收代幣授權,避免未回收的代幣授權或預期之外多餘的授權被攻擊者利用。

  2. 專案應設定緊急暫停機制。建議涉及資金流轉的專案都建立完善的暫停機制,當攻擊發生時,能及時停損。

本文由 ZAN Team 的 Cara(X 帳號@Cara6289)和 XiG(X 帳號 @SHXiGi) 共同撰寫。

以上是Hedgey攻擊事件分析:損失上千萬美元的代幣授權的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:panewslab.com。如有侵權,請聯絡admin@php.cn刪除