Ethereum共识客户端在Glamsterdam分叉前修复验证者公钥缓存漏洞
某Ethereum共识客户端已实施安全补丁,修复了影响验证者公钥管理的一项漏洞。该补丁旨在解决在为即将到来的Glamsterdam升级做准备期间发现的关键问题。此修复方案已通过GitHub拉取请求合并,解决了由于全局验证者公钥缓存系统存在缺陷,导致节点可能拒绝有效签名的场景,特别是在新的Gloas分叉周围。
Gloas分叉漏洞详情
Gloas是计划随Ethereum的Glamsterdam升级首次亮相的共识层组件。开发人员发现,该漏洞源于客户端处理验证者公钥及其对应索引的方式,特别是在全局缓存机制中。在分叉边界处,该缓存可能会受到污染,从而在特定的攻击条件下导致共识分裂。
在网络正常运行的情况下,最终确定的存款应在所有链上产生相同的验证者集合。然而,开发人员指出,这种一致性可能在分叉边界处破裂,使网络面临定向攻击的风险。
所述的攻击要求敌手在分叉前准备三个待处理的验证者存款。攻击者向现有验证者提交一大笔余额充值,并引入两个新密钥:一个用于构建器凭证(A),另一个用于标准验证者凭证(B)。
在主要的、即规范性的Ethereum链上,大额充值消耗了可用的余额周转额度,导致两个新验证者A和B都在分叉后被处理。在此序列中,A成为构建器,而B获得下一个可用的验证者索引。
在攻击者操作的操纵侧链上,已经充值的验证者在分叉前被故意惩罚(Slashing),这意味着其存款被绕过。在这里,验证者A被更早激活,可能会占用原本属于B的验证者索引。
缓存漏洞的后果与技术修复
有缺陷的缓存机制未能正确区分分叉边界处的链共识结果,错误地假设验证者分配将保持同步。因此,客户端会将验证者A的密钥导入全局缓存,导致受影响的节点在分叉期间拒绝B的有效签名,并可能引发链分裂。
在分叉时,受此漏洞影响的节点将拒绝规范链上验证者B的所有有效签名,导致它们从大多数节点中分叉出去。
该漏洞在技术上难以利用,因为它依赖于精确计时的操作,包括协调一致的验证者惩罚以及替代侧链的操作。意外利用被认为不太可能发生。
安全补丁限制将验证者密钥添加到全局公钥缓存中,直到其激活资格纪元(Epoch)得到最终确定为止。这确保了只有状态确立且不可变的验证者才会被客户端全局识别。
目前尚不清楚其他Ethereum共识客户端是否存在类似的漏洞,因为在Glamsterdam升级前夕,开发和完善工作仍在继续。这种方法强调了以太坊开发人员在升级引入关键边界附近的新共识边缘情况时需要保持警惕的重要性。