当前位置: 首页 > news >正文

ATF(TF-A)安全通告 TFV-1 (CVE-2016-10319)

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

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

目录

一、ATF(TF-A)安全通告 TFV-1 (CVE-2016-10319)

二、CVE-2016-10319


一、ATF(TF-A)安全通告 TFV-1 (CVE-2016-10319)

Title

错误的固件更新SMC可能导致意外的大数据拷贝到安全内存中

CVE ID

CVE-2016-10319

Date

18 Oct 2016

Versions Affected

v1.2 and v1.3 (since commit 48bfb88)

Configurations Affected

使用AArch64 BL1的平台加上在BL31之前执行的不受信任的非安全世界固件更新代码

Impact

将意外的大数据复制到BL1平台代码报告的空闲安全内存中

Fix Version

Pull Request #783

Credit

IOActive

二、CVE-2016-10319

        通用可信固件(TF-A) BL1代码包含一个SMC接口,该接口在冷复位后短暂可用,以支持固件更新(Firmware Update,FWU)功能(也称为恢复模式)。这允许在非安全世界中下实现大多数FWU功能,同时在BL1中保留基本的镜像身份验证功能。当冷启动到达EL3 Runtime Software(如AArch64系统上的BL31)时,FWU SMC接口将被EL3 Runtime SMC接口取代。平台可以选择使用多少FWU功能(如果有的话)。

        BL1 FWU SMC处理代码,目前只支持AArch64,包含几个漏洞,当所有以下条件满足时可能会被利用:

        1. 平台代码使用启用了TRUSTED_BOARD_BOOT构建选项的TF BL1。

        2. 平台代码安排在BL31启动之前,在冷启动路径上执行不受信任的非安全世界FWU代码。从这个意义上说,不可信是指不在ROM中或未经过身份验证或已被攻击者以其他方式执行的代码。

        3. 平台代码从bl1_plat_mem_check()的ARM平台版本复制下面描述的不安全模式。

        这些漏洞包括在处理FWU_SMC_IMAGE_COPY SMC时输入验证检查中的潜在整数溢出。SMC实现的目的是将镜像复制到安全内存中,以供后续身份验证,但是这些漏洞可能允许攻击者将意外的大数据复制到安全内存中。请注意,需要一个单独的漏洞来利用这些漏洞;例如,一种让系统根据意外的安全内存内容改变其行为的方法。

        其中两个漏洞位于bl1/bl1_fwu.c中的bl1_fwu_image_copy()函数。下面列出了这些,参考v1.3标记版本的代码:   

1)Line 155:

/** If last block is more than expected then* clip the block to the required image size.*/
if (image_desc->copied_size + block_size >image_desc->image_info.image_size) {block_size = image_desc->image_info.image_size -image_desc->copied_size;WARN("BL1-FWU: Copy argument block_size > remaining image size."" Clipping block_size\n");
}/* Make sure the image src/size is mapped. */
if (bl1_plat_mem_check(image_src, block_size, flags)) {WARN("BL1-FWU: Copy arguments source/size not mapped\n");return -ENOMEM;
}INFO("BL1-FWU: Continuing image copy in blocks\n");/* Copy image for given block size. */
base_addr += image_desc->copied_size;
image_desc->copied_size += block_size;
memcpy((void *)base_addr, (const void *)image_src, block_size);
...

        当在多个smc上以块方式执行镜像复制操作时,执行此代码片段。block_size是一个SMC参数,因此可能被攻击者控制。一个非常大的值可能会导致第一个if语句中的整数溢出,这将绕过检查,允许将未剪切的block_size传递给bl1_plat_mem_check()。如果bl1_plat_mem_check()也通过了,这可能会导致意外的大数据拷贝到安全内存中。

2)Line 206:

/* Make sure the image src/size is mapped. */
if (bl1_plat_mem_check(image_src, block_size, flags)) {WARN("BL1-FWU: Copy arguments source/size not mapped\n");return -ENOMEM;
}/* Find out how much free trusted ram remains after BL1 load */
mem_layout = bl1_plat_sec_mem_layout();
if ((image_desc->image_info.image_base < mem_layout->free_base) ||(image_desc->image_info.image_base + image_size >mem_layout->free_base + mem_layout->free_size)) {WARN("BL1-FWU: Memory not available to copy\n");return -ENOMEM;
}/* Update the image size. */
image_desc->image_info.image_size = image_size;/* Copy image for given size. */
memcpy((void *)base_addr, (const void *)image_src, block_size);
...

        该代码片段在镜像复制操作的第一次调用期间执行。block_size和image_size都是SMC参数。一个非常大的image_size值可能会导致第二个if语句中的整数溢出,这将绕过检查,允许继续执行。如果bl1_plat_mem_check()也通过了,这可能会导致意外的大数据拷贝到安全内存中。

        如果平台对bl1_plat_mem_check()的实现是正确的,那么它可能有助于防止上述2个漏洞被利用。然而,此函数的ARM平台版本包含类似的漏洞:

        plat/arm/common/arm_bl1_fwu.c中bl1_plat_mem_check()函数的第88行:

while (mmap[index].mem_size) {if ((mem_base >= mmap[index].mem_base) &&((mem_base + mem_size)<= (mmap[index].mem_base +mmap[index].mem_size)))return 0;index++;
}
...

        这个函数检查传递的内存区域是否在ARM平台映射的一个区域内。这里,mem_size可以是从bl1_fwu_image_copy()传递过来的block_size。mem_size的值太大可能导致整数溢出,导致函数错误地返回success。复制此不安全模式的平台将具有相同的漏洞。

 

参考:9.1. Advisory TFV-1 (CVE-2016-10319) — Trusted Firmware-A 2.9.0 documentation

 

相关文章:

ATF(TF-A)安全通告 TFV-1 (CVE-2016-10319)

安全之安全(security)博客目录导读 ATF(TF-A)安全通告汇总 目录 一、ATF(TF-A)安全通告 TFV-1 (CVE-2016-10319) 二、CVE-2016-10319 一、ATF(TF-A)安全通告 TFV-1 (CVE-2016-10319) Title 错误的固件更新SMC可能导致意外的大数据拷贝到安全内存中 CVE ID CVE-2016-10319 …...

说说我最近筛简历和面试的感受。。

大家好&#xff0c;我是鱼皮。 都说现在行情不好、找工作难&#xff0c;但招人又谈何容易&#xff1f;&#xff01; 最近我们公司在招开发&#xff0c;实习社招都有。我收到的简历很多&#xff0c;但认真投递的、符合要求的却寥寥无几&#xff0c;而且都是我自己看简历、选人…...

Mysql /etc/my.cnf参数详解(一)

[mysqld] #server相关 server_id176452388 //每个MySQL服务器都需要具有唯一的server_id值 super_read_only 0 //不开启只读&#xff0c;在slave节点会开启即super_read_only 1 port 3306 //指定了Mysql开放的端口&#xff1b; default-storage-engine InnoDB skip-name…...

用最少数量的箭引爆气球【贪心算法】

用最少数量的箭引爆气球 有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组 points &#xff0c;其中points[i] [xstart, xend] 表示水平直径在 xstart 和 xend之间的气球。你不知道气球的确切 y 坐标。 一支弓箭可以沿着 x 轴从不同点 完全垂直 地…...

Matlab论文插图绘制模板第109期—特征渲染的标签气泡散点图

在之前的文章中&#xff0c;分享了Matlab标签散点图的绘制模板&#xff1a; 特征渲染的标签散点图&#xff1a; 进一步&#xff0c;再来分享一下特征渲染的标签气泡散点图的绘制模板&#xff0c;从而可以再添加一个维度的信息。 先来看一下成品效果&#xff1a; 特别提示&…...

音视频 ffplay命令播放媒体

播放本地文件 ffplay -window_title "test time" -ss 2 -t 10 -autoexit test.mp4 ffplay buweishui.mp3播放网络流 ffplay -window_title "rtmp stream" rtmp://202.69.69.180:443/webcast/bshdlive-pc强制解码器 mpeg4解码器&#xff1a;ffplay -vco…...

使用Fiddler模拟网络

Fiddler已经预置提供了模拟Modem速度的选项&#xff0c;其位置位于&#xff1a; Rules->Performances->Simulate Modem Speeds 勾选该选项后&#xff0c;所有通过Fiddler代理的流量都会变得用56k modem上网一般。 要直观观察限速后的效果&#xff0c;最好使用运行在浏览…...

【Axure高保真原型】多图表动态切换

今天和大家分享多图表动态切换的原型模板&#xff0c;点击不同的图标可以动态切换对应的表&#xff0c;包括柱状图、条形图、饼图、环形图、折线图、曲线图、面积图、阶梯图、雷达图&#xff1b;而且图表数据可以在左侧表格中动态维护&#xff0c;包括增加修改和删除&#xff0…...

笔试题-访问控制修饰符范围

...

基于飞腾芯片的设计与调试入门指导

一、啥是自主可控 国产CPU现在厂家细算起来其实有很多,现在华为、小米也在做自己的CPU,瑞芯微、全志等的SoC现在也是广泛应用。但是真正能叫做自主可控的CPU厂商,只有6家。那啥是自主可控?首先来不严谨的讲下现在数字芯片是怎么做的设计。FPGA大家都知道,可以通过Verilog…...

了解 HarmonyOS

引言 在开始 HarmonyOS 开发之前&#xff0c;了解其背景、特点和架构是非常重要的。本章将为你提供一个全面的 HarmonyOS 概览。 目录 什么是 HarmonyOS HarmonyOS 的发展历程 HarmonyOS 的特点 HarmonyOS 的架构 HarmonyOS 与其他操作系统的比较 1. 什么是 HarmonyOS …...

【校招VIP】产品面试之面试官的真实意图

考点介绍&#xff1a; 大厂面试时&#xff0c;面试官提出的问题除了了解经历和想法外&#xff0c;最看重的是思维逻辑能力、团队协作能力和协调能力。 『产品面试之面试官的真实意图』相关题目及解析内容可点击文章末尾链接查看&#xff01; 一、考点题目 1. 你遇到的最大的…...

实现远程访问Linux堡垒机:通过JumpServer系统进行安全的服务器管理

文章目录 前言1. 安装Jump server2. 本地访问jump server3. 安装 cpolar内网穿透软件4. 配置Jump server公网访问地址5. 公网远程访问Jump server6. 固定Jump server公网地址 前言 JumpServer 是广受欢迎的开源堡垒机&#xff0c;是符合 4A 规范的专业运维安全审计系统。JumpS…...

Go 1.21新增的 maps 包详解

maps 包提供了几个非常有用的用于操作 map 类型&#xff08;任何类型的 map&#xff09;的函数&#xff0c;本文接下来详细介绍下这几个函数。 maps.Clone 定义如下&#xff1a; func Clone[M ~map[K]V, K comparable, V any](m M) M 返回 m 的一个副本&#xff0c;因为新的…...

《向量数据库指南》——腾讯云向量数据库(Tencent Cloud VectorDB) SDK 正式开源

腾讯云向量数据库 SDK 宣布正式开源。根据介绍,腾讯云向量数据库(Tencent Cloud VectorDB)的 Python SDK 与 Java SDK 是基于数据库设计模型,遵循 HTTP 协议,将 API 封装成易于使用的 Python 与 Java 函数或类,为开发者提供了更加友好、更加便捷的数据库使用和管理方式。…...

Tutorial: Mathmatical Derivation of Backpropagation

目录 1. 概要 2. Gradient Descent 3. Chain rule 3.1 单变量基本链式法则 3.2 单变量全微分链式法则 3.3 小贴士&#xff1a;微分、导数、导函数是什么关系&#xff1f; 4. What and why backpropagation? 5. Backpropagation for a simple neural network 5.1 基于…...

如何在 Linux 中设置 SSH 无密码登录

SSH&#xff08;Secure SHELL&#xff09;是一种开源且可信的网络协议&#xff0c;用于登录远程服务器以执行命令和程序。 它还用于使用安全复制 (SCP) 命令和 rsync 命令通过网络将文件从一台计算机传输到另一台计算机。 在本文[1]中&#xff0c;我们将向您展示如何在基于 RHE…...

什么时候用增量式PID,什么时候用位置式PID

PID控制器原理&#xff1a; 增量式PID&#xff1a; 位置式PID&#xff1a; 什么时候用位置式PID&#xff0c;什么时候用增量式PID&#xff1a; 在设计PID控制器时&#xff0c;应该考虑下什么时候用增量式&#xff0c;什么时候用位置式。需要看控制器输出u与控制目标之间的关系…...

Go语言入门记录:从基础到变量、函数、控制语句、包引用、interface、panic、go协程、Channel、sync下的waitGroup和Once等

程序入口文件的包名必须是main&#xff0c;但主程序文件所在文件夹名称不必须是main&#xff0c;即我们下图hello_world.go在main中&#xff0c;所以感觉package main写顺理成章&#xff0c;但是如果我们把main目录名称改成随便的名字如filename也是可以运行的&#xff0c;所以…...

位运算进阶操作

位运算的进阶操作&#xff0c;适合做题的时候用&#xff0c;共10点 1.通过位运算与特定的位模式进行掩码操作&#xff0c;可以提取、设置或清除特定的位信息。例如&#xff0c;我们可以使用位掩码来检查一个数的二进制表示中特定位置是否为1。 bool checkBit(int num, int po…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题&#xff1a; 指定音频引擎与设备&#xff1b;播放音频文件 本文所使用的环境&#xff1a; Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题&#xff1a;3564. 季节性销售分析 题目&#xff1a; 表&#xff1a;sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)

考察一般的三次多项式&#xff0c;以r为参数&#xff1a; p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]&#xff1b; 此多项式的根为&#xff1a; 尽管看起来这个多项式是特殊的&#xff0c;其实一般的三次多项式都是可以通过线性变换化为这个形式…...