出现漏洞,君士坦丁堡硬分叉被推迟_THE:ETH

据blog.ethereum消息,由于以太坊改进提案被发现重大安全漏洞,原定于在第7080000个区块上进行的君士坦丁堡硬分叉被推迟。WeekinEthereum创始人EvanVanNess表示,新的硬分叉日期将在周五的下一次核心开发者电话会议期间确定。以太坊核心开发者AfriSchoedon则在Twitter上表示,硬分叉将于下周一举行。漏洞发生了怎么办?

关于EIP1283漏洞处理,以太坊官方也通过博客表示,推迟君士坦丁堡硬分叉,即不在第7080000个区块上分叉,并且发布了相关处理办法:对于已经升级同步的节点、矿工、交易所,需要在Geth或Parity新版本发布后及时更新版本,新版本预计在博客发布的3~4个小时内发布。具体的方案如下所示:Geth版本:升级到Geth1.8.21;降级至Geth1.8.19;如果想保持在Geth1.8.20,请使用开关'-override.constantinople=9999999'无限期推迟君士坦丁堡分叉;Parity版本:推荐升级到ParityEthereum2.2.7-stable或ParityEthereum2.3.0-beta;不推荐降级至ParityEthereum2.2.4-beta。对于未同步升级的节点、钱包以及代币持有者,现在不需要进行任何操作。对于合约所有者,现在可以检查一下合约是否还存在其他潜在的漏洞,但请不用担心,因为有着漏洞的EIP1283不会被启用。漏洞是什么?

北京时间今天零点,智能合约审计公司ChainSecurity发布了一份报告,报告指出以太坊君士坦丁堡代码存在漏洞,该漏洞可能导致“重入攻击”——攻击相关合约、修改用户余额或其他关键变量。为什么会产生重入攻击?ChainSecurity认为,在分叉前一个存储至少需要5000gas,远远超过使用“transfer”或“send”调用合约时发送的2300gas;而在分叉后,一个存储只需要200gas,攻击者可以通过调用一些公共函数,更改所需变量。比如攻击者可以调用攻击者合约,只需要花费2300gas就可以成功地更改弱势合约的变量,包括账户余额等。当然,攻击要想成功需要一些条件:必须有一个函数a,在该函数中,“transfer/send”后面紧跟着一个状态更改操作,这有时是不明显的;攻击者必须有一个能够访问函数A改变状态的函数B,B状态改变会与函数A发生冲突;函数B需要在小于1600gas的情况下执行(2300气费-700气话费)。ChainSecurity提醒大家,可以从检查以下几个方面避免合约被攻击:检查transfer事件后是否有任何操作。检查这些操作是否改变了存储状态,最常见的是通过分配一些存储变量,检查哪些变量已被修改,做一个列表。检查合约中,非管理员可以访问的任何其他方法是否使用这些变量之一;检查这些方法本身是否自行改变存储状态;检查是否低于2300gas,同时记住SSTORE操作可能只有200gas。漏洞重演何时休?

这次EIP1283出现的重入攻击,在以太坊的发展史上曾出现多次,属于顽疾。“其实这个攻击方式,在以太坊上早就是赫赫有名了,我不相信以太坊社区没有考虑到这个问题。”以太坊研究者胡靖宇告诉Odaily星球日报。重入攻击影响最大是TheDAO合约漏洞事件。当时黑客利用TheDAO合约漏洞,转移了价值4千多万美元以太币。为了夺回资金,以太坊社区决定进行软分叉与硬分叉,结果社区内部产生分歧,一部分选择留在原链,一部分选择了进入新的分叉链。根据胡靖宇所说,以太坊智能合约为了方便一些逻辑操作,留下了“transfer()和send()”这样一种调用方式,但也给开发者留下了安全隐患。“但是只要开发者知道有这样一个安全隐患,在写代码的时候多判断一下逻辑就可以保证安全性了。”至于下周一会不会进行硬分叉升级,胡靖宇表示硬分叉升级具体的时间点应该是未定的,因为官方目前还没有评估到具体的风险以及制定解决方案。

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

金智博客

[0:0ms0-5:920ms