以太坊关键漏洞被发现,开发者获赏 1272 万元
引言:漏洞赏金计划的兴起
在网络安全领域,漏洞赏金计划(Bug Bounty Program)已成为大型科技企业和开源项目保障安全的重要手段。通过设立奖金激励白帽黑客和安全研究人员发现并报告软件中的潜在缺陷,企业能够以较低的成本获得更广泛的安全测试覆盖。
近年来,随着区块链技术的普及,以太坊生态系统的价值日益增长,相关的漏洞赏金金额也屡创新高。近期,著名的 iOS 越狱软件 Cydia 之父 Jay Freeman 在以太坊 Layer2 解决方案 Optimism 中发现了一个关键漏洞,并因此获得了约 200 万美元(约合人民币 1272 万元)的巨额奖金。这一事件不仅展示了漏洞赏金对开发者的吸引力,也凸显了底层代码安全的重要性。
漏洞详情:Unbridled Optimism
Optimism 是一个基于乐观 Rollup 技术的以太坊 Layer2 扩展方案,旨在提高交易吞吐量同时保持以太坊的安全性。该方案允许开发者在 Optimism 网络上部署智能合约,构建去中心化应用。
Jay Freeman 在审查 Optimism 使用的 Geth(Go-Ethereum)分叉代码时,发现了一个名为'Unbridled Optimism'的关键 Bug。该漏洞位于执行智能合约的虚拟机中,攻击者可以利用它非法创建无限数量的 ETH 代币。
技术原理分析
该漏洞的核心在于以太坊虚拟机(EVM)中的 SELFDESTRUCT 指令。在标准的 EVM 规范中,SELFDESTRUCT 操作用于销毁当前执行的合约账户,并将其余额转移给指定的受益人地址。这一机制通常用于清理不再需要的合约状态,释放存储空间。
在 go-ethereum 的实现中,当合约执行到 SELFDESTRUCT 指令时,系统会执行以下逻辑:
- 将合约当前的余额添加到受益人的账户余额中。
- 调用
StateDB.Suicide方法将当前账户的状态标记为销毁。
然而,Jay Freeman 发现,在 Optimism 的特定实现中,这一步操作存在逻辑缺陷。具体而言,系统在更新受益人余额时,没有使用 stateObject 的 setBalance 设置器,也没有使用共享的 common.Big0 常量进行正确的数值处理。这导致除了将对象上的布尔值设置为 true 之外,其他状态更新并未正确生效。
这意味着,当合约被销毁后,它实际上仍然存在于状态集中,并且继续拥有之前的代码和余额。如果攻击者在持有 ETH 余额的合约上反复触发 SELFDESTRUCT 操作码,就可以利用这个状态不一致的问题,在 Optimism 网络上凭空创造出大量的 ETH 代币。
Optimism 团队在后续报告中确认,该错误源于对 go-ethereum 代码库的修改,旨在保持与旧版 OVM 1.0 系统的向后兼容性。由于过去一年 Optimism 用户增长迅速,代码库的桥接器、多个主网分支以及基础设施提供商之间的协调变得异常复杂,增加了引入此类隐蔽错误的风险。
响应与修复
幸运的是,Jay Freeman 于 2 月 2 日迅速向 Optimism 团队报告了该漏洞。Optimism 团队立即启动应急响应机制,对 Optimism 链的历史数据进行了分析。
分析结果显示,除了最初由 Etherscan 员工的一次意外触发外(那次尝试未生成可用的多余 ETH),该漏洞至今未被恶意利用。尽管如此,鉴于漏洞的严重性,Optimism 团队在收到报告的几小时内就完成了修复测试,并迅速将补丁部署到了 Kovan 测试网和 Mainnet 主网,包括所有相关的基础设施提供商。
Optimism 官方提醒,虽然目前漏洞尚未造成实际损失,但许多易受攻击的 Optimism 分叉和桥接提供商需引起高度重视,确保尽快升级至 0.5.11 版本的 l2geth,以防止潜在的攻击发生。
漏洞赏金计划的行业影响
本次事件再次证明了漏洞赏金计划对于大型开源项目的必要性。随着技术复杂度的提升,仅靠内部有限的开发人员难以全面排查所有潜在风险。外部安全研究人员的参与往往能发现内部团队忽视的深层问题。
例如,就在 Jay Freeman 公开本次漏洞的同一天,DeFi 协议 MakerDAO 也推出了有史以来最大的漏洞赏金计划,最高奖励高达 1000 万美元。这表明越来越多的项目愿意投入重金来换取更高的安全性。
然而,漏洞赏金计划也面临一些挑战。过去曾有安全研究人员反映,尽管他们报告了高价值的零日漏洞,但厂商可能拒绝支付或大幅降低奖励金额。例如,Denis Tokarev 曾报告苹果 4 个零日漏洞,估值 10 万美元却被拒付;Jose Rodriguez 报告的漏洞估值超 2.5 万美元,最终仅获 5000 美元。这些争议表明,建立透明、公正的赏金评估标准仍是行业需要解决的问题。
安全最佳实践建议
针对此次漏洞事件,我们可以总结出以下几点安全开发建议:


