ATF(TF-A)安全通告TF-V11——恶意的SDEI SMC可能导致越界内存读取(CVE-2023-49100)

本文主要是介绍ATF(TF-A)安全通告TF-V11——恶意的SDEI SMC可能导致越界内存读取(CVE-2023-49100),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一、ATF(TF-A)安全通告TFV-11 (CVE-2023-49100)

二、透过事务看本质SDEI是干啥的呢?

三、CVE-2023-49100

1、GICv2 systems

2、GICv3 systems

四、漏洞修复


一、ATF(TF-A)安全通告TFV-11 (CVE-2023-49100)

Title

恶意的SDEI SMC可能导致越界内存读取(out of bound memory read)

CVE ID

CVE-2023-49100

Date

Reported on 12 Oct 2023

受影响的版本

TF-A releases v1.5 to v2.9 LTS releases lts-v2.8.0 to lts-v2.8.11

受影响的配置

使能SDEI support的平台(Platforms)

影响

拒绝服务攻击Denial of Service (secure world panic)

Fix Version

a7eff3477 “fix(sdei): 确保中断ID是有效的ensure that interrupt ID is valid”

Credit

Christian Lindenmeier @_chli_ Marcel Busch @0ddc0de IT Security Infrastructures Lab

二、透过事务看本质SDEI是干啥的呢?

        软件委托异常接口 (SDEI:Software Delegated Exception Interface) 是非安全世界的Arm规范,用于向固件注册处理程序以接收有关系统事件的通知。固件将首先通过异步异常的方式接收系统事件,并在响应中安排注册的处理程序在非安全EL中执行。

        与SDEI调度程序交互(发出SDEI请求和接收通知)的普通世界软件称为SDEI 客户端。即使客户端在屏蔽异常的情况下执行时,它也会在注册的处理程序处收到事件通知。    

        其实就是在EL1(或EL2)能够注册SDEI中断,其实就是切换到EL3中将该中断注册成group0中断,然后当事件到来时,中断将直接target到EL3,在EL3的处理程序中会dispatcher到EL1(EL2)中再处理。

        其实就是想让RAS、watchdog中断能够快速响应,而且不被EL1(或EL2)屏蔽。也相当于达到了NMI的效果。

97d72e7c80db4d239fbf59835b1e970e.png

三、CVE-2023-49100

        此安全通告描述了SDEI服务中的一个漏洞,其中一个恶意的非安全调用者调用无效中断ID的SDEI_INTERRUPT_BIND SMC调用,最终导致越界内存读取。

        SDEI_INTERRUPT_BIND用于将任何物理中断绑定到正常优先级的SDEI事件。中断可以是私有外设中断(PPI)或共享外设中断(SPI)。

        详细信息请参考SDEI Specification中SDEI_INTERRUPT_BIND。也可参考该博客13-SDEI: Software Delegated Exception Interface-CSDN博客

        当SDEI客户端(SDEI client)传递一个没有由GIC实现的中断ID时,该漏洞就存在。这将导致data abort异常或EL3 panic,具体取决于系统中使用的GIC版本。

1、GICv2 systems

Call stack:sdei_interrupt_bind(interrupt ID)-> plat_ic_get_interrupt_type(interrupt ID)-> gicv2_get_interrupt_group(interrupt ID)-> gicd_get_igroupr(distributor base, interrupt ID)-> gicd_read_igroupr(distributor base, interrupt ID).

        gicd_read_igroupr()最终将对未实现的IGROUPR寄存器执行MMIO读取。这可能导致data abort或对EL3 memory区域的随机访问。

2、GICv3 systems

Call stack:sdei_interrupt_bind(interrupt ID)-> plat_ic_get_interrupt_type(interrupt ID)-> gicv3_get_interrupt_group(interrupt ID, core ID)-> is_sgi_ppi(interrupt ID)

        is_sgi_ppi()将在遇到无效的中断ID时以EL3 panic结束。

四、漏洞修复

        通过确保SDEI客户端提供的中断ID是有效的PPI或SPI来修复该漏洞,否则返回指示参数无效的错误代码。

