以太坊开发者发现了一个可能导致EVM链因Besu客户端的过量气体错误而被卡住的BUG。
以太坊开发者发现了Besu以太坊客户端中的一个错误,可能会导致 “在具有多个EVM实现的网络中出现共识失败”。
Gary Schulte向Hyperledger GitHub仓库报告了这个问题,并由Martin Holst Swende发现。据了解,”没有生产网络有交易会触发这种故障。”
Bug identified during The Merge code review
Swende记录说,他在 “为ethereum fuzzing的准备 “时发现了这个bug。在回应我们的记者时,Swende表示,运行Besu节点的用户会被卡住,”无法跟随卡农链”。此外,任何 “以Besu为主的网络都可能被阻止。”
他们会被卡住,无法遵循规范的链条。而且/或者,任何以besu为主的网络(非eth-mainnet)都可能被阻止在它的轨道上。
– M H (((Swende)) (@mhswende) September 27, 2022
Besu客户端是以太坊网络上第二受欢迎的客户端,仅次于Geth。根据通过ethernodes.org获得的数据,Besu客户端被7.81%的以太坊主网客户使用。
Vulnerable Besu client versions
Besu客户端的22.7.1版本包含一个修复程序,以确保 “多余的气体将不会被分配给内部交易调用,并纠正多余的气体错误”。
早于22.1.3的版本也将 “防止不正确的执行”,然而,Ethereum mainnet需要其他功能,只有在后来的版本中才有。客户端版本22.4.0至22.7.0目前被认为容易受到气体错误的影响。
因此,主网上的Besu客户端用户必须升级到修补过的版本。
影响和解决方案
Danno Ferrin在9月21日发表的Hackmd文章中对这个问题进行了全面的阐述。费林的分析指出,
“把无符号的数据当作有符号的数据来处理的缺陷,一个正确编码的智能合约可以创建一个函数调用,其返回的气体会比传入的气体多。”
“。
关于该漏洞的进一步技术信息可以在Ferrin的帖子中找到。然而,主要的收获是,这个bug在以太坊主网上被解决了,没有任何问题。对于一个坏的行为者来说,要想恶意利用这个bug,他们必须以精确的方式行事。
“为了将这一问题提升为链锁漏洞,需要故意制作一个呼叫,涉及到与EIP-150 “除64分之一外的所有 “规则的一些互动,并为呼叫合约保留一部分可用气体。”
如果没有发现这个bug,任何有Besu客户端高度参与的链条都可能出现智能合约的 “无限循环”,即合约会 “真正永远执行”。
Ferrin表示,模糊处理使开发人员能够识别并修补这个错误,没有问题。摸索是软件开发人员使用的一种方法,”包括提供无效、意外或随机的数据作为计算机程序的输入。”
“这个漏洞所展示的最大教训是,在模糊执行中对跟踪数据的比较比简单地比较最终结果能捕捉到更多的错误。”
由于以太坊开发者的勤奋,致力于保护网络,多余的气体bug成为一个非事件。然而,它可能造成的潜在危害展示了在执行合并过程中没有问题的复杂性。
这个错误在22.7.1版本中得到了修补,使用了 “一种不同的转换方法,将溢出值 “钳制 “到最大预期值,避免了签名翻译问题”。Ferrin评论说,在易受攻击的范围内运行节点的用户应该更新到最新的版本。