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-colo-l4-oob — QEMU 11.1.2 - Élevé - Local/Distant - OOB - Débordement de tas L4 IPv4 court dans le filtre-rewriter COLO | Kitploit
Outils/GitHubGitHub/abraxas/qemu-colo-l4-oob
Criminalistique MémoireAnalyse des VulnérabilitésExploitationFuzzingArticles et RechercheExploitation de Binaires
GitHubabraxas/qemu-colo-l4-oob

qemu-colo-l4-oob

QEMU 11.1.2 - Élevé - Local/Distant - OOB - Débordement de tas L4 IPv4 court dans le filtre-rewriter COLO

Voir le dépôt
2il 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-colo-l4-oob

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  qemu-colo-l4-oob

qemu-colo-l4-oob

QEMU v11.1.2 (4fc49f46dc95d4a27de2509e7fceb2931e91faeb) - filtre réécrivain COLO

Classe : OOB (débordement de tampon de tas en LECTURE/ÉCRITURE). Portée : Locale (invité) / Distante (pair COLO).

parse_packet_early accepte l'IPv4 dès que la couche L2 plus ip_hl*4 tient. Il n'exige jamais d'en-tête L4 minimal. fill_connection_key lit ensuite quatre octets à transport_header sans vérification de la longueur restante. filter-rewriter copie la trame avec g_malloc0(size) et, après que SYN a fait passer la connexion à TCPS_SYN_RECEIVED, un ACK avec conn->offset != 0 écrit th_ack / th_seq au-delà de ce bloc lorsque la longueur capturée se termine à l'en-tête de transport.

COLO n'est pas activé par défaut. Il est actif lorsque -object filter-rewriter (et colo-compare) est configuré. Le TX/RX de l'invité sur ce réécrivain relève du modèle de sécurité de la virtualisation. Un pair COLO sur primary_in / secondary_in est un protocole réseau, également non fiable.

Une trame IPv4/TCP de 34 octets suffit pour une LECTURE de débordement de tampon de tas ASan dans filter-rewriter.

IDpas encore de CVE
CWECWE-125 / CWE-787
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), réécrivain/comparateur COLO activé
Authinvité sur un netdev de réécrivain COLO, ou un pair de comparaison COLO
LicenceGNU Affero GPL v3.0
Labosockets loopback 127.0.0.1:18770 / 18771

Ce qu'un attaquant peut faire

Qui : invité non fiable sur une NIC compatible COLO, ou pair de comparaison COLO hostile. Invité-vers-hôte / pair-vers-hôte. Tas de l'espace utilisateur QEMU.

Intégrité / reconnaissance (prouvé en labo)

MéthodePoint d'aboutissementPrivilège
ACK IPv4/TCP court après un SYN à en-tête complet (trame de 34 octets, longueur se terminant à l'en-tête de transport)filter-rewriter handle_primary_tcp_pkt / fill_connection_keyLECTURE de débordement de tampon de tas ASan dans filter-rewriter. Un TCP à en-tête complet de contrôle laisse QEMU en vie.
Même absence de plancher L4parse_packet_early net/colo.c:43-98Le paquet est classé comme TCP sans en-tête L4 dans le tampon.

Intégrité (déduite, même borne manquante)

Après SYN, conn->offset != 0, le réécrivain stocke th_ack / th_seq à net/filter-rewriter.c:112-114 et :216-218. Les options IP (ip_hl > 5) décalent cette écriture sur le bloc de tas suivant. ÉCRITURE de tas hôte déclenchable par l'invité.

colo-compare fill_pkt_tcp_info définit header_size à partir de th_off<<2 sans vérification par rapport à pkt->size. payload_size subit un sous-dépassement. colo_compare_packet_payload effectue un memcmp sur des dizaines de kilooctets au-delà des deux allocations de paquets. Plantage plus LECTURE de tas hôte.

Disponibilité (prouvé en labo)

QEMU s'interrompt sous ASan lors de la LECTURE du réécrivain. Sans ASan, il s'agit d'un OOB de tas actif dans le processus de l'hyperviseur.

Surface adjacente qui reste fermée

  • Les chemins de longueur TAP / socket / bridge / l2tpv3 / stream / dgram sur cette version semblaient bornés (net_fill_rstate rejette packet_len > NET_BUFSIZE).
  • La fuite non bornée de la table de connexions COLO lors de la réinitialisation de la table de hachage relève du durcissement de l'allocateur, pas de ce reliquat.
  • Kernel PwnEscape / Vghost : hors de QEMU.
  • QEMU par défaut sans COLO : le réécrivain n'est pas activé. Ce reliquat nécessite COLO configuré.

Le labo ne démontre pas de contrôle du RIP ni de shell invité-vers-hôte. La classe est un OOB de tas du processus QEMU sur un netdev compatible COLO.

Comment je l'ai trouvé

Je lis net/colo.c à la recherche d'un plancher de longueur qui inclut la couche L4. Le plancher est Ethernet plus VLAN plus vnet_hdr. ip_hl est pris depuis une queue courte. fill_connection_key fait ensuite confiance à transport_header. filter-rewriter charge toujours th_flags à l'offset 13 de struct tcp_hdr.

Fausses pistes : traiter la longueur TAP comme la borne COLO (chemin différent) ; envoyer le débordement comme premier paquet (le rewriter a besoin du SYN en premier pour que conn->offset soit actif) ; considérer le sous-dépassement de th_off de colo-compare comme le témoin principal (la LECTURE du rewriter s'est déclenchée en premier).

Lab

cd lab
./run.sh

Cible uniquement les sockets loopback 127.0.0.1:18770 (netdev filter-rewriter) et 18771 (colo-compare). Le pin est cloné depuis github.com/qemu/QEMU tag v11.1.2 / 4fc49f46. ASan. Proxy COLO activé au moment de la configuration. Witness-only.

SUCCESS qemu-colo-l4-oob asan=heap-buffer-overflow access=READ sink=filter-rewriter control=alive QEMU-COLO-L4-OOB-WITNESS

Rejouer : python3 qemu-colo-l4-oob-Abraxas-Labs.py.

Le correctif

parse_packet_early doit exiger un en-tête L4 complet (TCP 20, UDP 8, SCTP 12, AH 8) après l'en-tête IP, et rejeter lorsque size se termine à ou avant transport_header. fill_connection_key et les stockages th_* du réécrivain doivent vérifier la longueur restante. colo-compare doit rejeter th_off<<2 qui ne tient pas dans pkt->size avant de calculer payload_size.

Références

  • github.com/qemu/QEMU tag v11.1.2 commit 4fc49f46dc95d4a27de2509e7fceb2931e91faeb
  • parse_packet_early · filter-rewriter
  • Même version épinglée : qemu-xhci-complete-uaf · qemu-nvme-sgl-bar
  • Série : QEMU 11.1.2 leftovers
  • CWE-125 · CWE-787

Licence

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

Télécharger l’outil