Ξ

    Search by

    GETH发布最新修复版本

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


    Gt

    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语言的漏洞。细节报告已经发送至security@golang.org
    • 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.orgbounty@ethereum.orgsecurity@ethereum.org 报告安全漏洞。



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


    Ethereum Community Network
    以太坊社区网络
    Ethereum Community Network
    以太坊社区网络