Harness headless QEMU/OVMF che avvia un boot PXE e invia errori ICMP sovradimensionati per riprodurre il buffer overflow di EDK II PxeBcSupport (CVE-2026-97631) in un laboratorio locale.
⚠️ SOLO LABORATORIO LOCALE. Questi strumenti pilotano una VM QEMU locale contro un firmware che controlli tu. Non puntare mai il generatore ICMP verso hardware o reti che non possiedi.
CVE-2026-97631: un buffer overflow vecchio di 16 anni in TianoCore EDK II
(NetworkPkg/UefiPxeBcDxe/PxeBcSupport.c) — un messaggio di errore ICMP di dimensioni eccessive
durante un boot di rete PXE copia oltre la struct EFI_PXE_BASE_CODE_ICMP_ERROR da 504 byte, corrompendo la memoria del firmware in ring 0, prima del caricamento di Secure Boot e TPM.
Corretto da PR #13200 /
#13302; copertura della divulgazione:
Ars Technica.
Tre piccoli componenti solo-stdlib che portano una VM OVMF/QEMU headless dal cold boot a un tentativo di boot PXE — con un server DHCP e l'attacco ICMP sul filo:
| file | ruolo |
|---|---|
bridge.py | server DHCP minimale sul filo QEMU (DISCOVER→OFFER→REQUEST→ACK, attesa TFTP RRQ), poi sferra l'attacco: 6× errori ICMP type-3 code-1 che citano un falso datagramma da 1200 byte nella struct da 504 byte. --attack on/off. |
router.py | router dello stato dello schermo: classifica lo schermo di OVMF dalle statistiche dei pixel di screendump (nero = UEFI Shell, blu = front page / Boot Manager) e pilota l'interfaccia tramite il monitor QEMU (sendkey) finché non viene eseguita l'opzione di boot PXE. |
drive.py | driver da tastiera passo-passo precedente con rilevamento della barra di evidenziazione PPM (mantenuto come riferimento). |
Forma di esecuzione:
# VM: OVMF pflash, virtio-net su un netdev socket UDP (niente instabilità mcast),
# pcap wire tap + logging dei reset CPU:
qemu-system-x86_64 -machine q35 -m 512 -display none \
-drive if=pflash,format=raw,readonly=on,file=$FW-code.fd \
-drive if=pflash,format=raw,file=$FW-vars.fd \
-netdev socket,id=n0,udp=127.0.0.1:5555,localaddr=127.0.0.1:6666 \
-device virtio-net-pci,netdev=n0,bootindex=0 \
-object filter-dump,id=f1,netdev=n0,file=dump.pcap \
-monitor unix:qmon.sock,server,nowait -serial none -d cpu_reset -D resets.log &
python3 bridge.py --attack & # DHCP + trigger dell'overflow ICMP
python3 router.py qmon.sock run.log # naviga headless fino a UEFI PXE IPv4
tcpdump -r dump.pcpa # verità sul filo
grep -c "CPU Reset" resets.log # segnale di crash (baseline: 2 su boot pulito)
Tutto fino al tentativo di boot PXE funziona in modo riproducibile (routing dello stato dello schermo, wire tap, motore DHCP/attacco armato). Sulle build OVMF incluse in QEMU che abbiamo testato (IA32 e X64, q35 e i440fx, TCG), il firmware mostra il banner PXE e poi trasmette zero pacchetti — il DHCP Discover non lascia mai il firmware, quindi il trigger ICMP non raggiunge mai l'handler vulnerabile. Per andare oltre serve una build OVMF con debug seriale o hardware reale da laboratorio. L'harness è pubblicato fino a questo esatto confine di proposito: le affermazioni di riproducibilità devono fermarsi dove si è fermata l'esecuzione.
MIT. Di @slabbdev — complemento al post del blog.