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

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

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

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
qemu-xhci-complete-uaf — QEMU 11.1.2 - 高危 - 本地 - UAF - xhci_complete 遗留自 CVE-2026-17588 doorbell DMA | Kitploit
工具/GitHubGitHub/abraxas/qemu-xhci-complete-uaf
内存取证漏洞分析漏洞利用论文与研究二进制利用实验室与实践
GitHubabraxas/qemu-xhci-complete-uaf

qemu-xhci-complete-uaf

QEMU 11.1.2 - 高危 - 本地 - UAF - xhci_complete 遗留自 CVE-2026-17588 doorbell DMA

查看仓库
82天前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Abraxas Labs - qemu-xhci-complete-uaf

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  qemu-xhci-complete-uaf

qemu-xhci-complete-uaf

QEMU v11.1.2(4fc49f46dc95d4a27de2509e7fceb2931e91faeb)- qemu-xhci

类别: UAF(堆释放后使用)。可达性: 本地(客户机)。

xhci_complete 是 CVE-2026-17588 的遗留问题。11.1.2 的补丁保护了两个 xHCI 定时器,却没有保护异步 USB 完成路径。当客户机将事件环指向 doorbell BAR 时,xhci_complete 仍会向 doorbell 0 写入一个 16 字节的 TRB DMA,而此时 TYPE_XHCI 的 mem_reentrancy_guard 已经清除。该写入会执行 xhci_process_commands。一个预先准备好的 CR_DISABLE_SLOT 会释放仍然存活的 XHCITransfer,而 xhci_complete 仍持有该对象。

q35 默认搭载 qemu-xhci。本实验中的批量传输搭档是 usb-uas。同一个完成回调也可从 usb-storage、usb-redir 和 usb-host 到达。

在 qemu-xhci 上运行的客户机内核,配合一个异步批量设备,即可对 QEMU 进程堆造成 UAF。

ID暂无 CVE
CWECWE-416
CVSS高危:8.2 CVSS:3.1/AV:L/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H
产品QEMU
受影响版本v11.1.2(4fc49f46)
认证qemu-xhci(q35 默认)上的客户机内核,外加 USB_RET_ASYNC 批量传输
许可证GNU Affero GPL v3.0
实验环境127.0.0.1:18700 仅 qtest

攻击者能做什么

攻击者:不受信任的客户机内核(或 USB 直通对端)。客户机到宿主机。QEMU 用户态堆。

完整性(实验验证)

方法汇聚点权限
客户机将 ERST / ERDP 指向 doorbell BAR,然后触发异步 UAS 完成xhci_complete hw/usb/hcd-xhci.c:3282-3295 -> xhci_write_event DMA对 XHCITransfer 的 ASan 堆释放后使用,而外层完成仍持有该对象。CR_DISABLE_SLOT 从 doorbell 重入中被取出。
同一路径,xhci_ep_nuke_xfers / xhci_ep_free_xferg_free(xfer)释放仍然存活的传输和端点上下文。若完成后再释放一次,则构成双重释放。

可用性(实验验证)

QEMU 进程在 ASan 下中止。没有 ASan 时,这是虚拟机监控器进程中的真实堆 UAF:客户机到宿主机崩溃,并可推断出对已释放 XHCITransfer 的复用。

侦察

除枚举 qemu-xhci 外无需任何操作。q35 默认即包含。

仍然关闭的相邻攻击面

  • CVE-2026-17588 定时器路径:xhci_mfwrap_timer 和 xhci_ep_kick_timer 会设置 xhci->parent.mem_reentrancy_guard。在此版本上已关闭。
  • EHCI 异步完成:标记为 FINISHED 并调度一个受保护的 BH。不会从 USB 完成回调写入事件环。
  • UAS 对象 UAF(CVE-2021-3713 类):状态 BH 在 UAS DeviceState 上受保护。遗留问题是经由事件环 DMA 的 xHCI 对象,而非 2021 年的 UAS 对象 n-day。
  • HID NAK 重试:那是 kick 定时器,现已受保护。
  • 客户机 root 断言和无界 RNDIS 分配:属于加固问题,不属于此类。

本实验未演示 RIP 控制或客户机到宿主机的 shell。此类漏洞是 QEMU 进程的堆 UAF。

我是如何发现的

我锁定 v11.1.2,因为它是当前 GA 版本,也是关闭 CVE-2026-17588 的标签。我专注于 hw/usb/hcd-xhci.c,追问补丁遗漏了哪些事件环写入者。

定时器会获取 TYPE_XHCI 保护。xhci_complete 不会。EHCI 早在 2021 年就已将此类操作推迟到 BH 上。xHCI 仍然从 USB 完成回调中写入 DMA。

错误转向:认为 UAS 状态 BH 已经足够(它保护的是 UAS,而不是 xHCI);等待 HID NAK(定时器,已打补丁);想要一个真正的客户机内核,而不是 qtest doorbell + usb-uas。

实验环境

cd lab
./run.sh

仅针对 127.0.0.1:18700(qtest)和 127.0.0.1:18701(QMP)。Pin 克隆自 github.com/qemu/QEMU 标签 v11.1.2 / 4fc49f46。ASan 构建。回环。仅见证。

SUCCESS qemu-xhci-complete-uaf how=ERROR: AddressSanitizer: heap-use-after-free erst=doorbell async=1 success=1 disable-slot-fetch=1 QEMU-XHCI-COMPLETE-UAF-WITNESS

复现:python3 qemu-xhci-complete-uaf-Abraxas-Labs.py。

修复方案

在整个 xhci_complete 过程中启用 xhci->parent.mem_reentrancy_guard,与两个定时器已有的做法相同。或者将 xhci_try_complete_packet / xhci_kick_epctx 延迟到受 TYPE_XHCI 保护的 BH 上执行,与 EHCI 保持一致。无论采用哪种方式,在向事件环写入 DMA 时都不能在保护未启用的状态下运行。

参考资料

  • github.com/qemu/QEMU 标签 v11.1.2 提交 4fc49f46dc95d4a27de2509e7fceb2931e91faeb
  • xhci_complete
  • 附近已修补(非此路径):CVE-2026-17588 xHCI 定时器重入
  • 同一固定版本:qemu-nvme-sgl-bar · qemu-colo-l4-oob
  • 系列文章:QEMU 11.1.2 leftovers
  • CWE-416

许可证

GNU Affero GPL v3.0。参见 LICENSE。仅限回环实验环境。不提供任何担保。

下载工具