Hegic 期權協議:棄用合約如何導致 8 萬美元的漏洞

本文為機器翻譯
展示原文

在2025年2月23日,Hegic期權協議遭到攻擊,導致損失約80,000美元。

Hegic是一個建立在以太坊上的去中心化期權交易協議,使使用者能夠以無需信任、非託管的方式交易ETH和wBTC等加密資產的看漲期權和看跌期權。它採用點對池模型,流動性提供者將資產存入資金池以為期權合約提供資金。使用者可以購買具有可自定義行權價格和期限的期權,而流動性提供者則可以獲得溢價和獎勵作為回報。

然而,被攻擊的合約已經相當老舊,可能未曾投入生產使用。之所以遭到攻擊,是因為合約中仍有一些資金 - 數量相當可觀。

關鍵資訊

攻擊者: https://etherscan.io/address/0x4B53608fF0cE42cDF9Cf01D7d024C2c9ea1aA2e8

漏洞合約: https://etherscan.io/address/0x7094E706E75E13D1E0ea237f71A7C4511e9d270B#code

攻擊交易1: https://etherscan.io/tx/0x260d5eb9151c565efda80466de2e7eee9c6bd4973d54ff68c8e045a26f62ea73

攻擊交易2: https://etherscan.io/tx/0x444854ee7e7570f146b64aa8a557ede82f326232e793873f0bbd04275fa7e54c

漏洞分析

從攻擊交易中可以看出,惡意交易中反覆呼叫了withdrawWithoutHedge函式。

看起來攻擊者只需在一個for迴圈中呼叫withdrawWithoutHedge函式就能夠清空合約。這是如何做到的?withdrawWithoutHedge函式有什麼限制嗎?讓我們來看看withdrawWithoutHedge函式的原始碼。

withdrawWithoutHedge函式是一個外部函式,它呼叫了_withdraw函式。在_withdraw函式中,我們可以看到要轉移的amount是根據當前"tranche"的t.share計算的。但是,t.share在提款後並沒有更新。從程式碼中可以看到,執行當前tranche狀態檢查的那一行(require(t.state == TrancheState.Open))也被註釋掉了。

這個漏洞合約是Hegic WBTC看跌期權池合約,這是一個相當老舊的合約,於2022年1月4日部署。但是,這個合約自部署以來幾乎沒有任何互動。

經驗教訓

這次攻擊表明,協議必須謹慎跟蹤和管理遺留或棄用合約中的資金。此外,在任何合約部署到生產環境之前,都應該進行徹底的程式碼審查和審計,以防止類似的漏洞。

相关赛道:
來源
免責聲明:以上內容僅為作者觀點,不代表Followin的任何立場,不構成與Followin相關的任何投資建議。
喜歡
收藏
評論