程序员挖“洞”致富:发现一个漏洞,获赏 1272 万元
适合程序员的副业有什么?写文章、当技术辅导、开发小程序、接植发代言(bushi)…许多人通过这些副业,长年累月下来,逐渐实现了理想中的“经济自由”。在这之中,还有一种非常受欢迎的业余赚钱方式:“专找别人茬,奖金自己挣”的漏洞赏金猎人。不论是国外巨头如苹果、微软、谷歌等,还是国内大厂如华为、阿里、腾讯等,均推出了各自的漏洞悬赏计划,即开发者搜寻软件中的漏洞并将之上报厂商,便可获得丰厚奖励。
而这个奖金有多丰厚呢?近来,iOS 越狱软件 Cydia 之父 Jay Freeman 发现一个以太坊关键漏洞,获得了 200 万美元(约人民币 1272 万元)的巨额奖金!
(注:Jay Freeman,著名软件开发人员,被誉为 iOS 越狱之父,开发出了 Cydia 应用商店,可使拥有越狱 iPhone 的用户在 iOS 中下载未经授权的软件。)
一、创建无数 ETH 代币的漏洞
以太坊 Layer2 解决方案 Optimism 能够大规模处理交易,同时还保有以太坊的安全性,原先仅适用于 Uniswap 和 Synthetix 等特定项目,后于去年年底宣布取消白名单机制:任何用户都可以在 Optimism 上自由部署合约、构建应用程序。但近日,Jay Freeman 发布博客称,他在 Optimism 的 Geth 分叉中发现了一个关键 Bug:攻击者可借此非法创建无数 ETH 代币。
在这篇博文中,Jay Freeman 详细描述了发现该 Bug 的历程及 Bug 的利用方式:“这一 Bug 我愿称之为‘Unbridled Optimism’,它可能会被粗略认为是‘桥’远端的一个漏洞,但实际上这是在 Optimism 上执行智能合约的虚拟机中的一个错误。利用这一 Bug,攻击者可以访问‘桥’远端有效且无限数量的 tokens。”
Jay Freeman 明确指出,Bug 出现在以太坊 VM 中的 SELFDESTRUCT 指令。该指令用于合约自行销毁,移除其账户对象,允许从区块链的活动集中快速清除潜在的大量“过时”状态。当合约进行到 SELFDESTRUCT 指令时,它会指定一个“受益人”来接收它当前拥有的资金。该操作码在 go-ethereum 的 EVM 中实现将余额添加给受益人,然后调用 StateDB.Suicide。然后,StateDB.Suicide 会将帐户余额清零。
但 Jay Freeman 发现,这一步既不使用 stateObject 的 setBalance 设置器,也不使用共享的 common.Big0 常量,也就是说它除了将对象上的布尔值设置为 true 之外毫无作用,而这意味着“此时的合约仍然存在并继续拥有它之前拥有的代码!”
Optimism 团队在之后的报告中也指出:“该漏洞使得可以通过在持有 ETH 余额的合约上反复触发 SELFDESTRUCT 操作码以在 Optimism 上创建无数的 ETH。”
二、Bug 尚未被利用,需尽快修复
所幸,Jay Freeman 之后迅速于 2 月 2 日向 Optimism 团队报告该 Bug,而 Optimism 团队通过对 Optimism 链历史的分析表明,除了最初由 Etherscan 员工的一次意外触发(那次没有生成可用的多余 ETH),该漏洞至今还未被利用过。
对于此 Bug 的出现,Optimism 团队解释道:“这个错误源于对 go-ethereum 代码库的修改(旨在保持与旧的‘OVM 1.0’系统的向后兼容性)。”由于过去一年中 Optimism 用户增长了很多,相比早期发布过程只涉及少数关键基础设施提供商之间的协调,Optimism 团队表示如今发布的复杂性在急剧增加:代码库的桥接器、更多提供商、多个主网分支之间均有涉及。甚至即便发现了 Bug,Optimism 团队也不能立即发布明显的补丁——他们不能冒着有人在升级之前对漏洞进行逆向工程的风险。
在收到漏洞报告并确认漏洞的几小时内,Optimism 团队就对该 Bug 的修复进行了测试,并部署到了 Optimism 的 Kovan 和 Mainnet 网络(包括所有基础设施提供商)。
Optimism 官方提醒,虽目前该 Bug 尚未被利用,但鉴于该 Bug 的重要性,许多易受攻击的 Optimism 分叉和桥接提供商需引起重视,确保尽快升级至 0.5.11 版本的 l2geth。
此后,为感谢 Jay Freeman 对这一关键漏洞的发现,Optimism 给予了他 2000042 美元。
三、漏洞赏金计划,或许必不可少
从本次事件可以看出,漏洞赏金计划对于许多大型项目来说或许必不可少。正如 Optimism,逐年增加的用户伴随着愈发复杂的技术,与此同时产生 Bug 的可能性也在日益提升,此时若仅凭数量有限的项目内部人员来搜寻 Bug 无疑十分艰难。
无私发现 Bug 的人固然有,但适当的赏金计划显然更能刺激许多开发者寻找 Bug 的热情与动力,这或许也就是众多大型科技企业或项目均发布了漏洞赏金计划的原因:就在 Jay Freeman 公开本次漏洞的同一天,MakerDAO 还推出有史以来最大的漏洞赏金,最高可奖励高达 1000 万美元。
不过不能否认的是,漏洞赏金计划也引发了一些争议:
去年 9 月,向苹果报告了 4 个零日漏洞的 Denis Tokarev 表示,依照苹果安全赏金页面,他所报告的漏洞的价值为 10 万美元,但苹果拒绝支付。
无独有偶,开发者 Jose Rodriguez 此前也曾发推谴责苹果:他所报告的漏洞估值超 2.5 万美元,最终却只被奖励了 5000 美元。
那么,你对漏洞赏金计划有何看法呢?
参考链接:
https://cointelegraph.com/news/makerdao-launches-biggest-ever-bug-bounty-with-10m-reward
https://www.saurik.com/optimism.html
https://optimismpbc.medium.com/disclosure-fixing-a-critical-bug-in-optimisms-geth-fork-a836ebdf7c94
页:
[1]