Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
qemu-xhci-complete-uaf — QEMU 11.1.2 - Élevé - Local - UAF - xhci_complete résidu de CVE-2026-17588 doorbell DMA | Kitploit
Outils/GitHubGitHub/abraxas/qemu-xhci-complete-uaf
Criminalistique MémoireAnalyse des VulnérabilitésExploitationArticles et RechercheExploitation de BinairesLabs et Pratique
GitHubabraxas/qemu-xhci-complete-uaf

qemu-xhci-complete-uaf

QEMU 11.1.2 - Élevé - Local - UAF - xhci_complete résidu de CVE-2026-17588 doorbell DMA

Voir le dépôt
8il y a 2 joursPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

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

Classe : UAF (use-after-free sur le tas). Portée : Locale (invité).

xhci_complete est le reliquat de CVE-2026-17588. Le correctif 11.1.2 protège les deux timers xHCI. Il ne protège pas le chemin de complétion USB asynchrone. Un invité qui pointe l'event ring vers la BAR doorbell obtient toujours un TRB de 16 octets écrit par DMA dans doorbell 0 depuis xhci_complete, avec le mem_reentrancy_guard TYPE_XHCI déjà libéré. Cette écriture exécute xhci_process_commands. Un CR_DISABLE_SLOT préparé libère le XHCITransfer actif alors que xhci_complete le détient encore.

q35 embarque qemu-xhci. Le partenaire bulk dans ce lab est usb-uas. Le même callback de complétion est atteignable depuis usb-storage, usb-redir et usb-host.

Un noyau invité sur qemu-xhci plus un périphérique bulk asynchrone peut provoquer un UAF sur le tas du processus QEMU.

IDpas encore de CVE
CWECWE-416
CVSSÉlevé : 8.2 CVSS:3.1/AV:L/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H
ProduitQEMU
Affectév11.1.2 (4fc49f46)
Authnoyau invité sur qemu-xhci (par défaut sur q35) plus bulk USB_RET_ASYNC
LicenceGNU Affero GPL v3.0
Lab127.0.0.1:18700 qtest uniquement

Ce qu'un attaquant peut faire

Qui : noyau invité non fiable (ou pair de passthrough USB). De l'invité vers l'hôte. Tas de l'espace utilisateur QEMU.

Intégrité (prouvé en lab)

MéthodePoint de chutePrivilège
ERST / ERDP de l'invité sur la BAR doorbell, puis complétion UAS asynchronexhci_complete hw/usb/hcd-xhci.c:3282-3295 -> DMA xhci_write_eventheap-use-after-free sous ASan de XHCITransfer alors que la complétion externe le détient encore. CR_DISABLE_SLOT récupéré lors de la réentrance doorbell.
Même chemin, xhci_ep_nuke_xfers / xhci_ep_free_xferg_free(xfer)Libération du transfert actif et du contexte d'endpoint. Double-free si la complétion libère à nouveau.

Disponibilité (prouvé en lab)

Abandon du processus QEMU sous ASan. Sans ASan, il s'agit d'un UAF sur le tas actif dans le processus hyperviseur : crash de l'invité vers l'hôte, et réutilisation inférée du XHCITransfer libéré.

Reconnaissance

Aucune nécessaire au-delà de l'énumération de qemu-xhci. q35 l'embarque par défaut.

Surface adjacente qui reste fermée

  • Chemin des timers CVE-2026-17588 : xhci_mfwrap_timer et xhci_ep_kick_timer positionnent xhci->parent.mem_reentrancy_guard. Fermé sur ce pin.
  • Complétion asynchrone EHCI : marque FINISHED et planifie un BH protégé. N'écrit pas l'event ring depuis le callback de complétion USB.
  • UAF de l'objet UAS (classe CVE-2021-3713) : le BH de statut est protégé sur le DeviceState UAS. Le reliquat est l'objet xHCI via le DMA de l'event ring, pas un n-day 2021 de l'objet UAS.
  • Retry NAK HID : c'est le kick timer, désormais protégé.
  • Assertions root invité et allocation RNDIS non bornée : durcissement, pas cette classe.

Le lab ne démontre pas de contrôle du RIP ni de shell de l'invité vers l'hôte. La classe est l'UAF sur le tas du processus QEMU.

Comment je l'ai trouvé

J'ai épinglé v11.1.2 car c'est la version GA actuelle et le tag qui a fermé CVE-2026-17588. Je me suis penché sur hw/usb/hcd-xhci.c et j'ai demandé quels écrivains de l'event ring le correctif avait manqués.

Les timers prennent le guard TYPE_XHCI. xhci_complete ne le prend pas. EHCI avait déjà reporté cette classe sur un BH en 2021. xHCI écrit toujours par DMA depuis le callback de complétion USB.

Faux pas : considérer le statut BH de l'UAS comme suffisant (il protège l'UAS, pas le xHCI) ; attendre un NAK HID (minuteur, déjà corrigé) ; vouloir un vrai noyau invité au lieu de qtest doorbell + usb-uas.

Lab

cd lab
./run.sh

Cibler uniquement 127.0.0.1:18700 (qtest) et 127.0.0.1:18701 (QMP). Pin est cloné depuis github.com/qemu/QEMU tag v11.1.2 / 4fc49f46. Build ASan. Loopback. Witness-only.

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

Rejouer : python3 qemu-xhci-complete-uaf-Abraxas-Labs.py.

Le correctif

Engager xhci->parent.mem_reentrancy_guard pendant toute la durée de xhci_complete, de la même manière que le font déjà les deux timers. Ou bien différer xhci_try_complete_packet / xhci_kick_epctx vers un BH protégé par TYPE_XHCI, à l'image d'EHCI. Dans les deux cas, l'écriture DMA dans l'event ring ne doit pas s'exécuter avec le garde désactivé.

Références

  • github.com/qemu/QEMU tag v11.1.2 commit 4fc49f46dc95d4a27de2509e7fceb2931e91faeb
  • xhci_complete
  • Correctif voisin (pas ce chemin) : CVE-2026-17588 réentrance du timer xHCI
  • Même pin : qemu-nvme-sgl-bar · qemu-colo-l4-oob
  • Série : QEMU 11.1.2 leftovers
  • CWE-416

Licence

GNU Affero GPL v3.0. Voir LICENSE. Laboratoire en boucle locale uniquement. Aucune garantie.

Télécharger l’outil