Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
qemu-colo-l4-oob — QEMU 11.1.2 - Alta - Locale/Remota - OOB - Overflow heap IPv4 L4 breve in COLO filter-rewriter | Kitploit
Strumenti/GitHubGitHub/abraxas/qemu-colo-l4-oob
Memory ForensicsAnalisi delle VulnerabilitàExploitFuzzingPaper e RicercaBinary Exploitation
GitHubabraxas/qemu-colo-l4-oob

qemu-colo-l4-oob

QEMU 11.1.2 - Alta - Locale/Remota - OOB - Overflow heap IPv4 L4 breve in COLO filter-rewriter

Vedi Repository
22 giorni faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

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) - filtro-rewriter COLO

Classe: OOB (lettura/scrittura oltre i limiti del buffer heap). Portata: Locale (guest) / Remota (peer COLO).

parse_packet_early accetta IPv4 una volta che L2 più ip_hl*4 rientra. Non richiede mai un header L4 minimo. fill_connection_key legge poi quattro byte a transport_header senza alcun controllo della lunghezza residua. filter-rewriter copia il frame con g_malloc0(size) e, dopo che SYN ha spostato la connessione a TCPS_SYN_RECEIVED, un ACK con conn->offset != 0 scrive th_ack / th_seq oltre quel blocco quando la lunghezza catturata termina all'header di trasporto.

COLO non è predefinito. È attivo quando è configurato -object filter-rewriter (e colo-compare). Il TX/RX del guest su quel rewriter rientra nel modello di sicurezza della virtualizzazione. Un peer COLO su primary_in / secondary_in è un protocollo di rete, anch'esso non attendibile.

Un frame IPv4/TCP di 34 byte è sufficiente per un heap-buffer-overflow READ di ASan in filter-rewriter.

IDnessuna CVE al momento
CWECWE-125 / CWE-787
CVSSAlto: 8.2 CVSS:3.1/AV:L/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H
ProdottoQEMU
Affettov11.1.2 (4fc49f46), rewriter/compare COLO abilitati
Authguest su un netdev rewriter COLO, oppure un peer compare COLO
LicenzaGNU Affero GPL v3.0
Labsocket loopback 127.0.0.1:18770 / 18771

Cosa può fare un attaccante

Chi: guest non attendibile su una NIC abilitata a COLO, oppure un peer compare COLO ostile. Da guest a host / da peer a host. Heap dello spazio utente di QEMU.

Integrità / ricognizione (dimostrato in laboratorio)

MetodoSinkPrivilegio
ACK IPv4/TCP corto dopo un SYN con header completo (frame di 34 byte, lunghezza che termina all'header di trasporto)filter-rewriter handle_primary_tcp_pkt / fill_connection_keyheap-buffer-overflow READ di ASan in filter-rewriter. Il TCP di controllo con header completo lascia QEMU vivo.
Stesso limite minimo L4 mancanteparse_packet_early net/colo.c:43-98Il pacchetto viene classificato come TCP senza un header L4 nel buffer.

Integrità (dedotta, stesso limite mancante)

Dopo SYN, conn->offset != 0, il rewriter memorizza th_ack / th_seq in net/filter-rewriter.c:112-114 e :216-218. Le opzioni IP (ip_hl > 5) spostano quella scrittura sul chunk heap successivo. Scrittura heap sull'host attivabile dal guest.

colo-compare fill_pkt_tcp_info imposta header_size da th_off<<2 senza alcun controllo rispetto a pkt->size. payload_size va in underflow. colo_compare_packet_payload esegue memcmp per decine di kilobyte oltre entrambe le allocazioni dei pacchetti. Crash più lettura heap sull'host.

Disponibilità (dimostrato in laboratorio)

QEMU termina in modo anomalo sotto ASan sulla lettura del rewriter. Senza ASan si tratta di un OOB heap attivo nel processo dell'hypervisor.

Superficie adiacente che resta chiusa

  • I percorsi di lunghezza TAP / socket / bridge / l2tpv3 / stream / dgram su questo pin sono sembrati limitati (net_fill_rstate rifiuta packet_len > NET_BUFSIZE).
  • La perdita illimitata della tabella delle connessioni COLO al reset dell'hashtable è un hardening dell'allocazione, non questo residuo.
  • Kernel PwnEscape / Vghost: fuori da QEMU.
  • QEMU predefinito senza COLO: il rewriter non è attivo. Questo residuo richiede COLO configurato.

Il laboratorio non dimostra il controllo di RIP né una shell da guest a host. La classe è OOB heap del processo QEMU su un netdev abilitato a COLO.

Come l'ho trovato

Leggo net/colo.c cercando un limite minimo di lunghezza che includesse L4. Il limite è Ethernet più VLAN più vnet_hdr. ip_hl viene preso da una coda corta. fill_connection_key poi si fida di transport_header. filter-rewriter carica sempre th_flags all'offset 13 di struct tcp_hdr.

Vicoli ciechi: trattare la lunghezza TAP come il limite COLO (percorso diverso); inviare l'overflow come primo pacchetto (il rewriter necessita prima del SYN affinché conn->offset sia attivo); l'underflow di th_off in colo-compare come prova principale (la READ del rewriter è scattata prima).

Lab

cd lab
./run.sh

Destinazione solo socket loopback 127.0.0.1:18770 (netdev filter-rewriter) e 18771 (colo-compare). Il pin è clonato da github.com/qemu/QEMU tag v11.1.2 / 4fc49f46. ASan. Proxy COLO abilitato in fase di configure. Solo witness.

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

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

La correzione

parse_packet_early deve richiedere un header L4 completo (TCP 20, UDP 8, SCTP 12, AH 8) dopo l'header IP, e rifiutare quando size termina in corrispondenza o prima di transport_header. fill_connection_key e gli store th_* del rewriter devono verificare la lunghezza rimanente. colo-compare deve rifiutare th_off<<2 che non rientra in pkt->size prima di calcolare payload_size.

Riferimenti

  • github.com/qemu/QEMU tag v11.1.2 commit 4fc49f46dc95d4a27de2509e7fceb2931e91faeb
  • parse_packet_early · filter-rewriter
  • Stesso pin: qemu-xhci-complete-uaf · qemu-nvme-sgl-bar
  • Serie: QEMU 11.1.2 leftovers
  • CWE-125 · CWE-787

Licenza

GNU Affero GPL v3.0. Vedi LICENSE. Solo lab loopback. Nessuna garanzia.

Scarica lo strumento