联想笔记本Bios固件中发现高危漏洞CVE-2021-3971

联想笔记本Bios固件中发现高危漏洞CVE-2021-3971

ESET 研究人员在各种联想笔记本电脑型号中发现多个漏洞,允许具有管理员权限的攻击者将用户暴露于固件级恶意软件下.

ESET 研究人员发现并分析了影响各种联想消费者笔记本电脑型号的三个漏洞。这些漏洞中的前两个——CVE-2021-3971CVE-2021-3972– 影响原本打算仅在联想消费类笔记本电脑制造过程中使用的 UEFI 固件驱动程序。不幸的是,它们也被错误地包含在生产 BIOS 映像中,而没有正确停用。攻击者可以激活这些受影响的固件驱动程序,以在操作系统运行时从特权用户模式进程直接禁用 SPI 闪存保护(BIOS 控制寄存器位和受保护范围寄存器)或 UEFI 安全启动功能。这意味着利用这些漏洞将允许攻击者在受影响的设备上部署并成功执行 SPI 闪存或 ESP 植入程序,例如LoJax或我们最新的 UEFI 恶意软件发现ESPecter

要了解我们如何找到这些漏洞,请考虑受CVE-2021-3971影响的固件驱动程序。这些驱动程序立即通过他们非常不幸(但令人惊讶的诚实)的名字引起了我们的注意:SecureBackDoor和SecureBackDoorPeim。经过初步分析,我们发现其他联想驱动程序与SecureBackDoor*驱动程序具有一些共同特征:ChgBootDxeHook和ChgBootSmm。事实证明,它们的功能更加有趣,可以被滥用来禁用 UEFI 安全启动 ( CVE-2021-3972 )。

此外,在调查上述易受攻击的驱动程序时,我们发现了第三个漏洞:SW SMI 处理函数内部的 SMM 内存损坏 ( CVE-2021-3970 )。此漏洞允许对 SMRAM 进行任意读/写,这可能导致使用 SMM 权限执行恶意代码,并可能导致部署 SPI 闪存植入。

我们于 2021 年 10 月 11日向联想报告了所有发现的漏洞。总共,受影响的设备列表包含一百多种不同的消费笔记本电脑型号,在全球拥有数百万用户,从Ideapad-3等价格实惠的型号到Legion 5等更高级的型号Pro-16ACH6 HYoga Slim 9-14ITL05。具有积极开发支持的受影响型号的完整列表已在联想咨询中发布。

除了公告中列出的型号外,我们向联想报告的其他几款设备也受到了影响,但由于它们已达到开发支持终止 (EODS),因此不会得到修复。这包括我们首次发现报告漏洞的设备:Ideapad 330-15IGM 和 Ideapad 110-15IGR。我们能够识别的此类 EODS 设备列表将在ESET 的漏洞披露存储库中提供。

联想于 2021 年 11 月 17确认了这些漏洞,并为其分配了以下 CVE:

漏洞披露时间表:

  • 2021-10-11:向联想报告漏洞
  • 2021-10-12:联想回应并确认正在调查这些问题
  • 2021-11-17:联想确认了这些漏洞,并告知我们计划的咨询发布日期 – 2022年 2 月 8
  • 2022-01-20:由于遇到开发问题,联想要求将公开披露推迟到新的日期——4月18
  • 2022-04-18:联想安全公告发布
  • 2022-04-19:ESET Research 博文发布

UEFI固件理论基础

在开始分析报告的漏洞之前,我们想先介绍一下 UEFI 协议的基本理论、系统管理模式、UEFI NVRAM 变量、UEFI 安全启动和基本的 SPI 闪存写保护。

请注意,我们的目的是仅解释理解此处报告的漏洞分析所需的最低限度。对于那些已经熟悉这些主题的人,我们建议直接跳到技术分析部分。对于那些认为此介绍不足的人,我们强烈建议您查看SentinelOne和UEFI 规范的研究人员撰写的系列博文

UEFI 服务和协议

UEFI 定义了 UEFI 驱动程序和应用程序要使用的两种类型的服务——引导 ( EFI_BOOT_SERVICES ) 和运行时 ( EFI_RUNTIME_SERVICES ) 服务。两者都通过EFI_SYSTEM_TABLE参数传递到驱动程序或应用程序的入口点。

它们提供驱动程序和应用程序完成工作所需的基本功能和数据结构,例如安装协议、定位现有协议、内存分配、UEFI 变量操作等。

UEFI 引导驱动程序和应用程序广泛使用协议。在 UEFI 的上下文中,协议只是由 GUID 标识的功能组。这些协议一旦安装,就驻留在内存中,并且可以被其他驱动程序或应用程序使用,直到调用 EFI_BOOT_SERVICES.ExitBootServices。UEFI 规范定义了许多此类协议以涵盖最常见的固件用例场景,但固件开发人员仍然能够定义自己的协议来扩展此基本功能。

UEFI 变量

UEFI 变量是 UEFI 模块用来存储各种配置数据的特殊固件存储机制,包括启动配置、UEFI 安全启动设置、证书和类似数据。这些变量始终由变量名称命名空间 (GUID) 标识

创建 UEFI 变量时,属性用于指示系统应如何存储和维护该变量——这样可以使变量持久化(在电源循环中幸存)、临时性甚至是经过身份验证的。在 NVRAM 变量的上下文中进行身份验证意味着只有在新变量数据由授权私钥正确签名的情况下才能更改变量内容——任何人都可以读取变量。

以下是其中一些属性的示例;在这里,我们只列出最重要的:

  • VARIABLE_ATTRIBUTE_NON_VOLATILE (NV) (0x00000001)
    使用此属性的变量在电源周期内持续存在,并存储在容量有限的固定硬件存储 (NVRAM) 中(通常约为 64MB)。
  • VARIABLE_ATTRIBUTE_BOOTSERVICE_ACCESS (BS) (0x00000002)
    如果设置了 BS 属性,则在执行EFI_BOOT_SERVICES.ExitBootServices后, GetVariable函数将看不到没有设置RT属性的变量。
  • VARIABLE_ATTRIBUTE_RUNTIME_ACCESS (RT) 0x00000004) 
    要在执行EFI_BOOT_SERVICES.ExitBootServices后通过GetVariable函数访问变量,必须设置RT属性。
  • VARIABLE_ATTRIBUTE_AUTHENTICATED_WRITE_ACCESS (AW) (0x00000010)
  • VARIABLE_ATTRIBUTE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS (AWT) (0x00000020)

可以在UEFI 规范中找到完整的属性列表及其使用规则。

需要注意的是,由于 Windows 8 API 允许从特权用户进程(具有SE_SYSTEM_ENVIRONMENT_NAME权限的管理员)访问 UEFI 变量。这些 API 函数是:

系统管理模式 (SMM)

SMM 是 x86 处理器的高特权执行模式,通常称为“ring-2”。

SMM 代码是在系统固件的上下文中编写的,通常用于各种任务,包括高级电源管理、执行 OEM 专有代码和安全固件更新。它提供了一个独立的执行环境,对正在运行的操作系统完全不可见,SMM 中使用的代码和数据存储在硬件保护的内存中——只能从 SMM 访问​​——称为 SMRAM。

要进入 SMM,需要触发一个称为 SMI(系统管理中断)的特殊处理器中断。SMI 可以通过软件方式或平台硬件触发。就本博文而言,了解在英特尔架构系统上生成 SMI(特别是软件 SMI – SW SMI)并进入 SMM 的方法之一是写入 I/O 端口 0xB2(使用OUT指令)就足够了)。这通常被软件用来在系统运行时调用固件服务。

在 UEFI 固件中定义 SW SMI 处理程序

要了解当我们使用上述触发 SW SMI 的方法时会发生什么,我们需要查看UEFI 平台初始化规范第 4 卷,版本 1.4(ZIP 存档),并找到EFI_SMM_SW_DISPATCH2_PROTOCOL的定义(如图 1) 所示。

联想笔记本Bios固件中发现高危漏洞CVE-2021-3971
图 1. EFI_SMM_SW_DISPATCH2_PROTOCOL 定义

如规范中所述,SMM 模块可以使用此协议来安装将响应特定软件中断的处理程序函数。

要安装这样的处理函数,使用EFI_SMM_SW_DISPATCH2_PROTOCOL.Register服务函数;函数类型定义如图2所示。

联想笔记本Bios固件中发现高危漏洞CVE-2021-3971
图 2. EFI_SMM_SW_DISPATCH2_PROTOCOL.Register函数定义

此服务安装一个DispatchFunction函数,当检测到由RegisterContext->SwSmiInputValue指定的软件 SMI 源时,将调用该函数。换句话说,当我们通过将与在处理程序安装期间在RegisterContext->SwSmiInputValue中指定的相同的SwSmiInputValue写入 I/O 端口0xB2来生成 SW SMI 中断时,将调用此DispatchFunction。

对于 SW SMI 中断,参数最常使用 CPU 寄存器传递给 SMI 处理程序。当 SW SMI 中断被触发时,所有 CPU 在触发中断时的上下文被保存到 SMRAM。调用的 SMI 处理程序可以分别使用EFI_SMM_CPU_PROTOCOL函数ReadSaveState和WriteSaveState轻松读取和修改此上下文。

主要的 SPI 闪存保护机制

UEFI 固件通常驻留在计算机主板上的嵌入式闪存芯片(SPI 闪存芯片)中。它是非易失性存储器,通过串行外设接口 (SPI)连接到处理器。

