在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日部署。但是,這個合約自部署以來幾乎沒有任何互動。
經驗教訓
這次攻擊表明,協議必須謹慎跟蹤和管理遺留或棄用合約中的資金。此外,在任何合約部署到生產環境之前,都應該進行徹底的程式碼審查和審計,以防止類似的漏洞。