加密货币新闻 以太坊遭到攻击而导致分叉事...

以太坊遭到攻击而导致分叉事件的技术分析

北京时间 2021 年 8 月 27 日 20 点 50 分左右(区块高度 13107518),以太坊突然出现分叉。我们通过分析 Geth 的代码版本修改和这笔造成分叉的交易(0x1cb6fb36633d270edefc04d048145b4298e67b8aa82a9e5ec4aa1435dd770ce4)厘清了以太坊分叉的根本原因:Geth 旧版本在处理预编译合约调用时,并未考虑特殊情况(corner case)下参数值的处理,从而引发重叠拷贝(overlapping copy),导致返回值异常。该漏洞(CVE-2021-39137)已提交 Geth 官方,目前尚未披露细节,但攻击者已经利用漏洞实施了攻击。我们认为及时的分析和披露是必要的,也希望我们的分析能够为社区提供必要的理解和帮助。

攻击分析

运用我们的 在线分析工具,可以看出:

合约图一

这笔交易执行了一个精心构造的 STATICCALL, 攻击者将 addr 设为 0x04 (是预编译合约 dataCopy), inOffset 为 0, inSize 为 32, retOffset 为 7, retSize 为 32。

合约图二

由于 STATICCALL 的目标地址是预编译合约,所以会执行图二中的 RunPrecompiledContract。

合约图三

合约图四

根据图三和图四的代码,可以看到预编译合约 0x04 真正执行的逻辑只是简单地把 in (指针)返回。

合约图五

合约图六

图五是 STATICCALL 的执行过程,753 行是执行预编译合约的入口,751 行的 args 指向 EVM 的 Memory 中 inOffset ~ inOffset + inSize 这篇区域的指针,也就是说 args 指向 Mem[0:32]。

根据图六以及前文对预编译合约 0x04 (dataCopy)的分析,我们可以知道 753 行的返回值 ret 是与 args 完全相同的指针,也指向 Mem[0:32]。

  • 在 1.10.7 版本的 Geth 中(有 Bug): 762 行将 ret 指向的值赋给 EVM 的 Memory 中 retOffset ~ retOffset + retOffset 这篇区域 , 也就是将 Mem[0:32] 的值赋给 Mem[7:7+32],而由于 ret 是一个指向 Mem[0:32] 的指针,这次 Memory.Set 修改了 Mem[7:32] 的值,也就修改了 ret 所指的值。所以在第 771 行返回的 ret 已经不是预编译合约执行结束时的 ret 了。
  • 在 1.10.8 版本的 Geth 中(无 Bug): 增加了 766 行:ret = common.CopyBytes (ret), 将 Mem[0:32] 中的值做了一次深拷贝赋给 ret,那么在 767 行执行的 Memory.Set 只会修改 Memory 而不会修改 ret, 在 771 行返回的 ret 就是正确的 ret。

总结

通过对整个攻击流程的梳理和 Geth 源代码的分析,我们认为根本原因在于 Geth 旧版本在处理预编译合约的调用时并未考虑异常值的处理,导致攻击者利用该漏洞实施了重叠拷贝,影响了返回值,最终导致分叉的出现。由于 Geth 是 BSC、HECO、Polygon 等公链的基础,因此该漏洞影响范围甚广。目前各公链也先后推出了升级和补丁,我们也呼吁各相关节点尽早升级打上补丁,以确保基础设施的安全。

本文来源:BlockSec
原文标题:以太坊遭到攻击而导致分叉事件的技术分析声明:本文为入驻“火星号”作者作品,不代表火星财经官方立场。
转载请联系网页底部:内容合作栏目,邮件进行授权。授权后转载时请注明出处、作者和本文链接。 未经许可擅自转载本站文章,将追究相关法律责任,侵权必究。
提示:投资有风险,入市须谨慎,本资讯不作为投资理财建议。免责声明:作为区块链信息平台,本站所提供的资讯信息不代表任何投资暗示,本站所发布文章仅代表个人观点,与火星财经官方立场无关。鉴于中国尚未出台数字资产相关政策及法规,请中国大陆用户谨慎进行数字货币投资。
语音技术由科大讯飞提供

Recent Articles

美国SEC主席将稳定币比作赌场赌桌上的扑克筹码

Gary Gensler说:“狂野西部有很多赌场,扑克筹码就是赌场赌桌上的稳定币。”

a16z 合伙人:代币是网站之后新的数字基元,它赋...

我们仍然处于 Web 3.0 的拟物时代,但代币开始催生新一轮的原生应用。

AOFEX与蚂蚁集群达成战略合作,共同为分布式存储...

近日,AOFEX 与蚂蚁集群达成战略合作。双方将共同打造良好的区块链产业环境,为分布式存储产业赋能!

SubQuery开发者指南丨清单文件(Manife...

一文带你了解清单文件(Manifest File)

美国CFTC专员:没有国会批准,CFTC就没有加密...

Dan Berkovitz在谈到加密市场时说:“我们不一定会在没有更多资源的情况下寻求更多权力。”

Related Stories

Leave A Reply

Please enter your comment!
Please enter your name here

3 × 1 =