该内存不受操作系统重新安装的影响,因此对于部署其植入物的威胁参与者来说是一个诱人的目标——就像LoJaxMosaicRegressorMoonBounce的情况一样。

有几种安全机制可用于防止对 SPI 闪存进行不必要的修改,主要防线由芯片组本身公开的特殊内存映射配置寄存器提供 – BIOS 控制寄存器和五个受保护范围寄存器。

BIOS 控制寄存器

在该寄存器中,三个特定位用于 SPI 闪存访问控制。请注意,虽然它们在其他芯片组上的命名可能不同,但原理是相同的。

  1. BIOSWE(位 0)

设置后,读取和写入周期都启用对 BIOS 空间的访问,否则访问是只读的。

  1. BLE(位 1)

设置时,BIOSWE 只能通过 SMM 代码从 0 设置为 1。任何从非 SMM 代码设置 BIOSWE 的尝试都会触发 SMI。这为 OEM 提供了实现 SMI 处理程序的机会,以通过将 BIOSWE 位设置回 0 来保护它。

  1. SMM_BWP(位 5)

设置后,BIOS 区域不可写,除非所有处理器都在 SMM 中并且 BIOSWE 为 1。设置此位可解决Speed Racer竞争条件漏洞(该漏洞的利用存在于ReWriter_binary工具中,该工具由 Sednit 组使用部署LoJax)。

保护范围寄存器 (PR0-PR4)

每个寄存器为特定范围的 SPI Flash BIOS 区域内存指定独立的读/写权限。仅当硬件排序闪存状态 (HSFS) 寄存器中的闪存配置锁定 (FLOCKDN) 位未设置时,才能设置它们。

该 FLOCKDN 位应在平台初始化期间由平台固件设置 – 在设置保护范围 (PR) 寄存器之后。一旦 FLOCKDN 被设置,只有在下一次硬件复位后才会被清除。这意味着受保护范围寄存器保护的内存范围在锁定后不能被任何运行时代码(包括 SMM 代码)修改。即使是合法的固件更新也必须在 PR 寄存器被锁定之前执行。

当前系统上可用的解决方案

现在的现代系统通常带有提供基于硬件的引导完整性的解决方案(例如 Intel Boot Guard),如果配置正确且没有额外的漏洞,即使上述芯片组提供的保护无法保护由于配置错误或漏洞导致的 SPI 闪存。

如何访问 PCI/PCIe 配置空间

BIOS 控制寄存器、保护范围寄存器和许多其他配置寄存器可以通过访问 PCI(e) 配置空间来读取或写入。特定 PCI 兼容设备(例如 SPI 闪存)的 PCI(e) 配置空间的位置(或地址)由三个值指定:

  • Bus
  • Device
  • Function

与此设备相关的配置位于此配置空间内的偏移处。访问 PCI(e) 配置空间的常用方法有两种:

  • 使用端口 I/O

在这种情况下,机器 I/O 指令INOUT结合 0xCF8 (CONFIG_ADDRESS) 和 0xCFC (CONFIG_DATA) I/O 端口用于访问 PCI 配置空间中的特定配置数据。由于我们的博文没有必要,因此我们不会在这里深入探讨细节。

  • 使用内存映射 I/O (MMIO)

使用 Memory-Mapped I/O 时,PCI 配置空间直接映射到主存地址空间;因此,配置数据的访问方式几乎与任何其他数据相同。只需要知道所需数据的 PCI 地址,那么我们在哪里可以找到这个地址呢?如果我们知道,我们可以自己构建它:

  1. MMIO基地址(可以在MCFG ACPI 表中找到)
  2. BusDeviceFunctionOffset(也称为Register)值标识我们想要访问的数据(您可以在芯片组的数据表中找到它们)。

可以在 EDK2 的PciLib.h头文件中找到将这些值编码为 PCI 地址的宏示例。或者,图 3 显示了将 MMIO PCI 地址转换为单个标识符(反之亦然)的函数的 Python 实现。

图 3. Python 中的 PCI 地址编码/解码:

# returns address relative to the PciExpressBaseAddress
def pci_encode_to_addr(bus,device,function,register,mmio_base=0xE0000000):
	return mmio_base|(((register) & 0xFFF) | (((function) & 0x07) << 12) | (((device) & 0x1F) << 15) | (((bus) & 0xFF) << 20))
 
def pci_decode_from_addr(addr):
	bus = (addr >> 20) & 0xFF
	device = (addr >> 15) & 0x1F
	function = (addr >> 12) & 0x7
	offset = addr & 0xFFF
	print(f"Bus: 0x{bus:X} Device: 0x{device:X} Function: 0x{function:X} Offset: 0x{offset:X}")

UEFI 安全启动

UEFI Secure Boot 在 UEFI 规范中定义,其主要目的是验证引导组件的完整性,以确保只有平台信任的组件才允许执行。此验证过程中将包含哪些组件取决于特定平台中的 UEFI 安全启动策略实施——在大多数情况下,仅验证第三方 UEFI 驱动程序、应用程序和OPROM,并隐式考虑 SPI 闪存上的驱动程序信任。

为了决定什么是可信的,什么是不可信的,UEFI 安全启动使用存储在经过身份验证的 NVRAM 变量中的特殊数据库,即db和dbx。

  • db数据库包含授权验证引导组件签名的可信公钥证书列表,或者除了证书之外,它还可以包含允许执行的组件的哈希列表,无论它们是否已签名.
  • dbx数据库包含不允许执行的 UEFI 可执行文件的公钥证书或哈希- 以防止执行具有已知漏洞、吊销证书等的签名可执行文件。

技术分析

我们首先分析受CVE-2021-3971CVE-2021-3972影响的 Lenovo 驱动程序,然后继续分析 SMM 漏洞 CVE-2021-3970

在我们的博文开头,我们提到SecureBackDoor * 和ChgBoot * 驱动程序有一些共同的特点,那么它们之间的联系是什么?两者都使用6ACCE65D-DA35-4B39-B64B-5ED927A7DC7E命名空间中的 UEFI 变量作为决定是否激活其功能的控制机制(我们将此 GUID 称为LENOVO_BACKDOOR_NAMESPACE_GUID)。

CVE-2021-3971 – SecureBackDoor 驱动程序 – 禁用 SPI 闪存保护

我们将从分析CVE-2021-3971漏洞开始,该漏洞允许攻击者通过简单地创建 NVRAM 变量来禁用 SPI 闪存写保护机制。当平台固件在启动期间检测到此 NVRAM 变量时,它会跳过负责设置 BIOS 控制寄存器和基于受保护范围寄存器的 SPI 闪存保护的代码的执行。

因此,即使从非 SMM 代码完成,被利用的系统也将允许修改 SPI 闪存,从而允许攻击者将恶意代码直接部署到固件存储中。

此“禁用 SPI 闪存保护功能”由受影响笔记本电脑固件中的以下驱动程序实现:

  • SecureBackDoorPeim (16F41157-1DE8-484E-B316-DDB77CB4080C)
  • 安全后门 (32F16D8C-C094-4102-BD6C-1E533F8810F4)

要利用此漏洞禁用或停用上述 SPI 闪存保护,用户只需创建一个 NVRAM 变量:

  • 名称:CE!
  • 命名空间 GUID:LENOVO_BACKDOOR_NAMESPACE_GUID
  • 属性:NV + BS + RT ( 0x00000007 )
  • 值:任何非空字节

然后重启受影响的设备。

要了解这有多容易,Windows 用户可以使用 Windows API 函数SetFirmwareEnvironmentVariable直接从特权用户进程(具有SE_SYSTEM_ENVIRONMENT_NAME权限的管理员)利用CVE-2021-3971漏洞来禁用这些保护。

在我们的分析中,我们将使用Lenovo 110-15IBR的固件映像(版本 1GCN25WW),它是受CVE-2021-3971漏洞影响的设备之一。

SecureBackDoorPeim 分析

回到一点理论,UEFI 引导序列由多个阶段组成,最早的一个阶段称为 Pre-EFI 初始化 (PEI) 阶段。在此阶段,执行 EFI 前初始化模块 (PEIM) 以执行各种任务,包括初始化永久内存和调用下一个引导阶段 – 驱动程序执行环境 (DXE)。为了将信息从 PEI 阶段传递到 DXE 阶段,需要使用称为切换块 (HOB) 的特殊数据结构。

SecureBackDoorPeim是一个 PEI 模块,负责读取 UEFI 变量cE 的内容!,它属于命名空间LENOVO_BACKDOOR_NAMESPACE_GUID,并准备正确的 HOB 数据结构以将其值传递给SecureBackDoor DXE 阶段驱动程序。

它通过三个简单的步骤完成,如图 4 所示。

联想笔记本Bios固件中发现高危漏洞CVE-2021-3971
图 4. SecureBackDoorPeim模块的 Hex-Rays 反编译代码
  1. 使用EFI_PEI_READ_ONLY_VARIABLE2_PPI.GetVariable 函数,并分别将 VariableName 和 VariableGuid 参数设置为值cE!和LENOVO_BACKDOOR_NAMESPACE_GUID。
  2. 要将此信息传递给SecureBackDoor DXE 驱动程序,请创建一个由以下 GUID AD7934E7-D800-4305-BF6F-49ED9918E1AB标识的 HOB 数据结构。为了使事情更简单,我们将这个 HOB 数据结构命名为 GUID SECURE_BACKDOOR_HOB_GUID。
  3. 最后,它保存从cE 检索到的值!变量来偏移新创建的 HOB 的 0x18。

SecureBackDoor 分析

SecureBackDoor是一个 DXE 驱动程序,如果它在 HOB 列表中找到由SECURE_BACKDOOR_HOB_GUID标识的 HOB,则负责停用 SPI 闪存保护。在图 5 中,我们可以看到,要找到这个 HOB,它会遍历 HOB 列表,并通过与SECURE_BACKDOOR_HOB_GUID 匹配来查找 SecureBackDoorPeim模块之前创建的HOB。

联想笔记本Bios固件中发现高危漏洞CVE-2021-3971
图 5. Hex-Rays 反编译的 SecureBackDoor代码,负责查找 SecureBackdoorPeim创建的 HOB

如果找到此 HOB,驱动程序将在偏移量0x18处获取字节值——这是先前从cE 检索到的值!SecureBackDoorPeim的 UEFI 变量– 如果此值与0x00不同,它会注册DXE_PCH_PLATFORM_POLICY_PROTOCOL协议通知函数,该函数将DXE_PCH_PLATFORM_POLICY_PROTOCOL.LockDownConfig位掩码内的BiosLock位清零(有关相关类型定义,请参阅 GitHub 上的 TianoCore 的PchPlatformPolicy.h头文件)。

要了解它实际上是如何禁用 SPI 闪存保护的,我们需要研究两个不同的固件驱动程序:

PchBiosWriteProtect (B8B8B609-0B6C-4B8C-A731-DE03A6C3F3DC)
BiosRegionLock (77892615-7C7A-4AEF-A320-2A0C15C44B95)

PchBiosWriteProtect 分析

PchBiosWriteProtect是一个 SMM 模块。在图 6 中,我们可以看到它检查DXE_PCH_PLATFORM_POLICY_PROTOCOL.LockDownConfig(类型PCH_LOCK_DOWN_CONFIG )中的 BiosLock 位是否已设置,方法是执行值为0x08(二进制表示为 0b1000)的按位与运算。

联想笔记本Bios固件中发现高危漏洞CVE-2021-3971
图 6. 来自PchBiosWriteProtect的 Hex-Rays 反编译代码,
负责初始化 BIOS 控制寄存器——相关的 SPI 闪存保护

如果没有设置,它会跳过几行代码,这些代码负责:

  • 通过从地址 0xE00F8054 读取 32 位值来执行 MMIO 读取操作(图 6 中的第 15 行)。如果我们将此地址作为参数传递给我们在图 3 中介绍的 Python 函数 pci_decode_from_addr:该函数将打印地址,解码为 Bus: 0, Device: 0x1F, Function: 0, Offset: 0x54。
    基于这些值并知道受影响的笔记本电脑(在我们的例子中是联想 110-15IBR)使用 N 系列英特尔系统级芯片 (SoC),我们可以在其数据表中找到(第 33.14.13 节,第 2258 页) ) 表示它正在访问 SPI 基地址 (SBASE),包含 SPI 配置空间地址的 32 位 PCI 配置寄存器(我们将其称为 SPIBAR),并将其保存到全局变量中。
  • 注册 SW SMI 处理函数DispatchFunction(图 6 中的第 22 行)
    这个注册的 SW SMI 处理函数 DispatchFunction 在平台初始化期间被调用,如果我们查看下面图 7 中该函数的代码,我们会看到它负责设置内部的第 5 位位于 SPIBAR 偏移量 0xFC 的寄存器。如果我们查看文档(第 10.48 BCR 节),我们可以看到这对应于 BIOS 控制寄存器的 SMM_BWP(或我们的芯片组的 EISS)位。
联想笔记本Bios固件中发现高危漏洞CVE-2021-3971
图 7.来自PchBiosWriteProtect的
DispatchFunction 的 Hex-Rays 反编译代码

最后,DispatchFunction还负责注册 SMI 处理函数(图 7 中的ClearBIOSWE)处理 SMI 中断,当有人试图从非 SMM 代码设置 BIOS 控制寄存器内的 BIOSWE 位而 BIOS 控制寄存器BLE 位已设置。在这种情况下,已安装的处理程序会将 BIOSWE(或我们的芯片组的 WPD)位设置回 0。

因此,跳过此代码将导致 BIOS 控制寄存器配置错误,使系统面临 SPI 闪存修改的风险。

BiosRegionLock 分析

第二个驱动程序BiosRegionLock负责设置受保护范围寄存器 PR0-PR4。与上述PchBiosWriteProtect类似,它使用DXE_PCH_PLATFORM_POLICY_PROTOCOL.LockDownConfig(类型PCH_LOCK_DOWN_CONFIG )中的BiosLock位来决定是否设置 SPI 闪存保护 – 在这种情况下为受保护范围寄存器。

如图 8 所示,如果发现BiosLock位未设置,它将简单地跳过负责设置这些寄存器的代码,从而使 SPI 闪存不受保护。

联想笔记本Bios固件中发现高危漏洞CVE-2021-3971
图 8. 负责设置受保护范围寄存器的 Hex-Rays 反编译代码

CVE-2021-3972 – ChgBootDxeHook 驱动程序 – 禁用 UEFI 安全启动

我们将查看的下一个漏洞是CVE-2021-3972。此漏洞允许具有提升权限的攻击者更改各种 UEFI 固件设置,包括 UEFI 安全启动状态,或者例如恢复 UEFI 固件出厂设置,只需创建一个 UEFI 变量即可。

不用说,这样的行为会对系统安全产生严重影响。禁用 UEFI 安全启动意味着固件不会在启动过程中强制执行 UEFI 驱动程序和应用程序的完整性验证,因此将允许加载任何不受信任或恶意的驱动程序。另一方面,恢复出厂设置不会直接禁用 UEFI Secure Boot,但可能会使系统面临部署某些 UEFI 应用程序(例如引导加载程序)的风险,这些应用程序具有已知漏洞(例如,请参阅BootHole),从而允许绕过 UEFI Secure开机。

在我们的分析中,我们将使用受CVE-2021-3972漏洞影响的Lenovo 330-15IGM的固件镜像(版本7XCN41WW) 。

例如,要在Lenovo 330-15IGM上禁用 UEFI 安全启动,用户只需创建一个 UEFI 变量:

  • 名称:ChgBootSecureBootDisable或ChgBootChangeLegacy
  • 命名空间 GUID:LENOVO_BACKDOOR_NAMESPACE_GUID
  • 属性:NV + BS + RT ( 0x00000007 )
  • 值:任何非空字节

并重新启动笔记本电脑。

为了说明它是多么容易,Windows 用户可以使用 Windows API 函数SetFirmwareEnvironmentVariable从特权用户进程(具有SE_SYSTEM_ENVIRONMENT_NAME权限的管理员)创建这些变量。

此后门“功能”由受影响设备固件中的以下两个驱动程序实现:

ChgBootSmm (4CA0062A-66FE-4BE7-ACE6-FDE992C1C5EC)
ChgBootDxeHook (C9C3D147-9A92-4D00-B3AE-970E58B5C3AC)

ChgBootSmm 分析

ChgBootSmm是一个 SMM 模块,负责注册 SW SMI 处理函数。如图 9 所示,它使用EFI_SMM_SW_DISPATCH2_PROTOCOL.Register函数注册此 SMI 处理程序并将SwSmiInputValue设置为0xCA。这意味着可以通过将值0xCA写入I/O 端口0xB2来触发该函数的执行。

联想笔记本Bios固件中发现高危漏洞CVE-2021-3971
图 9. Hex-Rays 反编译代码– 
ChgBootSmm 寄存器 SW SMI 处理程序编号 0xCA

通过查看图 10 中已安装的 SMI 处理程序,我们可以看到它使用EFI_SMM_VARIABLE_PROTOCOL函数SmmGetVariable和SmmSetVariable来读取和写入各种 UEFI 变量,并且根据来自RBX的值来决定创建或修改哪个变量注册保存状态。

联想笔记本Bios固件中发现高危漏洞CVE-2021-3971
图 10. 由ChgBootSmm驱动程序安装的 SW SMI 处理程序的 Hex-Rays 反编译代码

此外,每个写入的变量都具有相同的属性位掩码 – 0x00000007 (NV|BS|RT) – 这意味着创建的所有变量都将存储在非易失性存储器中,因此可以在电源循环后继续存在。

可以使用此 SW SMI 处理程序访问的变量的完整列表是:

  • 命名空间:LENOVO_BACKDOOR_NAMESPACE_GUID
    • ChgBootSecureBootDisable
    • ChgBootSetPxeToFirst
    • ChgBootSetEfiPxeOneTime
    • ChgBootRestoreFactory
    • ChgBootFullRese
    • ChgBootSecureBootEnable
    • ChgBootBootOrderSetDefault
    • ChgBootChangeLegacy
    • ChgBootLegacyLoadDefault
    • ChgBootUefiLoadDefault
    • @R M
    • OneTimeDisableFastBoot
    • 命名空间:A04A27F4-DF00-4D42-B552-39511302113D
    • 引导类型
    • 设置

注意以ChgBoot字符串开头的变量:这些变量用作ChgBootDxeHook DXE 驱动程序的“命令”,指示是否执行某些操作。在大多数情况下,它们的名称是不言自明的,从安全的角度来看,以下是最有趣的:

  • ChgBootSecureBootDisable和ChgBootChangeLegacy
    如果创建(其中任何一个),ChgBootDxeHook会在下次引导期间禁用 UEFI 安全引导功能。
  • ChgBootRestoreFactory
    如果创建,ChgBootDxeHook 会在下次引导期间恢复 UEFI 安全引导变量PK、KEK、db和dbx的出厂默认值。这可能会导致几个问题,从损坏受害者使用的自定义安全启动密钥并因此阻止启动系统,到加载可能不包含最新撤销信息的 dbx 。后者可能会使系统面临部署某些 UEFI 应用程序(例如引导加载程序)的风险,这些应用程序具有已知漏洞(例如BootHole),因此攻击者也可以绕过 UEFI 安全启动验证。

即使没有此 SW SMI 处理程序的帮助(例如使用 Windows API),也可以创建所有上述ChgBoot* UEFI 变量,因为它们不受运行时访问的保护。这意味着攻击者可以从具有管理员权限的用户模式进程中禁用关键的安全机制。

但是,如果有些读者对如何通过调用 SW SMI 处理程序来完成它感兴趣,这里是可用于创建ChgBootSecureBootDisable变量的CHIPSEC命令:

chipsec_util.py smi 发送 0 0xCA 0x53 0x53CA 0x1D 0 0xB2

ChgBootDxeHook 分析

到目前为止,我们知道攻击者需要创建适当的ChgBoot* UEFI 变量来禁用 UEFI 安全启动或在启动期间恢复出厂 UEFI 安全启动密钥。那么它是如何在引擎盖下工作的呢?此功能由ChgBootDxeHook DXE 驱动程序处理,所有ChgBoot* UEFI 变量都在其sub_3370函数中进行检查,如图 11 所示。

联想笔记本Bios固件中发现高危漏洞CVE-2021-3971
图 11.来自ChgBootDxeHook 检查 ChgBoot变量的 Hex-Rays 反编译函数。

要查看 UEFI 安全启动是如何被禁用的,我们可以查看ChgBootSecureBootDisableCheck函数内部(在ChgBootChangeLegacyCheck函数中也会发生完全相同的情况,只是检查了不同的变量)。

正如我们在图 12 中看到的,该函数使用运行时服务GetVariable函数检查是否存在ChgBootSecureBootDisable UEFI 变量,如果它存在(无论其值如何),就会执行我们命名为DisableSecureBoot的函数。

联想笔记本Bios固件中发现高危漏洞CVE-2021-3971
图 12. ChgBootDxeHook的Hex-Rays 反编译函数检查
ChgBootSecureBootDisable NVRAM 变量的存在

神奇之处就在这里——如图 13 所示,这个函数做了两件事:

  • 将偏移量 0x4D9 处的 Setup UEFI 变量的字节值设置为零;此字节似乎是 BIOS 设置实用程序中 UEFI 安全启动状态的指示符。
  • 调用SecureBootService DXE 驱动程序安装的协议函数(图 13 中的协议 GUID C706D63F-6CCE-48AD-A2B4-72A5EF9E220C或LENOVO_SECURE_BOOT_SERVICES_PROTOCOL_GUID ),并带有一个标识要执行的操作的参数,在这种情况下,该操作由值0x02标识——这意味着禁用 UEFI 安全启动。
联想笔记本Bios固件中发现高危漏洞CVE-2021-3971
图 13. 来自ChgBootDxeHook的 Hex-Rays 反编译代码,
负责禁用 UEFI 安全启动

LENOVO_SECURE_BOOT_SERVICES_PROTOCOL中的此功能如何禁用 UEFI 安全启动?它通过调用由VariableRuntimeDxe组合 SMM/DXE 驱动程序注册的 SW SMI 处理程序 0xEC 来实现,该驱动程序又将名为SecureBootEnforce(命名空间EFI_GENERIC_VARIABLE_GUID)的经过身份验证的 UEFI 变量设置为0x00。

但是,在某些受影响的型号上(例如在Lenovo V14-IIL上),它并不是那么简单,仅仅创建一个ChgBootSecureBootDisable UEFI 变量不会禁用 UEFI 安全启动。那么,有什么问题呢?

正如我们在图 14 中看到的,在ChgBootSecureBootDisable变量检查之后,存在另一个条件 – 只有当从特殊的LenovoVariable持久存储检索到的值(使用由 GUID C20E5755-1169-4C56-标识的协议进行访问)时,它才会禁用 UEFI 安全启动A48A-9824AB430D00(图 14 中的 LENOVO_VARIABLE_PROTOCOL_GUID),包含值Y(0x59)。

联想笔记本Bios固件中发现高危漏洞CVE-2021-3971
图 14. Hex-Rays 反编译代码 – 禁用 UEFI 安全启动并附加 LenovoVariable检查

对于包括此检查的模型,需要更高的权限才能从操作系统禁用安全启动,但仍然可以通过调用LenovoVariableSmm SMM 模块注册的 SW SMI 处理程序来实现。

下一节将介绍此LenovoVariable持久存储。

CVE-2021-3970 – 任意 SMM 读/写

在最后一节中,我们将分析CVE-2021-3970漏洞,该漏洞是由 SW SMI 处理函数中的输入验证不当引起的,该漏洞可能导致对 SMRAM 的任意读/写以及后续SMM执行模式下的任意代码执行。

通过触发软件 SMI 中断并将特制缓冲区的物理地址作为参数传递给易受攻击的 SW SMI 处理程序,可以从特权内核模式进程中利用此漏洞。

在此分析中,我们将使用受CVE-2021-3970漏洞影响的Lenovo 330-15IGM的固件映像(版本7XCN41WW) 。

Lenovo 变量存储和易受攻击的 SW SMI 处理程序

某些联想消费类笔记本电脑型号上的固件实现了特殊的LenovoVariable持久存储,允许在 SPI 闪存中存储高达 4KB 的数据。

平台固件使用它来存储各种信息,包括联想产品名称、主板型号名称和版本、OEM OS 许可证,或者如上节所述,在某些情况下,它可用于激活ChgBootDxeHook驱动程序以禁用 UEFI 安全启动功能

在我们分析的固件中,联想变量功能的 SMM 版本通过协议BFD02359-8DFE-459A-8B69-A73A6BAFADC0(我们将其命名为LENOVO_VARIABLE_PROTOCOL_GUID)提供给其他驱动程序,并由LenovoVariableSmm SMM 模块安装。

这个LENOVO_VARIABLE_PROTOCOL的接口提供了四个功能:

  1. 读取 – 从 Lenovo 变量中读取数据
  2. 写入 – 将数据写入 Lenovo 变量
  3. Lock – 锁定 Lenovo 变量以进行写入
  4. 解锁 – 解锁 Lenovo 变量以进行写入

需要注意的是,LenovoVariableSmm不仅安装此协议以供其他 SMM 模块访问,而且还注册了 SW SMI 处理程序函数,允许通过调用 SW SMI 从操作系统访问此存储。最糟糕的部分是它没有正确验证传递给 SW SMI 处理程序的参数,这可能导致对 SMRAM 的任意读/写。

联想笔记本Bios固件中发现高危漏洞CVE-2021-3971
图 15. LenovoVariableSmm 模块注册的 SW SMI 处理函数的 Hex-Rays 反编译代码

仔细观察图 15 中的 SW SMI 处理程序函数,我们看到它首先从 CPU 保存的状态寄存器中读取用户参数,这些状态寄存器是在 SMI 调用时保存的寄存器。

正在阅读这两个论点:

  1. 根据存储在ECX和EDI寄存器中的值构建的 64 位物理地址。
  2. 命令,指示要执行的操作(读取、写入、删除等),来自BX寄存器。

这个作为参数传递给 SMI 处理程序的物理地址应该包含标识要读取或写入的 Lenovo 变量的数据;该缓冲区的结构如图 16 所示。

联想笔记本Bios固件中发现高危漏洞CVE-2021-3971
图 16. 传递给 LenovoVariableSmm SW SMI 处理程序的缓冲区结构

缓冲区以 0x20 字节的标头 ( LENV_HDR ) 开始,其中包含标识 Lenovo 变量的唯一 GUID 和一个 32 位值,该值指定要从变量中检索或写入的数据的长度。位于标头之后的内存空间用作LENOVO_VARIABLE_PROTOCOL的读取和写入函数的源或目标位置。

问题是,调用者提供的物理地址没有以任何方式验证或检查,而是直接作为参数传递给LENOVO_VARIABLE_PROTOCOL函数(参见图 15 中的第 41 行)。这允许攻击者传递任何物理地址——包括 SMRAM 范围内的地址。

但是攻击者如何使用它来读取/写入 SMRAM?要读取 SMRAM 内容,需要执行以下步骤:

  1. 找到 SMRAM 物理地址。
  2. 将LENV_HDR标头复制到 SMRAM 之前 32 个字节的物理地址 – 标头应包含变量标识符(可以是随机 GUID)和想要从 SMRAM 读取的数据长度(最大值低于 4KB) .
  3. 调用LenovoVariableSmm注册的 SW SMI (SwSmiNumber 0x80),在BX寄存器中指定 ID 为 0x02 的命令(意味着您要写入 Lenovo 变量)以及之前在ECX和EDI寄存器中创建的头的地址(告诉SW SMI 处理程序写入该变量的内容)。
  4. 现在,该变量包含指定数量的 SMRAM 数据——所以我们只需要读取它。我们分配一个新的缓冲区(等于标头的大小加上要检索的数据的大小)并将相同的标头复制到其中,如步骤 2 中使用的那样。
  5. 再次调用 SW SMI 处理程序,在 BX 寄存器中指定 ID 为 0x01 的命令(意味着您要从 Lenovo 变量中读取)以及我们在ECX和EDI寄存器中从第 4 步新分配的缓冲区的地址(告诉 SW SMI 处理程序我们要在其中复制 Lenovo 变量的内容——此时它包含来自 SMRAM 的数据)。

