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

2024-04-23 23:04:49

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

攻擊簡述

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

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

攻擊中涉及的關鍵地址

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

攻擊交易:

https://etherscan.io/tx/0x017ce9593350cba65d506e1a87e52d2c20079fdfa80a350a89fe6fc875f2d9f9

攻擊 EOA:

0xded2b1a426e1b7d415a40bcad44e98f47181dda2

攻擊者(合約):

0xd818ff3d5cfc938014b270d0c8029ba04629b549

漏洞合約(ClaimCampaigns):

0xbc452fdc8f851d7c5b72e1fe74dfb63bb793d511

被盜代幣(NobleBlocks: NOBL Token):

0x88b9f5c66342ebaf661b3e2836b807c8cb1b3195

攻擊流程分析

1.攻擊實施

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

具體攻擊步驟如下:

  1. 攻擊者調用漏洞合約的「 createLockedCampaign 」函數創建 campaign,在參數中將 「 campaign.manager 」和「 claimLockup.tokenLocker 」均設置為攻擊者自己,將「 campaign.token 」設置為 NOBL 代幣,「 campaign.amount 」設置為「 680000000000000000000000 」(NOBL 代幣的 decimal 為 18,因此此處代表 680000 個 NOBL 代幣),「 donation.amount 」設置為 0。從「 createLockedCampaign 」函數代碼可以看出,攻擊者首先將 NOBL 代幣轉給漏洞合約,然後再通過「 safeIncreaseAllowance 」函數,使漏洞合約給「 claimLockup.tokenLocker 」(攻擊者)授權花費漏洞合約持有的 NOBL 代幣的權力,此處授權了「 campaign.amount 」這么多的額度給攻擊者。

  2. 攻擊者調用「 cancelCampaign 」函數刪除第 1 步中創建的 campaign,從函數代碼可以看出,漏洞合約將該 campaign 的數據刪除,並調用 TransferHelper 庫的 「 withdrawTokens 」函數將第 1 步中攻擊者轉入的 NOBL 代幣還給「 campaign.manager 」(攻擊者)。至此 campaign 成功被取消,然而第 1 步中漏洞合約授權給攻擊者的 NOBL 代幣使用額度並沒有同步刪除。因此攻擊者此時還具備花費漏洞合約 NOBL 代幣的權力。

  3. 攻擊者重復 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 如下(僅羅列了以太坊上的交易):

目前,攻擊者已將部分非法所得轉移到了另外一個地址 0xd84f48b7D1AaFA7bd5905c95c5d1ffB2625AdA46 上,目前暫時沒有其他動作。而 claims 合約的开發者(0x5a4bC2bdA1f6B9929b6efdCef4728246bEc4C635)通過 Blockscan chat 與攻擊者聯系,承認了合約中的漏洞並假定了他們的行為為白帽行動,希望攻擊者在 24 小時內與他們取得聯系。

安全建議

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

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

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

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

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

推薦文章

btc日內再次下跌 短线應當如何處理?

盡管以太坊現貨ETF獲批是個好消息,但市場反應卻不如預期。在消息公布後,以太坊價格出現了小幅下跌,...

加密蓮
134 3個月前

7月23日、BTC(合約)ETH(合約)行情分析及操作策略

昨日收益還是不錯的,日內給出的現價空單分別止盈我們目標點位,恭喜跟上的朋友喫肉。時間一晃到月底了,...

倪老師
134 3個月前

幣圈院士:血與淚的教訓!交易者為何總是撞死在同一棵樹上?

幣圈院士談。交易市場中的幾種“死法” 在幣圈市場鱗次櫛比的海洋,風起雲湧,時常讓人感到驚手不及。在...

幣圈院士
139 3個月前

7月23:Mt. Gox 比特幣錢包在市場緊縮的情況下轉移了價值 28.2 億美元的 BTC

7月23:Mt. Gox 比特幣錢包在市場緊縮的情況下轉移了價值 28.2 億美元的 BTC一個引...

168超神
131 3個月前

悅盈:比特幣68000的空完美落地反彈繼續看跌 以太坊破前高看回撤

一個人的自律中,藏着無限的可能性,你自律的程度,決定着你人生的高度。 人生沒有近路可走,但你走的每...

我是周悅盈
111 3個月前

btc完美盈利 晚間波動較大注意

昨日btc空單完美給到,最大化走出一千七百點空間~ btc: 日內开盤下跌繼續測試66000一线,...

加密蓮
121 3個月前