25

GETH发布最新修复版本

 4 years ago
source link: https://news.ethereum.cn/geth-security-release/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
GETH发布最新修复版本 · 欢迎来到以太坊中国

GETH发布最新修复版本

请节点立即升级至 Geth `v1.9.24 `版本,或使用 Go `1.15.5 ` 及以上版本


Geth team

Geth team       2020-11-13

请节点立即升级至 Geth v1.9.24版本,或使用 Go 1.15.5 及以上版本

来源 | Ethereum Blog

使用Go<1.15.5<1.14.12构建的geth 版本很可能受到严重安全漏洞 (DoS) 的影响。Golang团队已将此漏洞注册为“ CVE-2020-28362”。

我们建议所有用户使用Go 1.15.5 or 1.14.12重建客户端 (最好是v1.9.24版本),以避免节点崩溃。另外,如果你运行的是官方程序,我们发布了基于Go 1.15.5的Geth v1.9.24版本。(Release: https://github.com/ethereum/go-ethereum/releases/tag/v1.9.24)

Docker映像很可能由于缺少基本映像过期,可以查看此处说明使用Go1.15.5临时构建映像。请运行geth version来验证你的程序所使用的Go版本。

在十月初,go-ethereum加入了Google的OSS-Fuzz计划。我们曾经临时执行过模糊测试,并测试了一些不同的平台。

10月24日,其中一个测试工具发现了一处崩溃。

经调查,发现问题的根本原因是Go标准库中的漏洞,并且该问题已经被上报。

在区块处理过程中,利用DoS漏洞可以使所有Geth节点崩溃,随之而来的后果就是以太坊网络中的大部分节点掉线。

除了Go-Ethereum之外,这个问题还有很大可能影响所有Geth的分叉 (例如TurboGeth或是ETC使用的core-geth)。为了扩大调查范围,我们会继续回溯代码,Go团队也已经对潜在受影响的使用者展开了调查。

事件时间线

  • 2020-10-24: 接收来自OSS-fuzz的崩溃报告
  • 2020-10-25: 经调查发现起因是Go语言的漏洞。细节报告已经发送至[email protected]
  • 2020-10-26: 收到确认反馈,继续进行调查
  • 2020-10-26 – 2020-11-06: 讨论可能修复方案,继续回溯调查潜在受影响的使用者
  • 2020-11-06: Go暂定2020-11-12发布漏洞修复
  • 2020-11-09: Go预宣布安全补丁:https://groups.google.com/g/golang-announce/c/kMa3eup0qhU/m/O5RSMHO_CAAJ
  • 2020-11-11: 通过Geth的官方twitter、Discord以及Reddit通知用户
  • 2020-11-12: 发布新的Go版本,以及geth新版本其他问题

这个PR提交了另一个安全问题,引起了我们的注意,其中包含对ethash算法的修复。

该挖矿漏洞可能导致矿工在未来的epoch中错误地计算工作量证明。ETC链已经在2020-11-06发生了这个问题。预计这可能将在2021年1月上旬在区块高度11550000 / epoch 385处对ETH主网产生影响。

这个问题也在v1.9.24版本中得到了修复,此漏洞只与矿工节点相关,非矿工节点不受影响。

Geth的浅拷贝漏洞

受影响版本: 1.9.71.9.16

修复: 1.9.17

类型: 共识漏洞

2020年7月15日, John Youngseok Yang (Software Platform Lab) 报告了Geth中的一个共识漏洞。

Geth预编译的dataCopy(0x00 ... 04)合约在调用时进行了浅拷贝,而Parity则进行了深拷贝。攻击者可以部署这样的合约:

  • 在EVM内存区R写入X
  • 使用R作为参数调用0x00..04
  • 使用R 覆盖 Y
  • 最后调用RETURNDATACOPY操作码
  • 调用该合约时,Parity会在EVM栈中push X,而Geth会push Y

这发生在以太坊主网区块高度 11234873 处的交易 0x57f7f9,导致节点掉线,约30个区块在侧链丢失。这也导致了Infura掉线,继而对使用Infura的用户和服务商造成了影响。

更多细节请参阅GethInfura的事件报告,以及此系列推文

16.17 版本中的DoS漏洞

受影响版本: v1.9.16,v1.9.17

修复: v1.9.18

类型: 区块处理期间的DoS漏洞

我们发现了一个DoS漏洞,并且在v1.9.18中进行了修复。我们决定不在这个时间点公布细节。

短期内,我们建议所有用户立即将Geth升级到v1.9.24版本 (Go 1.15.5),此处是官方Release: https://github.com/ethereum/go-ethereum/releases/tag/v1.9.24

如果你是通过Docker使用Geth,那可能会出现一些问题。如果是ethereum/client-go,需要注意两件事:

  1. Docker hub中的新映像可能会延迟
  2. 如果Go的基础映像没那么快创建的话,则很有可能是基于Go的漏洞版本创建的

如果你打算自己创建docker映像 (通过repository root中的docker build .),也可能会遇到第二个问题。

因此,请确保基础映像使用的是Go 1.15.5

长期来说,我们建议用户和矿工使用备选客户端。我们强烈认识到以太坊网络要保持韧性,就不能依赖单一的客户端实现。其他客户端选择还有 BesuNethermindOpenEthereumTurboGeth 等等。

大家可以通过 https://bounty.ethereum.org[email protected][email protected] 报告安全漏洞。

声明:ECN的翻译工作旨在为中国以太坊社区传递优质资讯和学习资源,文章版权归原作者所有,转载须注明原文出处以及ethereum.cn,若需长期转载,请联系[email protected]进行授权。



About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK