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博客 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/645299.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Security架构

文章目录 过滤器回顾DelegatingFilterProxyFilterChainProxySecurityFilterChainSecurity Filters打印Security Filters将自定义过滤器添加到过滤器链 Handling Security ExceptionsSaving Requests Between AuthenticationRequestCachePrevent the Request From Being Saved R…

《游戏-01_3D-开发》之—人物动画控制器

创建变量, 创建线, 连接, 选中线会变为蓝色,新增变量, 设置线, 双击子层进入子层, 创建变量, 双击SkillPanel 拖拽好之后返回上一层, 依次连接, 设置线&#…

[Tomcat] [从安装到关闭] MAC部署方式

安装Tomcat 官网下载:Apache Tomcat - Apache Tomcat 9 Software Downloads 配置Tomcat 1、输入cd空格,打开Tomca目录,把bin文件夹直接拖拉到终端 2、授权bin目录下的所有操作:终端输入[sudo chmod 755 *.sh],回车 …

【GitHub项目推荐--不错的 Go 学习项目】【转载】

开源实时性能分析平台 Pyroscope 是基于 Go 的开源实时性能分析平台,在源码中添加几行代码 pyroscope 就能帮你找出源代码中的性能问题和瓶颈、CPU 利用率过高的原因,调用树展示帮助你理解程序,支持 Go、Python、Ruby 语言。 Pyroscope 可以…

k8s的图形化工具---rancher

rancher是一个开源的企业级多集群的k8s管理平台。 rancher和k8s的区别:都是为了容器的调度和编排系统。但是rancher不仅可以调度还可以管理整个k8s集群。 rancher自带监控(普罗米修斯) 实验部署 master01 20.0.0.32 node01 20.0.0.34 node02 20.0.0.35 test …

【Java Kubernates】Java调用kubernates提交Yaml到SparkOperator

背景 目前查询框架使用的是trino,但是trino也有其局限性,需要准备一个备用的查询框架。考虑使用spark,spark operator也已经部署到k8s,现在需要定向提交spark sql到k8s的sparkoperator上,使用k8s资源执行sql。 对比 …

linux安装docker--更具官网教程

1.访问https://docs.docker.com/ 2.进入download 3输入cento 或者直接访问地址Install Docker Engine on CentOS | Docker Docs 4一步一步根据官网命令走 2安装 3 4 方式一: service docker start(开启) service docker status&#xff08…

使用PowerShell命令行,批量修改文件编码

目录 ■前言 ■PowerShell命令 ■效果 ■前言 今天统计修改代码量,使用工具时,发现有些代码无法统计。 原因时UTF-8中有某些特殊字符,工具不能识别。 但是,如果把代码转换为SJIS格式,就能正常统计了。 因此&…

听筒及麦克风电路时序分析

打电话的时候。当没有免提的时候,用的是mic1,麦克风1居然是在J7尾插座子上,所以要把手机的下面贴近嘴巴。mic1的信号给到音频编解码u21,u21通过i2s线给cpu, 然后给基带cpu,然后通过射频发射出去。当要听声音的时候,射频…

【数学建模】插值与拟合

文章目录 插值插值方法用Python解决插值问题 拟合最小二乘拟合数据拟合的Python实现 适用情况 处理由试验、测量得到的大量数据或一些过于复杂而不便于计算的函数表达式时,构造一个简单函数作为要考察数据或复杂函数的近似 定义 给定一组数据,需要确定满…

【软件测试】学习笔记-性能测试场景的分类

性能测试场景的重要程度类似于业务测试的 case,case 是你进行业务测试的指引,case 是否完善也直接决定了测试的覆盖率。同理,场景是传递执行性能测试的步骤和目的,关于这两点是你一定要清楚的。 首先认识下最重要的三个性能场景&…

Java项目:12 Springboot的垃圾回收管理系统

作者主页:舒克日记 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 1.介绍 垃圾分类查询管理系统,对不懂的垃圾进行查询进行分类并可以预约上门回收垃圾。 让用户自己分类垃圾, 按国家标准自己分类&#x…

解读IP风险画像标签:深度洞察网络安全

在当今数字化的世界中,网络安全成为企业和个人关注的焦点。IP风险画像标签作为网络安全的利器,扮演着深度洞察网络风险的角色。本文将深入解读IP风险画像标签,揭示其在网络安全领域的重要性和功能。 1. IP风险画像标签是什么? I…

Jmeter-解析返回参数-解析并操作json

工作中经常会遇到JSON字符串,接口的入参和返回参数也多数是JSON格式,自动化项目中常需要写脚本处理返回结果,本文总结java或jmeter的beanshell脚本中对于json的常用操作 json字符串的格式 简单的JSON字符串:{“key”:“value”,“…

【服务器数据恢复】EqualLogic存储磁盘坏道导致存储不可用的数据恢复案例

服务器数据恢复环境&故障: 某公司IT部门一台某品牌EqualLogic PS6100系列存储在运行过程中突然崩溃。 服务器管理员对故障服务器存储进行初步检查,经过检测发现导致该服务器存储无法正常工作的原因是该存储中raid5磁盘阵列内有2块硬盘出现故障离线&a…

数字图像处理(实践篇)二十七 Python-OpenCV 滑动条的使用

目录 1 涉及的函数 2 实践 1 涉及的函数 ⒈ setWindowProperty()用于设置GUI应用程序的属性 cv2.setWindowProperty(windowsName, prop_id, prop_value) 参数: ①

UI 自动化测试框架:PO 模式+数据驱动

1. PO 设计模式简介 什么是 PO 模式? PO(PageObject)设计模式将某个页面的所有元素对象定位和对元素对象的操作封装成一个 Page 类,并以页面为单位来写测试用例,实现页面对象和测试用例的分离。 PO 模式的设计思想与…

Nodejs--Linux环境安装及配置

一、下载安装包 (1)通过命令uname -a 查看Linux系统版本。 (2)打开官网下载地址: https://www.nodejs.com.cn/ 选择对应的版本下载安装包。 (3)将下载好的安装包传到Linux对应目录进行解压。…

想要透明拼接屏展现更加效果,视频源是技术活,尤其作为直播背景

随着科技的飞速发展,视频制作和显示技术也在不断进步。透明拼接屏视频作为一种新型的视频形式,在许多场合都得到了广泛的应用。尼伽小编将深入探讨透明拼接屏视频的制作过程、要求、清晰度,以及目前常作为直播背景的优势。 一、透明拼接屏视频…

力扣hot100 两两交换链表中的节点 双指针

Problem: 24. 两两交换链表中的节点 复杂度 时间复杂度: O ( n ) O(n) O(n) 空间复杂度: O ( 1 ) O(1) O(1) Code /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { …