安全之安全(security²)博客目录导读
ATF(TF-A)安全通告汇总
目录
一、ATF(TF-A)安全通告 TFV-3 (CVE-2017-7563)
二、CVE-2017-7563
一、ATF(TF-A)安全通告 TFV-3 (CVE-2017-7563)
Title | RO内存始终在AArch64 Secure EL1下可执行 |
---|---|
CVE ID | CVE-2017-7563 |
Date | 06 Apr 2017 |
Versions Affected | v1.3 (since Pull Request #662) |
Configurations Affected | xlat_tables库的AArch64 BL2, TSP或其他用户在AArch64安全EL1执行 |
Impact | 意外的特权升级 |
Fix Version | Pull Request #924 |
Credit | ARM |
二、CVE-2017-7563
ARM可信固件(TF-A)中的翻译表库(lib/xlat_tables和lib/xlat_tables_v2下)提供api来帮助MMU中的程序翻译表(translation tables)。xlat_tables client以mmap_region结构的形式指定其所需的内存映射。每个mmap_region都有由mmap_attr_t枚举类型表示的内存属性。它包含控制数据访问权限(MT_RO/MT_RW)和指令执行权限(MT_EXECUTE/MT_EXECUTE_NEVER)的标志。因此,同时指定MT_RO和MT_EXECUTE_NEVER的映射应该导致一个只读(RO),不可执行的内存区域。
对于在Secure EL1上执行的AArch64映像,此功能不能正确工作。任何映射为RO的内存区域将始终是可执行的,无论client是否指定了MT_EXECUTE或MT_EXECUTE_NEVER。
已知该漏洞会影响启用SEPARATE_CODE_AND_RODATA构建选项的平台上的BL2和TSP(Test Secure Payload)镜像,其中包括所有ARM标准平台以及上游的Xilinx和NVidia平台。这些平台上这些镜像的RO数据意外地是可执行的,而不是不可执行的。其他平台或xlat_tables clients也可能受到影响。
该漏洞主要在Pull Request #662之后出现。在此之前,xlat_tables client不能将指令执行权限单独指定给数据访问权限。所有RO normal内存区域都是隐式可执行的。在Pull Request #662之前,该漏洞只会在映射为RO的设备内存中出现;但很少使用此映射,尽管上游QEMU平台在使用DEVICE2_BASE构建选项时使用此映射。
请注意,利用此漏洞还需要一个或多个单独的漏洞。
该漏洞是由于错误地处理了转换表中的execute-never位。EL3转换机制(translation regime)使用单个XN位来确定一个区域是否可执行。安全EL1&0转换机制(translation regime)处理2个虚拟地址(VA)范围,因此使用2位,UXN和PXN。xlat_tables库只处理XN位,它映射到Secure EL1&0转换机制(translation regime)中的UXN。因此,该程序具有安全EL0执行权限,但始终将内存保留为安全EL1的可执行内存。
以下方法可减轻该漏洞:
1)xlat_tables库通过设置SCTLR_ELx.WXN位确保所有读写(RW)内存区域都是不可执行的。这将覆盖转换表中XN、UXN或PXN位的任何值。参见enable_mmu()函数:
sctlr = read_sctlr_el##_el(); \
sctlr |= SCTLR_WXN_BIT | SCTLR_M_BIT; \
2)AArch32配置不受影响。这里的XN位控制当前执行的转换机制的执行权限,这是期望的行为。
3)ARM TF EL3代码(例如BL1和BL31)通过设置SCR_EL3.SIF位确保映射到安全世界的所有非安全内存都是不可执行的。参见el3_common_macros中的el3_arch_init_common宏。
参考:9.3. Advisory TFV-3 (CVE-2017-7563) — Trusted Firmware-A 2.9.0 documentation