技术详解 | CertiK揭示秘密修复的Solana核心漏洞

1. Solana漏洞起因

8月9日,Solana验证者和客户端团队齐心协力解决了一个严重的安全漏洞。Solana验证者Laine表示,这一过程始于8月7日,当时Solana基金会通过私人渠道联系了知名网络运营商。此次联系是秘密修补漏洞策略的一部分,旨在防止漏洞被以任何方式利用。补丁通过Anza工程师的GitHub存储库提供,使运营商能够独立验证和应用更改。

这次秘密修复的详情可以在GitHub存储库最近一次发布的Mainnet-beta中找到,唯一的改变是rbpf SVM虚拟机,从8月9日的rbpf SVM虚拟机唯一pull可以定位到漏洞所在,虽然这一过程是秘密进行的,但是依然是通过开源存储库,Solana顺利地过渡了这次安全性危机。这个漏洞究竟有多大危害,以至于让Solana团队如此重视?

CertiK团队对这一漏洞进行了深入分析。漏洞存在于rbpf SVM虚拟机中,SVM(Solana Virtual Machine)是Solana区块链生态系统的核心组件之一,负责执行智能合约和去中心化应用程序。其核心原理是利用即时编译技术实现高性能的智能合约执行。由于Solana的高吞吐量和低延迟特性,SVM在Solana中扮演着至关重要的角色,为开发者提供了一个高效的去中心化应用开发环境,并且对Solana的安全性起着重要作用。

本文将会详细分析漏洞的核心原理与影响。

2. SVM虚拟机存在严重的指令漏洞

SVM是Solana区块链平台的关键组成部分,用于提供高效、安全的执行环境,用于运行智能合约和分布式应用程序。SVM的设计采用了rbpf字节码解释器(interpreter)和即时编译器(JIT),通过全局状态和智能合约接口实现与区块链网络的交互。

关于SVM虚拟机如何加载运行elf智能合约可以参考上一次CertiK对rbpf的漏洞分析章节中关于SVM运行模式介绍。

这次漏洞的核心补丁是commit对rbpf SVM虚拟机的修复。漏洞的根源在于精心构造的`callx regs`指令会导致rbpf SVM虚拟机崩溃。接下来,我们将分析`callx regs`指令如何引发如此严重的影响。

首先,我们需要了解SVM虚拟机中`SBF`指令`callx regs`的运行模式和基础信息:

a. SBF指令基本的寻址

`SBF`指令的基本结构如下图所示,其中`program_vm_addr`是SVM虚拟机中指令的起始地址。对于SBFV1版本的智能合约,`program_vm_addr`计算公式为`text_section.sh_addr.saturating_add(ebpf::MM_PROGRAM_START)`。`text_section.sh_addr`是ELF头部的`text address`。在SVM虚拟机中,每条`SBF`指令的大小为`ebpf::INSN_SIZE`,即8字节。下图中的 `program.len`表示n+1条`SBF`指令的总大小。

b. Callx regs的运行模式

在SVM虚拟机中,`callx regs`指令的运行模式如下:`target_pc`是传入 `callx`指令的寄存器值,并作为SVM虚拟机中的程序计数器(PC)偏移量。在执行`callx regs`时,两个关键检查用于确保寄存器值不越界。

  1. 检查程序起始地址:确保`target_pc`不小于程序的起始地址。`program_vm_addr`代表`SBF`程序的起始地址。检查条件是`program_vm_addr <= target_pc`,确保`target_pc`不低于程序的起始地址,从而避免程序跳转到非法地址。

  2. 检查程序结束地址:确保`target_pc`不超过程序的最大地址。`program.MaxAddr`代表`SBF`指令在程序中的起始地址加上整个程序的指令大小。检查条件是`target_pc < program.MaxAddr`,确保`target_pc`在程序的有效范围内,避免越界访问。

如果这两个条件都满足,则程序会安全地跳转到指定的PC地址。

c. 漏洞的root cause

通过前文对`SBF`指令基本寻址和`callx regs`运行模式的了解,我们可以分析 JIT模式下`callx regs`存在漏洞的关键原因。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值