
Laboratorio basato su Docker per riprodurre CVE-2023-4863 (heap buffer overflow in libwebp) con dimostrazione automatica del crash, confronto tra versione patchata e vulnerabile, e sfruttamento tramite browser basato su GUI in una rete isolata.
Riproduzione di CVE-2023-4863 (heap buffer overflow in libwebp) in un ambiente Docker completamente isolato e automatizzato. Basato sull'esercitazione del modulo di Hacking Etico di CEFIRE.
Avvia otto container in rete privata:
| Container | Ruolo |
|---|---|
| attacker | Genera exploit.webp con craft.c e lo serve tramite HTTP insieme a una pagina di phishing simulata |
| victim-cli | Ubuntu 22.04 con libwebp 1.2.2-2ubuntu0.22.04.1 (vulnerabile). Scarica e processa l'exploit automaticamente → crash |
| victim-patched | Ubuntu 22.04 con libwebp dal repo di sicurezza di Ubuntu (patchato). Stesso exploit → errore controllato, nessun crash |
| victim-gui | Ubuntu 22.04 con XFCE, VNC e Firefox 110 (vulnerabile). Crash reale del browser con exploit.webp |
| victim-gui-patched | Ubuntu 22.04 con XFCE, VNC e Firefox 126 (patchato). Stesso exploit → browser sopravvive |
| postgres | PostgreSQL — backend di autenticazione e connessioni di Guacamole |
| guacd | Demone di Apache Guacamole (proxy di protocolli) |
| guacamole | Interfaccia web da cui accedi a tutti i container tramite SSH o VNC, senza installare nient'altro |
La dimostrazione automatica (victim-cli vs victim-patched) avviene da sola all'avvio. La dimostrazione visiva in GUI richiede interazione manuale da Guacamole.
make up
make up fa tre cose automaticamente se è la prima volta:
initdb.sh dall'immagine ufficiale)La build richiede qualche minuto la prima volta (scarica immagini base, clona il repo del PoC, installa pacchetti). Le esecuzioni successive usano la cache di Docker e sono quasi istantanee.
Quando termina, vedrai l'URL di Guacamole nell'output. I container delle vittime non si avviano finché l'attaccante non è pronto e sta servendo l'exploit (healthcheck).
| Accesso | Utente | Password |
|---|
In un terminale, mentre il lab è in esecuzione:
# Ver il crash nella vittima vulnerabile
make logs-victim-cli
# Ver la risposta controllata nella vittima patchata
make logs-victim-patched
Cosa vedrai in victim-cli:
[*] Ejecutando: dwebp /tmp/exploit.webp -o /tmp/salida.png
Decoding of exploit.webp failed.
Status: 3(BITSTREAM_ERROR)
*** glibc detected *** double free or corruption (!prev) ***
Aborted (core dumped)
[!] EXIT CODE: 134 (SIGABRT)
[!] CVE-2023-4863 CONFIRMADO
Cosa vedrai in victim-patched:
[*] Ejecutando: dwebp /tmp/exploit.webp -o /tmp/salida.png
Decoding of exploit.webp failed.
Status: 3(BITSTREAM_ERROR)
[+] EXIT CODE: 1 — Error controlado
[+] CVE-2023-4863 MITIGADO
La dimostrazione più visiva si fa confrontando victim-gui (vulnerabile) con victim-gui-patched (patchata) usando dwebp da un terminale del desktop XFCE.
guacadmin / guacadminfirefox --no-sandbox http://attacker/index.html
exploit.webp → crash (SIGABRT, processo morto)Mozilla mantiene un archivio pubblico permanente di tutte le sue versioni su releases.mozilla.org. Google ha ritirato gli URL delle versioni precedenti di Chrome dal suo CDN, rendendo impossibile scaricare Chrome 116 in modo affidabile. Firefox 110 è ugualmente vulnerabile (entrambi incorporano libwebp internamente) e il suo download dall'archivio di Mozilla è stabile e riproducibile.
ssh root@localhost -p 2220 # attacker
ssh root@localhost -p 2221 # victim-cli
ssh root@localhost -p 2223 # victim-patched
ssh root@localhost -p 2222 # victim-gui
ssh root@localhost -p 2224 # victim-gui-patched
VNC diretto: localhost:5900 (victim-gui) e localhost:5901 (victim-gui-patched).
make logs # tutti i log in tempo reale
make status # stato dei container
make shell-attacker # shell nell'attaccante
make shell-victim-cli
make shell-victim-gui
make shell-victim-gui-patched
make down # fermare il lab
make clean # fermare + eliminare immagini e reti
Chrome e libwebp: Chrome include la propria copia di libwebp (non usa quella di sistema). Le versioni ≥ 116.0.5845.187 includono la patch. Poiché Google ha ritirato gli URL delle versioni precedenti, il Dockerfile ricade al fallback con la versione stabile attuale (patchata). La dimostrazione del crash con dwebp è ugualmente valida e più affidabile.
Rete isolata: nessun container ha accesso a Internet durante l'esecuzione. Tutto il traffico rimane all'interno della rete Docker privata cve4863-lab-net.
| Guacamole (web) | guacadmin | guacadmin |
| SSH a tutti i container | root | toor |
| VNC victim-gui e victim-gui-patched | — | secret |