本文详细介绍了Solana网络中的一个漏洞,该漏洞可能导致节点崩溃,进而阻碍网络共识。Anza核心工程师及时修补了该漏洞,并与社区合作确保大多数验证者升级到最新版本以防止利用。文中还分析了漏洞的根本原因及修复过程,展示了有效的安全响应策略。
在 2024-08-05 23:00 UTC,Anza 核心工程师意识到一个由外部研究人员报告的漏洞,该漏洞影响了 Agave 和 Jito 验证者客户端。该漏洞可能允许攻击者逐个崩溃领导者,最终导致网络停摆。Anza 核心工程师创建了一个补丁,并由多个第三方审计公司进行了审计,然后与更广泛的 Solana 操作社区合作,应用该补丁。到 2024-08-08 20:00 UTC,超过 67% 的网络已应用该补丁,从而使网络共识免受此次干扰。任何未打补丁的基础设施仍然可能受到攻击,建议验证者升级(来自 Discord 的指示)。
Solana 工具链提供了程序开发和部署的标准工作流程。该工具链抽象掉许多应用程序开发者无需担心的低级细节。然而,Solana 运行时是灵活的,并且还支持在标准工作流程之外创建的程序。
一个值得关注的事项是生成程序(ELF)文件中的对齐。通过 Solana 工具链创建的程序文件有适当的对齐。但是,外部工具链开发的程序可能没有这样的保证。如果部署了一个对齐不当的程序,运行时负责在执行时验证程序是否正确构造。
该漏洞是由于对地址对齐的错误假设造成的。如果未打补丁的节点试图执行一个破坏该特定假设的程序,该节点可能会由于主机段错误而崩溃。任何未打补丁的节点都可能容易受到这种崩溃的影响。
该漏洞源于 CALL_REG 操作码与二进制代码布局之间的意外交互。CALL_REG 要求跳转的代码与指令边界对齐。通常情况下,这是成立的,因为链接器只会发出具有对齐 .text 段的 ELF 文件。solana 虚拟机对 CALL_REG 的实现假设它调用的代码是从经过清理的 ELF 文件加载的,并且其 .text 段是经过对齐的,正如所要求的。但是,ELF 清理省略了对 .text 段的对齐检查,允许恶意构造的 ELF 文件指定一个不对齐的 .text 段。当对不对齐的代码发出 CALL_REG 时,会导致虚拟机跳转到无效地址,可能导致主机段错误,杀死验证者进程。
攻击者可以利用此漏洞,首先编写一个发出 CALL_REG 操作码的程序,操纵程序的 ELF 文件以不对齐其 .text 段,最后正常部署并调用该程序在 solana 网络上。
在超过 67% 的验证者升级之前,网络仅在此漏洞下是安全的。这里的安全挑战是,发布补丁供验证者应用也会暴露潜在的漏洞。至关重要的是,最小化核心开发者传播更新与网络超大多数用户部署补丁之间的时间。
核心贡献者能够利用现有网络,私下联系持有较大权益的验证者运营商(如在 solanabeach.io 或 solanacompass.com 上所反映的),从而最小化漏洞被暴露和利用的风险。初始消息通知验证者发现了一个漏洞,并表示将在特定日期和时间的后续消息中提供进一步的指示。第一条消息的哈希由多个社区成员在公共渠道上发布,以便任何收到该消息的人验证其真实性。哈希为:
07ff4f17c96a632726e209b4afbbcf4e6ba089989cb485b8abbe85da3f558cd9
在 2024-08-08 14:00 UTC,按照之前指定的时间,分发了补丁。随补丁一起,包含了验证补丁文件内容哈希的方法以及构建补丁二进制文件的说明。补丁和哈希链接如下:
在补丁公开分享并网络被视为安全后,为受影响的代码库创建了已打补丁的版本,并通过正常渠道进行沟通。
https://github.com/solana-labs/solana/releases/tag/v1.18.22
https://github.com/anza-xyz/agave/releases/tag/v1.18.22 https://github.com/jito-foundation/jito-solana/releases/tag/v1.18.22-jito
如果你是安全研究人员或开发者,并且发现了潜在的漏洞,请按照以下链接中的说明通过适当的安全渠道提高意识,链接位于 Agave GitHub 库中:
https://github.com/anza-xyz/agave/blob/master/SECURITY.md
- 原文链接: anza.xyz/blog/agave-netw...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!