ATF(TF-A)安全通告 TFV-8 (CVE-2018-19440)

news/2024/5/18 13:32:06 标签: ATF, TF-A, CVE, 安全通告, Security, Advisory, ARM安全

安全之安全(security²)博客目录导读

ATF(TF-A)安全通告汇总

目录

ATF(TF-A)%E5%AE%89%E5%85%A8%E9%80%9A%E5%91%8A%20TFV-8%C2%A0(CVE-2018-19440)-toc" style="margin-left:0px;">一、ATF(TF-A)安全通告 TFV-8 (CVE-2018-19440)

CVE-2018-19440-toc" style="margin-left:0px;">二、CVE-2018-19440


ATF(TF-A)%E5%AE%89%E5%85%A8%E9%80%9A%E5%91%8A%20TFV-8%C2%A0(CVE-2018-19440)" style="background-color:transparent;">一、ATF(TF-A)安全通告 TFV-8 (CVE-2018-19440)

Title

不保存x0~x3寄存器可能会将信息从一个非安全世界的SMC client泄漏到另一个

CVE ID

CVE-2018-19440

Date

27 Nov 2018

Versions Affected

All

Configurations Affected

多个非安全世界SMC clients调用到AArch64 BL31

Impact

泄漏SMC返回值从一个非安全世界SMC client到另一个

Fix Version

Pull Request #1710

Credit

Secmation

CVE-2018-19440" style="background-color:transparent;">二、CVE-2018-19440

        当takeing一个异常到EL3,BL31将保存CPU上下文。其目的是在返回到调用固件的较低异常级别软件之前恢复它。然而,对于SMC异常,通用寄存器x0~x3不是保存在栈上的CPU上下文的一部分。

        根据SMC Calling Convention(SMC调用准则),最多可以通过寄存器x0~x3向调用者返回4个值。在TF-A中,这些返回值被写入CPU上下文中,通常使用include/lib/aarch64/smccc_helpers.h头文件中提供的SMC_RETx()宏之一。

       在返回调用者之前,restore_gp_registers()函数被调用。它恢复从存储在栈上的CPU上下文中获取的所有通用寄存器的值。 这包括寄存器x0~x3,可以在lib/el3_runtime/aarch64/context.S文件第339行中看到(参考commit c385955的代码版本):

        在SMC处理程序不使用所有4个返回值的情况下,其余的在CPU上下文中保持不变。因此,restore_gp_registers()恢复使用这些返回值的前一个SMC请求(或EL3的异步异常)保存的过时值。

        在存在多个非安全世界SMC clients的情况下,这种行为可能会将一些返回值从一个client泄漏到另一个。例如,如果受害者client首先发送一个返回4个值的SMC,恶意client可能会发送第二个SMC,期望没有返回值(例如,SDEI_EVENT_COMPLETE SMC)来获得受害者client的4个返回值。

        一般来说,由于存在多个非安全世界SMC clients,减轻威胁的责任在于EL2软件。当存在时,EL2软件必须trap来自EL1软件的SMC调用以确保安全行为。

        由于这个原因,TF-A不会在SMC同步异常的CPU上下文中保存x0~x3。自第一个版本以来,它一直是这样运行的。

        我们可以确认,至少上游基于kvm的系统减轻了这种威胁,因此不受此问题的影响。应该审核其他EL2软件以评估此威胁的影响。

        EL2软件可能会发现减轻这种威胁有些繁重,因为对于所有smc,它都需要知道哪些返回寄存器包含有效数据,因此它可以清除任何未使用的返回寄存器。另一方面,在EL3中减轻这个问题相对容易。因此,TF-A现在将通过在调用中保留寄存器状态来确保没有信息通过寄存器x0~x3泄露。

        请注意,AArch32 TF-A不受此问题影响。SP_MIN中的SMC处理代码已经保存了所有通用寄存器——包括r0~r3,可以在include/lib/aarch32/smccc_macros.S文件第19行看到(参考commit c385955的代码版本):

参考: 9.8. Advisory TFV-8 (CVE-2018-19440) — Trusted Firmware-A 2.9.0 documentation


http://www.niftyadmin.cn/n/4941410.html

相关文章

单片机实训报告

这周我们进行了单片机实训,一周中我们通过七个项目1:P1 口输入/输出 2:继电器控制 3 音频控制 4:子程序设计 5:字符碰头程序设计 6:外部中断 7: 急救车与交通信号灯,练习编写了子程…

OpenCV之remap的使用

OpenCV中使用remap实现图像的重映射。 重映射是指将图像中的某一像素值赋值到指定位置的操作:g(x,y) f ( h(x,y) ), 在这里, g( ) 是目标图像, f() 是源图像, 而h(x,y) 是作用于 (x,y) 的映射方法函数。为了完成映射过程, 需要获得一些插值为…

救生艇(力扣)贪心 JAVA

给定数组 people 。people[i]表示第 i 个人的体重 ,船的数量不限,每艘船可以承载的最大重量为 limit。 每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit。 返回 承载所有人所需的最小船数 。 示例 1: 输入&#xff…

使用Vue实现记账清单和数据可视化图标渲染

记账清单和图标渲染 功能需求: 基本渲染 ​ * (1) 立刻发送请求获取数据 created ​ * (2) 拿到数据,存到data的响应式数据中 ​ * (3) 结合数据,进行渲染 v-for ​ * (4) 消费统计 > 计算属性 添加功能 ​ * (1) 收集表单数据 v-model …

Azure添加网络接口

添加网络接口的意义 在 Azure 上,为虚拟机添加网络接口的意义包括以下几个方面: 扩展网络带宽:通过添加多个网络接口,可以增加虚拟机的网络带宽,提高网络传输速度和数据吞吐量。实现网络隔离:每个网络接口…

linux——mysql的高可用MHA

目录 一、概述 一、概念 二、组成 三、特点 四、工作原理 二、案例 三、构建MHA 一、基础环境 二、ssh免密登录 三、主从复制 master slave1 四、MHA安装 一、环境 二、安装node 三、安装manager 一、概述 一、概念 MHA(MasterHigh Availability&a…

文心一言 VS 讯飞星火 VS chatgpt (76)-- 算法导论7.3 1题

一、如果用go语言,为什么我们分析随机化算法的期望运行时间,而不是其最坏运行时间呢? 文心一言: 在分析算法的性能时,期望运行时间是一个重要的指标,它描述了算法在平均情况下的表现。期望运行时间考虑了所有可能的…

【代码质量】认知复杂度(COGNITIVE COMPLEXITY)一种衡量可理解性的新方法

白皮书地址 摘要:圈复杂度最初是作为“可测试性和模块控制流的“可维护性”。虽然它擅长于衡量前者,但它的数学模型不能产生一个令人满意的值来衡量后者。本文描述一种打破数学度量模型的新度量模型来评估代码,以弥补圈复杂度的缺点&#xf…