/* Bind an SDEI event to an interrupt */
static int sdei_interrupt_bind(unsigned int intr_num)
{sdei_ev_map_t *map;bool retry = true, shared_mapping;/* Interrupt must be either PPI or SPI */if (!(plat_ic_is_ppi(intr_num) || plat_ic_is_spi(intr_num)))return SDEI_EINVAL;

7fe7748d2f2844bc90c167ca06dadff4.png

参考:

1、9.11. Advisory TFV-11 (CVE-2023-49100) — Trusted Firmware-A 2.10.0 documentation

2、SDEI初探-透过事务看本质 

3、13-SDEI: Software Delegated Exception Interface-CSDN博客 

 

这篇关于ATF(TF-A)安全通告TF-V11——恶意的SDEI SMC可能导致越界内存读取(CVE-2023-49100)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/642752

相关文章

javacv依赖太大导致jar包也大的解决办法

《javacv依赖太大导致jar包也大的解决办法》随着项目的复杂度和依赖关系的增加,打包后的JAR包可能会变得很大,:本文主要介绍javacv依赖太大导致jar包也大的解决办法,文中通过代码介绍的... 目录前言1.检查依赖2.更改依赖3.检查副依赖总结 前言最近在写项目时,用到了Javacv里的获取视频

Redis实现高效内存管理的示例代码

《Redis实现高效内存管理的示例代码》Redis内存管理是其核心功能之一,为了高效地利用内存,Redis采用了多种技术和策略,如优化的数据结构、内存分配策略、内存回收、数据压缩等,下面就来详细的介绍... 目录1. 内存分配策略jemalloc 的使用2. 数据压缩和编码ziplist示例代码3. 优化的

深入解析C++ 中std::map内存管理

《深入解析C++中std::map内存管理》文章详解C++std::map内存管理,指出clear()仅删除元素可能不释放底层内存,建议用swap()与空map交换以彻底释放,针对指针类型需手动de... 目录1️、基本清空std::map2️、使用 swap 彻底释放内存3️、map 中存储指针类型的对象

Python内存优化的实战技巧分享

《Python内存优化的实战技巧分享》Python作为一门解释型语言,虽然在开发效率上有着显著优势,但在执行效率方面往往被诟病,然而,通过合理的内存优化策略,我们可以让Python程序的运行速度提升3... 目录前言python内存管理机制引用计数机制垃圾回收机制内存泄漏的常见原因1. 循环引用2. 全局变

SysMain服务可以关吗? 解决SysMain服务导致的高CPU使用率问题

《SysMain服务可以关吗?解决SysMain服务导致的高CPU使用率问题》SysMain服务是超级预读取,该服务会记录您打开应用程序的模式,并预先将它们加载到内存中以节省时间,但它可能占用大量... 在使用电脑的过程中,CPU使用率居高不下是许多用户都遇到过的问题,其中名为SysMain的服务往往是罪魁

使用Java读取本地文件并转换为MultipartFile对象的方法

《使用Java读取本地文件并转换为MultipartFile对象的方法》在许多JavaWeb应用中,我们经常会遇到将本地文件上传至服务器或其他系统的需求,在这种场景下,MultipartFile对象非... 目录1. 基本需求2. 自定义 MultipartFile 类3. 实现代码4. 代码解析5. 自定

C++ vector越界问题的完整解决方案

《C++vector越界问题的完整解决方案》在C++开发中,std::vector作为最常用的动态数组容器,其便捷性与性能优势使其成为处理可变长度数据的首选,然而,数组越界访问始终是威胁程序稳定性的... 目录引言一、vector越界的底层原理与危害1.1 越界访问的本质原因1.2 越界访问的实际危害二、基

MySQL 数据库表操作完全指南:创建、读取、更新与删除实战

《MySQL数据库表操作完全指南:创建、读取、更新与删除实战》本文系统讲解MySQL表的增删查改(CURD)操作,涵盖创建、更新、查询、删除及插入查询结果,也是贯穿各类项目开发全流程的基础数据交互原... 目录mysql系列前言一、Create(创建)并插入数据1.1 单行数据 + 全列插入1.2 多行数据

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

MySQL 内存使用率常用分析语句

《MySQL内存使用率常用分析语句》用户整理了MySQL内存占用过高的分析方法,涵盖操作系统层确认及数据库层bufferpool、内存模块差值、线程状态、performance_schema性能数据... 目录一、 OS层二、 DB层1. 全局情况2. 内存占js用详情最近连续遇到mysql内存占用过高导致