图 17 显示了使用 CHIPSEC 框架的上述步骤的示例;包含 SMRAM 前 0x100 字节的脚本输出如图 18 所示。

import binascii
import struct
import chipsec.chipset
from chipsec.hal.interrupts import Interrupts
from hexdump import hexdump
 
cs = chipsec.chipset.cs()
cs.init(None, None, True, True)
intr = Interrupts(cs)
mem_read = cs.helper.read_physical_mem
mem_write = cs.helper.write_physical_mem
mem_alloc = cs.helper.alloc_physical_mem
 
# 1. get SMRAM physical address
smram_addr = cs.cpu.get_SMRAM()[0]
HDR_SZ = 0x20
VAR_SIZE = 0x100
VAR_GUID = binascii.unhexlify("55 57 0e C2 69 11 56 4c a4 8a 98 24 ab 43 05 00".replace(" ", ""))
SMI_NUM = 0x80
 
# 2. write header to the physical memory just before the SMRAM
phys_buff = smram_addr-HDR_SZ
hdr = b"\x00\x00" + VAR_GUID + 10*b"\x00" + struct.pack("<I", VAR_SIZE)
mem_write(phys_buff, HDR_SZ, hdr)
 
# 3. invoke Lenovo variable SW SMI handler to write first VAR_SIZE SMRAM 
# bytes into VAR_GUID Lenovo variable 
high = (phys_buff >> 32) & 0xFFFFFFFF
low = phys_buff & 0xFFFFFFFF
_rcx = low
_rbx = 2 #WRITE LENOVO VARIABLE
_rdx = 0xB2
_rax = 0x5380
_rdi = high
intr.send_SW_SMI(0, SMI_NUM, 0x53, _rax, _rbx, _rcx, _rdx, 0, _rdi)
 
# 4. allocate memory for the data read from variable
# write header to the beginning of the allocated memory
# zeroe the rest of the buffer
sz_to_alloc = VAR_SIZE + HDR_SZ
_va, out_buff = mem_alloc(sz_to_alloc, 0xFFFFFFFF)
mem_write(out_buff, HDR_SZ, hdr)
mem_write(out_buff+HDR_SZ, VAR_SIZE, VAR_SIZE*b"\x00")
 
# 5. invoke Lenovo variable SW SMI handler to read previously created
# variable directly into our buffer
high = (out_buff >> 32) & 0xFFFFFFFFFFFFFFFF
low = out_buff & 0xFFFFFFFF
_rcx = low
_rbx = 1 #READ LENOVO VARIABLE
_rdx = 0xB2
_rax = 0x5380
_rdi = high
result = intr.send_SW_SMI(0, SMI_NUM, 0x53, _rax, _rbx, _rcx, _rdx, 0, _rdi)
 
# print first VAR_SIZE bytes from SMRAM
smram_data = mem_read(out_buff+HDR_SZ, VAR_SIZE)
hexdump(smram_data)

图 17. CHIPSEC 示例 – 通过利用 CVE-2021-3972 从 SMRAM 读取 0x100 字节

联想笔记本Bios固件中发现高危漏洞CVE-2021-3971
图 18. CHIPSEC 脚本输出转储 SMRAM 的前 0x100 字节

能够写入SMRAM,原理几乎相同——首先,攻击者需要将自己的数据写入Lenovo变量,然后再将变量中的数据直接读取到SMRAM中。

我们提供了一个如何只读取 SMRAM 的前 0x100 字节的示例;但是,通过额外的修改,可以读取/写入整个 SMRAM 范围。这可能允许攻击者在 SMM 中执行他们自己的恶意代码,甚至更糟——考虑到LenovoVariable SW SMI 处理程序修改 SPI 闪存的能力——将攻击者自己的恶意固件植入直接写入 SPI 闪存。

结论

UEFI 威胁可能非常隐蔽和危险。它们在引导过程的早期执行,然后将控制权转移到操作系统,这意味着它们可以绕过堆栈中几乎所有可能阻止其操作系统有效负载执行的安全措施和缓解措施。那么,UEFI 威胁如何克服为防止 UEFI 威胁本身部署或执行而创建的所有安全保护措施?

近年来发现的所有现实世界 UEFI 威胁(LoJaxMosaicRegressorMoonBounceESPecterFinSpy)都需要以某种方式绕过或禁用安全机制才能部署和执行。然而,只有LoJax是第一个野生 UEFI rootkit(由 ESET Research 在 2018 年发现),我们才知道它是如何完成的——通过使用能够利用Speed Racer漏洞的ReWriter_binary 。

尽管漏洞不是关闭或绕过固件安全缓解措施的唯一选择,但仍有许多此类漏洞,并且由于不同固件实现的数量及其复杂性,更多可能只是等待被发现。

仅在去年,我们就已经看到大量影响深远的 UEFI 固件漏洞被公开披露。最值得注意的是来自Binarly的研究人员在他们深入研究HP 设备博客文章中发现的 23 个高影响漏洞和16 个高影响漏洞中,以及来自SentinelOne的研究人员在他们的另一块墙上的砖:发现 SMM惠普固件博文中的漏洞

我们的发现 连同上述发现表明,在某些情况下,UEFI 威胁的部署可能没有预期的那么困难,并且在过去几年中发现的大量真实世界 UEFI 威胁表明攻击者已经意识到这。

关于本博文中描述的漏洞,我们强烈建议所有联想笔记本电脑的所有者查看受影响设备的列表并更新其固件,最好遵循制造商的说明

对于那些使用受CVE-2021-3972影响的开发结束支持 (EODS) 设备的用户,没有任何可用的修复程序:可以帮助您防止对 UEFI 安全启动状态进行不必要修改的一件事是使用 TPM 感知全磁盘如果 UEFI 安全启动配置发生更改,则能够使磁盘数据无法访问的加密解决方案。

联想厂商公告信息

https://support.lenovo.com/us/zc/product_security/LEN-73440

联想笔记本 BIOS 漏洞

联想安全公告: LEN-73440

潜在影响:权限升级

严重性:

影响范围:Lenovo-specific

CVE 标识符: CVE-2021-3970、CVE-2021-3971、CVE-2021-3972

摘要说明:

Lenovo Notebook BIOS 中报告了以下漏洞。

CVE-2021-3970:LenovoVariable SMI 处理程序中的一个潜在漏洞是由于在某些联想笔记本型号中验证不足,可能允许具有本地访问权限和提升权限的攻击者执行任意代码。

CVE-2021-3971:在一些消费者联想笔记本设备的旧制造过程中使用的驱动程序存在潜在漏洞,错误地包含在 BIOS 映像中,可能允许具有提升权限的攻击者通过修改 NVRAM 变量来修改固件保护区域。

CVE-2021-3972:在某些消费者联想笔记本设备的制造过程中使用的驱动程序存在潜在漏洞,该驱动程序错误地未停用,可能允许具有提升权限的攻击者通过修改 NVRAM 变量来修改安全启动设置。

客户缓解策略(您应该如何保护自己):

将系统固件更新到产品影响部分中为您的型号指定的版本(或更高版本)。

产品影响:

要下载下面为您的产品指定的版本,请执行以下步骤:

导航到您的产品的驱动程序和软件支持站点:

  1. 按名称或机器类型搜索您的产品。
  2. 单击左侧菜单面板上的驱动程序和软件。
  3. 单击手动更新以按组件类型浏览。
  4. 将下面适用产品表中您产品的最低修复版本与支持站点上发布的最新版本进行比较。

Lenovo 还提供工具来协助更新管理,作为上述手动步骤的替代方法。有关其他帮助,请参阅以下内容:

PC 产品和软件: support.lenovo.com/us/en/solutions/ht504759

服务器和企业软件: support.lenovo.com/us/en/solutions/lnvo-lxcaupdhttps://datacentersupport.lenovo.com/us/en/documents/lnvo-center

点击以下链接查看受影响的产品:

联想笔记本

致谢:

联想感谢 ESET 的 Martin Smolár 报告这些问题。

修订记录:

修订日期描述
22022-04-19正确的初始发布日期
12022-04-18初始发行

有关所有 Lenovo 产品安全公告的完整列表,请单击此处

有关最新信息,请随时了解 Lenovo 有关您的设备和软件的更新和建议。本公告中提供的信息按“原样”提供,不提供任何形式的保证或保证。Lenovo 保留随时更改或更新此公告的权利。

受影响的产品列表

Lenovo Notebook

产品组件CVE-2021-3970CVE-2021-3971CVE-2021-3972
Flex 3-11ADA05 Laptop (ideapad)BIOS Update for Windows 10 (64-bit) – Flex 3-11ADA05Target availability 2022-05-10Not AffectedTarget availability 2022-05-10
IdeaPad 3 15ADA05 LaptopBIOS Update for Windows 10 (64-bit) – V14-ADA, V15-ADA, ideapad 3-14ADA05, ideapad 3-15ADA05, ideapad 3-17ADA05E8CN33WWE8CN33WWE8CN33WW
IdeaPad 3-14ADA05 LaptopBIOS Update for Windows 10 (64-bit) – V14-ADA, V15-ADA, ideapad 3-14ADA05, ideapad 3-15ADA05, ideapad 3-17ADA05E8CN33WWE8CN33WWE8CN33WW
IdeaPad 3-14ADA6 LaptopBIOS Update for Windows 10 (64-bit) and Windows 11 (64-bit) – IdeaPad 3-14ADA6, IdeaPad 3-15ADA6, IdeaPad 3-17ADA6HBCN21WWHBCN21WWHBCN21WW
IdeaPad 3-14ALC6 LaptopBIOS Update for Windows 10 (64-bit) – ideapad 3-14ALC6, ideapad 3-15ALC6, ideapad 3-17ALC6, V14 G2-ALC, V15 G2-ALCGLCN43WWGLCN43WWGLCN43WW
IdeaPad 3-14ARE05 LaptopBIOS Update for Windows 10 (64-bit) – V14-ARE, ideapad 3-14ARE, ideapad 3-15ARE, ideapad 3-17AREdzcn42wwdzcn42wwdzcn42ww
IdeaPad 3-14ARE05 LaptopBIOS Update for Windows 10 (64-bit) – ideapad 3-14ARE05, ideapad 3-15ARE05, ideapad 3-17ARE05, V14-AREDZCN42WWDZCN42WWDZCN42WW
IdeaPad 3-15ADA6 LaptopBIOS Update for Windows 10 (64-bit) and Windows 11 (64-bit) – IdeaPad 3-14ADA6, IdeaPad 3-15ADA6, IdeaPad 3-17ADA6HBCN21WWHBCN21WWHBCN21WW
IdeaPad 3-15ALC6 LaptopBIOS Update for Windows 10 (64-bit) – ideapad 3-14ALC6, ideapad 3-15ALC6, ideapad 3-17ALC6, V14 G2-ALC, V15 G2-ALCGLCN43WWGLCN43WWGLCN43WW
IdeaPad 3-15ARE05 LaptopBIOS Update for Windows 10 (64-bit) – V14-ARE, ideapad 3-14ARE, ideapad 3-15ARE, ideapad 3-17AREdzcn42wwdzcn42wwdzcn42ww
IdeaPad 3-15ARE05 LaptopBIOS Update for Windows 10 (64-bit) – ideapad 3-14ARE05, ideapad 3-15ARE05, ideapad 3-17ARE05, V14-AREDZCN42WWDZCN42WWDZCN42WW
IdeaPad 3-15IGL05 LaptopBIOS Update for Windows 10 (64-bit) – V14-IGL, V15-IGL, ideapad 3-14IGL05, ideapad 3-15IGL05DVCN23WWDVCN23WWDVCN23WW
IdeaPad 3-17ADA05 LaptopBIOS Update for Windows 10 (64-bit) – V14-ADA, V15-ADA, ideapad 3-14ADA05, ideapad 3-15ADA05, ideapad 3-17ADA05E8CN33WWE8CN33WWE8CN33WW
IdeaPad 3-17ADA6 LaptopBIOS Update for Windows 10 (64-bit) and Windows 11 (64-bit) – IdeaPad 3-14ADA6, IdeaPad 3-15ADA6, IdeaPad 3-17ADA6HBCN21WWHBCN21WWHBCN21WW
IdeaPad 3-17ALC6 LaptopBIOS Update for Windows 10 (64-bit) – ideapad 3-14ALC6, ideapad 3-15ALC6, ideapad 3-17ALC6, V14 G2-ALC, V15 G2-ALCGLCN43WWGLCN43WWGLCN43WW
IdeaPad 3-17ARE05 LaptopBIOS Update for Windows 10 (64-bit) – V14-ARE, ideapad 3-14ARE, ideapad 3-15ARE, ideapad 3-17AREdzcn42wwdzcn42wwdzcn42ww
IdeaPad 3-17ARE05 LaptopBIOS Update for Windows 10 (64-bit) – ideapad 3-14ARE05, ideapad 3-15ARE05, ideapad 3-17ARE05, V14-AREDZCN42WWDZCN42WWDZCN42WW
IdeaPad 3-17IIL05 LaptopBIOS Update for Windows 10 (64-bit) – ideapad 3-14IIL05, ideapad 3-15IIL05, ideapad 3-17IIL05, V17-IILEMCN52WWEMCN52WWEMCN52WW
IdeaPad 3-17ITL6 LaptopBIOS Update for Windows 10 (64-bit) and Windows 11 (64-bit) – IdeaPad 3-14ITL6, IdeaPad 3-15ITL6, IdeaPad 3-17ITL6, V14 G2 ITL, V15 G2 ITL. V17 G2 ITL, Lenovo S14 G2 ITLTarget availability 2022-05-10Not AffectedTarget availability 2022-05-10
L3-15IML05 Laptop (ideapad)BIOS Update for Windows 10 (64-bit) – ideapad L3-15IML05Target availability 2022-05-10Not AffectedTarget availability 2022-05-10
L3-15ITL6 Laptop (ideapad)BIOS Update for Windows 10 (64-bit) and Windows 11 (64-bit) – ideapad L3-15ITL6GFCN23WWGFCN23WWGFCN23WW
L340-15IRH Gaming Laptop (ideapad)BIOS Update for Windows 10 (64-bit) – L340-15IRH Gaming, L340-17IRH GamingBGCN35WWBGCN35WWBGCN35WW
L340-15IWL Laptop (ideapad)BIOS Update for Windows 10 (64-bit) – L340-15IWL, L340-17IWL, V340-17IWL, V140-15IWL, L340-15IWL TouchATCN46WWATCN46WWATCN46WW
L340-15IWL Touch Laptop (ideapad)BIOS Update for Windows 10 (64-bit) – L340-15IWL, L340-17IWL, V340-17IWL, V140-15IWL, L340-15IWL TouchATCN46WWATCN46WWATCN46WW
L340-17IRH Gaming Laptop (ideapad)BIOS Update for Windows 10 (64-bit) – L340-15IRH Gaming, L340-17IRH GamingBGCN35WWBGCN35WWBGCN35WW
L340-17IWL Laptop (ideapad)BIOS Update for Windows 10 (64-bit) – L340-15IWL, L340-17IWL, V340-17IWL, V140-15IWL, L340-15IWL TouchATCN46WWATCN46WWATCN46WW
Legion 5 Pro-16ACH6 Laptop (Lenovo)BIOS Update for Windows 10 (64-bit) and Windows 11 (64-bit) – Legion 5-15ACH6, Legion 5 Pro-6ACH6, Legion 5-17ACH6HHCN25WWHHCN25WWHHCN25WW
Legion 5 Pro-16ACH6H Laptop (Lenovo)BIOS Update for Windows 10 (64-bit) and Windows 11 (64-bit) – Legion 5 Pro-16ACH6H, Legion 5-15ACH6H, Legion 5 17ACH6H, Legion 7-16ACHg6GKCN51WWGKCN51WWGKCN51WW
Legion 5 Pro-16ITH6 Laptop (Lenovo)BIOS Update for Windows 10 (64-bit) – Legion 5, Legion 5 Pro, Legion 7H1CN46WWH1CN46WWH1CN46WW
Legion 5 Pro-16ITH6H Laptop (Lenovo)BIOS Update for Windows 10 (64-bit) – Legion 5, Legion 5 Pro, Legion 7H1CN46WWH1CN46WWH1CN46WW
Legion 5-15ACH6 Laptop (Lenovo)BIOS Update for Windows 10 (64-bit) and Windows 11 (64-bit) – Legion 5-15ACH6, Legion 5 Pro-6ACH6, Legion 5-17ACH6HHCN25WWHHCN25WWHHCN25WW
Legion 5-15ACH6A Laptop (Lenovo)BIOS Update for Windows 10 (64-bit) – Legion 5-15ACH6AG9CN28WWG9CN28WWG9CN28WW
Legion 5-15ACH6H Laptop (Lenovo)BIOS Update for Windows 10 (64-bit) and Windows 11 (64-bit) – Legion 5 Pro-16ACH6H, Legion 5-15ACH6H, Legion 5 17ACH6H, Legion 7-16ACHg6GKCN51WWGKCN51WWGKCN51WW
Legion 5-15IMH6 Laptop (Lenovo)BIOS Update for Windows 10 (64-bit) – Legion 5-15IMH6Target availability 2022-05-10Not AffectedTarget availability 2022-05-10
Legion 5-15ITH6 Laptop (Lenovo)BIOS Update for Windows 10 (64-bit) – Legion 5, Legion 5 Pro, Legion 7H1CN46WWH1CN46WWH1CN46WW
Legion 5-15ITH6H Laptop (Lenovo)BIOS Update for Windows 10 (64-bit) – Legion 5, Legion 5 Pro, Legion 7H1CN46WWH1CN46WWH1CN46WW
Legion 5-17ACH6 Laptop (Lenovo)BIOS Update for Windows 10 (64-bit) and Windows 11 (64-bit) – Legion 5-15ACH6, Legion 5 Pro-6ACH6, Legion 5-17ACH6HHCN25WWHHCN25WWHHCN25WW
Legion 5-17ACH6H Laptop (Lenovo)BIOS Update for Windows 10 (64-bit) and Windows 11 (64-bit) – Legion 5 Pro-16ACH6H, Legion 5-15ACH6H, Legion 5 17ACH6H, Legion 7-16ACHg6GKCN51WWGKCN51WWGKCN51WW
Legion 5-17ITH6 Laptop (Lenovo)BIOS Update for Windows 10 (64-bit) – Legion 5, Legion 5 Pro, Legion 7H1CN46WWH1CN46WWH1CN46WW
Legion 5-17ITH6H Laptop (Lenovo)BIOS Update for Windows 10 (64-bit) – Legion 5, Legion 5 Pro, Legion 7H1CN46WWH1CN46WWH1CN46WW
Legion 7-16ACHg6 Laptop (Lenovo)BIOS Update for Windows 10 (64-bit) – Legion 7-16ACHg6Not AffectedGKCN52WWGKCN52WW
Legion 7-16ACHg6 Laptop (Lenovo)BIOS Update for Windows 10 (64-bit) and Windows 11 (64-bit) – Legion 5 Pro-16ACH6H, Legion 5-15ACH6H, Legion 5 17ACH6H, Legion 7-16ACHg6GKCN51WWGKCN51WWGKCN51WW
Legion 7-16ITHg6 Laptop (Lenovo)BIOS Update for Windows 10 (64-bit) – Legion 5, Legion 5 Pro, Legion 7H1CN46WWH1CN46WWH1CN46WW
Legion S7-15ACH6 Laptop (Lenovo)BIOS Update for Windows 10 (64-bit) – Legion S7-15ACH6HACN35WWNot AffectedHACN35WW
Legion S7-15ARH5 Laptop (Lenovo)BIOS Update for Windows 10 (64-bit) – Legion S7-15ARH5Target availability 2022-05-10Not AffectedTarget availability 2022-05-10
Legion S7-15IMH5 Laptop (Lenovo)BIOS Update for Windows 10 (64-bit) – Legion S7-15IMH5Target availability 2022-05-10Not AffectedTarget availability 2022-05-10
Legion Y540-15IRH Laptop (Lenovo)BIOS Update for Windows 10 (64-bit) – NotebookBHCN44WWBHCN44WWBHCN44WW
Legion Y540-15IRH-PG0 Laptop (Lenovo)BIOS Update for Windows 10 (64-bit) – NotebookBHCN44WWBHCN44WWBHCN44WW
Legion Y540-17IRH Laptop (Lenovo)BIOS Update for Windows 10 (64-bit) – NotebookBHCN44WWBHCN44WWBHCN44WW
Legion Y540-17IRH-PG0 Laptop (Lenovo)BIOS Update for Windows 10 (64-bit) – NotebookBHCN44WWBHCN44WWBHCN44WW
Legion Y545 Laptop (Lenovo)BIOS Update for Windows 10 (64-bit) – NotebookBHCN44WWBHCN44WWBHCN44WW
Legion Y545-PG0 Laptop (Lenovo)BIOS Update for Windows 10 (64-bit) – NotebookBHCN44WWBHCN44WWBHCN44WW
Legion Y7000-2019 Laptop (Lenovo)BIOS Update for Windows 10 (64-bit) – NotebookBHCN44WWBHCN44WWBHCN44WW
Legion Y7000-2019-PG0 Laptop (Lenovo)BIOS Update for Windows 10 (64-bit) – NotebookBHCN44WWBHCN44WWBHCN44WW
Lenovo S14 G2 ITLBIOS Update for Windows 10 (64-bit) and Windows 11 (64-bit) – IdeaPad 3-14ITL6, IdeaPad 3-15ITL6, IdeaPad 3-17ITL6, V14 G2 ITL, V15 G2 ITL. V17 G2 ITL, Lenovo S14 G2 ITLTarget availability 2022-05-10Not AffectedTarget availability 2022-05-10
S145-14API Laptop (ideapad)BIOS Update for Windows 10 (64-bit) – S145-14API, S145-15APIBUCN31WWBUCN31WWBUCN31WW
S145-14AST Laptop (ideapad)BIOS Update for Windows 10 (64-bit) – S145-14AST, S145-15ASTAYCN26WWAYCN26WWAYCN26WW
S145-14IGM Laptop (ideapad)BIOS Update for Windows 10 (64-bit) – S145-14IGM, S145-15IGMAWCN28WWAWCN28WWAWCN28WW
S145-14IIL Laptop (ideapad)BIOS Update for Windows 10 (64-bit) – S145-14IIL, S145-15IIL, V14-IIL, V15-IILDKCN54WWDKCN54WWDKCN54WW
S145-15API Laptop (ideapad)BIOS Update for Windows 10 (64-bit) – S145-14API, S145-15APIBUCN31WWBUCN31WWBUCN31WW
S145-15AST Laptop (ideapad)BIOS Update for Windows 10 (64-bit) – S145-14API, S145-15APIBUCN31WWBUCN31WWBUCN31WW
S145-15AST Laptop (ideapad)BIOS Update for Windows 10 (64-bit) – S145-14AST, S145-15ASTAYCN26WWAYCN26WWAYCN26WW
S145-15IGM Laptop (ideapad)BIOS Update for Windows 10 (64-bit) – S145-14IGM, S145-15IGMAWCN28WWAWCN28WWAWCN28WW
S145-15IIL Laptop (ideapad)BIOS Update for Windows 10 (64-bit) – S145-14IIL, S145-15IIL, V14-IIL, V15-IILDKCN54WWDKCN54WWDKCN54WW
S540-13API Laptop (ideapad)BIOS Update for Windows 10 (64-bit) – S540-13APICXCN34WWCXCN34WWCXCN34WW
S540-13IML Laptop (ideapad)BIOS Update for Windows 10 (64-bit) – S540-13IMLTarget availability 2022-05-10Not AffectedTarget availability 2022-05-10
Slim 7 Pro-14IHU5 Laptop (IdeaPad)BIOS Update for Windows 10 (64-bit) – Yoga Slim 7 Pro-14ITL5, Yoga Slim 7 Pro-14IHU5, Yoga Slim 7 Pro-14IHU5 O, IdeaPad Slim 7 Pro-14IHU5Target availability 2022-05-10Not AffectedTarget availability 2022-05-10
Slim 9-14ITL05 Laptop (ideapad)BIOS Update for Windows 10 (64-bit) – Yoga Slim 9-14ITL05, ideapad Slim 9-14ITL05Target availability 2022-05-10Not AffectedTarget availability 2022-05-10
V14 G1-IML Laptop (Lenovo)BIOS Update for Windows 10 (64-bit) and Windows 11 (64-bit) – ideapad 3-14IML05, ideapad 3-15IML05, ideapad 3-17IML05, V14 G1-IML, V15 G1-IMLTarget availability 2022-05-10Not AffectedTarget availability 2022-05-10
V14 G2-ALC Laptop (Lenovo)BIOS Update for Windows 10 (64-bit) – ideapad 3-14ALC6, ideapad 3-15ALC6, ideapad 3-17ALC6, V14 G2-ALC, V15 G2-ALCGLCN43WWGLCN43WWGLCN43WW
V14 G2-ITL Laptop (Lenovo)BIOS Update for Windows 10 (64-bit) and Windows 11 (64-bit) – IdeaPad 3-14ITL6, IdeaPad 3-15ITL6, IdeaPad 3-17ITL6, V14 G2 ITL, V15 G2 ITL. V17 G2 ITL, Lenovo S14 G2 ITLTarget availability 2022-05-10Not AffectedTarget availability 2022-05-10
V14-ADA Laptop (Lenovo)BIOS Update for Windows 10 (64-bit) – V14-ADA, V15-ADA, ideapad 3-14ADA05, ideapad 3-15ADA05, ideapad 3-17ADA05E8CN33WWE8CN33WWE8CN33WW
V14-ARE Laptop (Lenovo)BIOS Update for Windows 10 (64-bit) – V14-ARE, ideapad 3-14ARE, ideapad 3-15ARE, ideapad 3-17AREdzcn42wwdzcn42wwdzcn42ww
V14-ARE Laptop (Lenovo)BIOS Update for Windows 10 (64-bit) – ideapad 3-14ARE05, ideapad 3-15ARE05, ideapad 3-17ARE05, V14-AREDZCN42WWDZCN42WWDZCN42WW
V14-IGL Laptop (Lenovo)BIOS Update for Windows 10 (64-bit) – V14-IGL, V15-IGL, ideapad 3-14IGL05, ideapad 3-15IGL05DVCN23WWDVCN23WWDVCN23WW
V14-IIL Laptop (Lenovo)BIOS Update for Windows 10 (64-bit) – S145-14IIL, S145-15IIL, V14-IIL, V15-IILDKCN54WWDKCN54WWDKCN54WW
V140-15IWLBIOS Update for Windows 10 (64-bit) – L340-15IWL, L340-17IWL, V340-17IWL, V140-15IWL, L340-15IWL TouchATCN46WWATCN46WWATCN46WW
V15 G1-IML Laptop (Lenovo)BIOS Update for Windows 10 (64-bit) and Windows 11 (64-bit) – ideapad 3-14IML05, ideapad 3-15IML05, ideapad 3-17IML05, V14 G1-IML, V15 G1-IMLTarget availability 2022-05-10Not AffectedTarget availability 2022-05-10
V15 G2-ALC Laptop (Lenovo)BIOS Update for Windows 10 (64-bit) – ideapad 3-14ALC6, ideapad 3-15ALC6, ideapad 3-17ALC6, V14 G2-ALC, V15 G2-ALCGLCN43WWGLCN43WWGLCN43WW
V15 G2-ITL Laptop (Lenovo)BIOS Update for Windows 10 (64-bit) and Windows 11 (64-bit) – IdeaPad 3-14ITL6, IdeaPad 3-15ITL6, IdeaPad 3-17ITL6, V14 G2 ITL, V15 G2 ITL. V17 G2 ITL, Lenovo S14 G2 ITLTarget availability 2022-05-10Not AffectedTarget availability 2022-05-10
V15-ADA Laptop (Lenovo)BIOS Update for Windows 10 (64-bit) – V14-ADA, V15-ADA, ideapad 3-14ADA05, ideapad 3-15ADA05, ideapad 3-17ADA05E8CN33WWE8CN33WWE8CN33WW
V15-IGL Laptop (Lenovo)BIOS Update for Windows 10 (64-bit) – V14-IGL, V15-IGL, ideapad 3-14IGL05, ideapad 3-15IGL05DVCN23WWDVCN23WWDVCN23WW
V15-IIL Laptop (Lenovo)BIOS Update for Windows 10 (64-bit) – S145-14IIL, S145-15IIL, V14-IIL, V15-IILDKCN54WWDKCN54WWDKCN54WW
V17 G2-ITL Laptop (Lenovo)BIOS Update for Windows 10 (64-bit) and Windows 11 (64-bit) – IdeaPad 3-14ITL6, IdeaPad 3-15ITL6, IdeaPad 3-17ITL6, V14 G2 ITL, V15 G2 ITL. V17 G2 ITL, Lenovo S14 G2 ITLTarget availability 2022-05-10Not AffectedTarget availability 2022-05-10
V17-IIL Laptop (Lenovo)BIOS Update for Windows 10 (64-bit) – ideapad 3-14IIL05, ideapad 3-15IIL05, ideapad 3-17IIL05, V17-IILEMCN52WWEMCN52WWEMCN52WW
V340-17IWL Laptop (Lenovo)BIOS Update for Windows 10 (64-bit) – L340-15IWL, L340-17IWL, V340-17IWL, V140-15IWL, L340-15IWL TouchATCN46WWATCN46WWATCN46WW
Yoga 7-14ACN6 Laptop (ideapad)BIOS Update for Windows 10 (64-bit) – Yoga 7-14ACN6Target availability 2022-05-10Not AffectedTarget availability 2022-05-10
Yoga C740-14IML Laptop (Lenovo)BIOS Update for Windows 10 (64-bit) – Yoga C740-14IML, Yoga C740-15IMLTarget availability 2022-05-10Not AffectedTarget availability 2022-05-10
Yoga C740-15IML Laptop (Lenovo)BIOS Update for Windows 10 (64-bit) – Yoga C740-14IML, Yoga C740-15IMLTarget availability 2022-05-10Not AffectedTarget availability 2022-05-10
Yoga C940-14IIL Laptop (ideapad)BIOS Update for Windows 10 (64-bit) – Yoga C940-14IILTarget availability 2022-05-10Not AffectedTarget availability 2022-05-10
Yoga Slim 7 Pro-14ACH5 DBIOS Update for Windows 10 (64-bit) – Yoga Slim 7 Pro-14ACH5 D, Yoga Slim 7 Pro-14ACH5 ODHECN24WWHECN24WWHECN24WW
Yoga Slim 7 Pro-14ACH5 Laptop (ideapad)BIOS Update for Windows 10 (64-bit) – Yoga Slim 7 Pro-14ACH5, Yoga Slim 7 Pro-14ACH5 OTarget availability 2022-05-10Target availability 2022-05-10Target availability 2022-05-10
Yoga Slim 7 Pro-14ACH5 O Laptop (ideapad)BIOS Update for Windows 10 (64-bit) – Yoga Slim 7 Pro-14ACH5, Yoga Slim 7 Pro-14ACH5 OTarget availability 2022-05-10Target availability 2022-05-10Target availability 2022-05-10
Yoga Slim 7 Pro-14ACH5 ODBIOS Update for Windows 10 (64-bit) – Yoga Slim 7 Pro-14ACH5 D, Yoga Slim 7 Pro-14ACH5 ODHECN24WWHECN24WWHECN24WW
Yoga Slim 7 Pro-14ARH5 Laptop (ideapad)BIOS Update for Windows 10 (64-bit) – Yoga Slim 7 Pro-14ARH5G7CN21WWNot AffectedG7CN21WW
Yoga Slim 7 Pro-14IHU5 Laptop (ideapad)BIOS Update for Windows 10 (64-bit) – Yoga Slim 7 Pro-14ITL5, Yoga Slim 7 Pro-14IHU5, Yoga Slim 7 Pro-14IHU5 O, IdeaPad Slim 7 Pro-14IHU5Target availability 2022-05-10Not AffectedTarget availability 2022-05-10
Yoga Slim 7 Pro-14IHU5 O Laptop (ideapad)BIOS Update for Windows 10 (64-bit) – Yoga Slim 7 Pro-14ITL5, Yoga Slim 7 Pro-14IHU5, Yoga Slim 7 Pro-14IHU5 O, IdeaPad Slim 7 Pro-14IHU5Target availability 2022-05-10Not AffectedTarget availability 2022-05-10
Yoga Slim 7 Pro-14ITL5 Laptop (ideapad)BIOS Update for Windows 10 (64-bit) – Yoga Slim 7 Pro-14ITL5, Yoga Slim 7 Pro-14IHU5, Yoga Slim 7 Pro-14IHU5 O, IdeaPad Slim 7 Pro-14IHU5Target availability 2022-05-10Not AffectedTarget availability 2022-05-10
Yoga Slim 9-14ITL05 Laptop (ideapad)BIOS Update for Windows 10 (64-bit) – Yoga Slim 9-14ITL05, ideapad Slim 9-14ITL05Target availability 2022-05-10Not AffectedTarget availability 2022-05-10
ideapad 3-14IGL05 LaptopBIOS Update for Windows 10 (64-bit) – V14-IGL, V15-IGL, ideapad 3-14IGL05, ideapad 3-15IGL05DVCN23WWDVCN23WWDVCN23WW
ideapad 3-14IIL05 LaptopBIOS Update for Windows 10 (64-bit) – ideapad 3-14IIL05, ideapad 3-15IIL05, ideapad 3-17IIL05, V17-IILEMCN52WWEMCN52WWEMCN52WW
ideapad 3-14IML05 LaptopBIOS Update for Windows 10 (64-bit) and Windows 11 (64-bit) – ideapad 3-14IML05, ideapad 3-15IML05, ideapad 3-17IML05, V14 G1-IML, V15 G1-IMLTarget availability 2022-05-10Not AffectedTarget availability 2022-05-10
ideapad 3-14ITL05 LaptopBIOS Update for Windows 10 (64-bit) – ideapad 3-14ITL05, ideapad 3-15ITL05Target availability 2022-05-10Not AffectedTarget availability 2022-05-10
ideapad 3-14ITL6 LaptopBIOS Update for Windows 10 (64-bit) and Windows 11 (64-bit) – IdeaPad 3-14ITL6, IdeaPad 3-15ITL6, IdeaPad 3-17ITL6, V14 G2 ITL, V15 G2 ITL. V17 G2 ITL, Lenovo S14 G2 ITLTarget availability 2022-05-10Not AffectedTarget availability 2022-05-10
ideapad 3-15IIL05 LaptopBIOS Update for Windows 10 (64-bit) – ideapad 3-14IIL05, ideapad 3-15IIL05, ideapad 3-17IIL05, V17-IILEMCN52WWEMCN52WWEMCN52WW
ideapad 3-15IML05 LaptopBIOS Update for Windows 10 (64-bit) and Windows 11 (64-bit) – ideapad 3-14IML05, ideapad 3-15IML05, ideapad 3-17IML05, V14 G1-IML, V15 G1-IMLTarget availability 2022-05-10Not AffectedTarget availability 2022-05-10
ideapad 3-15ITL05 LaptopBIOS Update for Windows 10 (64-bit) – ideapad 3-14ITL05, ideapad 3-15ITL05Target availability 2022-05-10Not AffectedTarget availability 2022-05-10
ideapad 3-15ITL6 LaptopBIOS Update for Windows 10 (64-bit) and Windows 11 (64-bit) – IdeaPad 3-14ITL6, IdeaPad 3-15ITL6, IdeaPad 3-17ITL6, V14 G2 ITL, V15 G2 ITL. V17 G2 ITL, Lenovo S14 G2 ITLTarget availability 2022-05-10Not AffectedTarget availability 2022-05-10
ideapad 3-17IML05 LaptopBIOS Update for Windows 10 (64-bit) and Windows 11 (64-bit) – ideapad 3-14IML05, ideapad 3-15IML05, ideapad 3-17IML05, V14 G1-IML, V15 G1-IMLTarget availability 2022-05-10Not AffectedTarget availability 2022-05-10
ideapad 5-15ARE05 LaptopBIOS Update for Windows 10 (64-bit) – ideapad 5-15ARE05E7CN44WWE7CN44WWE7CN44WW
ideapad 5-15IIL05 LaptopBIOS Update for Windows 10 (64-bit) – ideapad 5-15IIL05Target availability 2022-05-10Not AffectedTarget availability 2022-05-10
ideapad Creator 5-15IMH05 LaptopBIOS Update for Windows 10 (64-bit) – ideapad Gaming 3-15IMH05, Creator 5-15IMH05EGCN36WWEGCN36WWEGCN36WW
ideapad Gaming 3-15ARH05 LaptopBIOS Update for Windows 10 (64-bit) – ideapad Gaming 3-15ARH05FCCN17WWFCCN17WWFCCN17WW
ideapad Gaming 3-15IMH05 LaptopBIOS Update for Windows 10 (64-bit) – ideapad Gaming 3-15IMH05, Creator 5-15IMH05EGCN36WWEGCN36WWEGCN36WW

from

转载请注明出处及链接

Leave a Reply

您的电子邮箱地址不会被公开。 必填项已用*标注