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相关的任何投资建议。
喜欢
收藏
评论