Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

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

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

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
edk2-security — EDK2 BrotliCustomDecompressLib 安全发现 — 协调披露 | Kitploit
工具/GitHubGitHub/lukr54/edk2-security
嵌入式系统安全漏洞扫描器漏洞分析漏洞利用硬件与物联网安全论文与研究固件分析二进制利用
GitHublukr54/edk2-security

edk2-security

EDK2 BrotliCustomDecompressLib 安全发现 — 协调披露

查看仓库
171天前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

EDK2 BrotliCustomDecompressLib — 堆溢出(未修复)

EDK2 自带的 Brotli 解压胶水代码(MdeModulePkg/Library/BrotliCustomDecompressLib)中存在一个堆缓冲区溢出,自 2017 年起就存在,截至 2026-10-25 在 HEAD 上仍未修复。已通过概念验证和端到端受控破坏演示经 ASAN 确认。

摘要

EDK2 的 Brotli 封装从攻击者控制的 GUIDed 节头中读取解压后输出大小,将其从 UINT64 截断为 UINT32 且没有任何防护,然后将其传递给 DXE 核心,由后者分配该大小的缓冲区。随后 BrotliDecompressInternal 向该缓冲区解压时不受限制——它会一直运行到 Brotli 流结束,从而写出分配范围之外。

结果: 在 DXE 阶段、Secure Boot 验证完成之前发生堆溢出(写原语)。控制固件镜像(flash、capsule 或 ESP)的攻击者可以用选定的字节覆盖相邻的池对象——函数指针、安全标志、协议结构。

这是 CVE-2021-28211 被忽视的 Brotli 兄弟漏洞(LZMA 在 2021 年获得了 >MAX_UINT32 防护;Brotli 从未获得)。变体扫描确认 Brotli 是唯一同时缺少截断防护和输出边界的 EDK2 解压器。

受影响的代码

文件作用
BrotliDecompress.c:238将 UINT64 解码大小强制转换为 UINT32——没有 MAX_UINT32 防护
BrotliDecompress.c:118–157向目标缓冲区解压,没有边界检查
GuidedSectionExtraction.c调用 GetInfo 然后调用 Decompress——信任声明的大小
CoreSectionExtraction.c:1597按声明的大小分配目标缓冲区

全部位于 tianocore/edk2 的 MdeModulePkg/Library/BrotliCustomDecompressLib 中。

证据

产物描述
harness/edk2_brotli_overflow_poc.cASAN 概念验证:4096 字节流写入 64 字节缓冲区
harness/asan_output.txtASAN 输出:BrotliDecompressInternal → memcpy 处的 heap-buffer-overflow
harness/edk2_brotli_overflow_demo.c端到端演示:对相邻池对象的受控破坏
harness/demo_output.txt演示输出:函数指针被劫持,Secure Boot 被禁用
harness/lvfs_brotli_scan.pyLVFS 固件扫描器(影响范围测量)
harness/lvfs_scan_output.txt扫描结果:0/200 个固件镜像使用 Brotli
evidence/HEAD 上存在漏洞的 EDK2 源文件副本
FINDINGS.md完整报告:行号引用、先前技术检索、变体扫描、LZMA 审计

影响范围

狭窄。 两项独立调查发现,实践中没有任何平台使用 Brotli GUIDed 节:

  • GitHub 代码搜索(所有公开仓库):0 个平台 DSC 文件引用 BrotliCustomDecompressLib。所有命中都是 MdeModulePkg.dsc 本身。
  • LVFS 固件扫描(200 个出货镜像,9 家厂商):在 0/200 个镜像中发现 Brotli GUID。LZMA(阳性对照)在 161/200 中发现。

存在漏洞的代码随 EDK2 树发布,但如今是死代码——2017 年添加,从未被 IBV 或 OEM 采用。该漏洞是真实的,原则上可利用;如果 Brotli 采用率增加,它将立即变得可达。

修复

两处更改,与 LZMA 和 Tiano 已有的做法一致:

  1. 添加 MAX_UINT32 防护到 BrotliUefiDecompressGetInfo(BrotliDecompress.c:238):拒绝大于 MAX_UINT32 的解码大小,正如 LzmaDecompress.c:149 自 CVE-2021-28211 以来所做的那样。
  2. 限制输出在 BrotliDecompressInternal 中:跟踪已写入字节数并在 DestinationSize 处停止,正如 Tiano 解压器使用 mOrigSize 所做的那样。

复现

在 Linux 上使用 libbrotli 和 GCC 构建 PoC:

# ASAN proof (aborts at the overflow)
gcc -fsanitize=address -g -O1 -o poc harness/edk2_brotli_overflow_poc.c \
    -lbrotlienc -lbrotlidec
./poc

# Controlled-corruption demo (completes the overflow, shows the damage)
gcc -g -O1 -o demo harness/edk2_brotli_overflow_demo.c \
    -lbrotlienc -lbrotlidec
./demo

先前技术

  • CVE-2021-28211 — LZMA 的同类漏洞,已于 2021 年修复。Brotli 路径被 忽视了。
  • CVE-2026-111497 — 另一个独立的上游 Brotli 解码器缺陷(9.2)。EDK2 也 受影响(issue #13378),但那是另一项发现。
  • 没有任何公开的 CVE、安全公告、issue 或 PR 涉及 Brotli 胶水层溢出。 已核查:全部 14 个 EDK2 GHSA、全部 29 个 Brotli issue、全部 28 个 Brotli PR、 CVE/NVD、EDK2 HEAD。

披露

完全公开披露,2026-10-26。未向 TianoCore 提供协同披露期。影响范围狭窄(零个 已出货固件受影响)以及同类 LZMA 漏洞自 2021 年起就已公开这一事实,促成了这一 决定。

作者

@lukr54

下载工具