
Laboratoire basé sur Docker pour reproduire CVE-2023-4863 (débordement de tas dans libwebp) avec démonstration automatique de crash, comparaison entre version patchée et vulnérable, et exploitation via navigateur en mode graphique dans un réseau isolé.
Reproduction de CVE-2023-4863 (heap buffer overflow dans libwebp) dans un environnement Docker complètement isolé et automatisé. Basé sur la pratique du module de Hacking Éthique de CEFIRE.
Lance huit conteneurs en réseau privé :
| Container | Rôle |
|---|---|
| attacker | Génère exploit.webp avec craft.c et le sert via HTTP avec une page de phishing simulée |
| victim-cli | Ubuntu 22.04 avec libwebp 1.2.2-2ubuntu0.22.04.1 (vulnérable). Télécharge et traite l'exploit automatiquement → crash |
| victim-patched | Ubuntu 22.04 avec libwebp du dépôt de sécurité Ubuntu (patché). Même exploit → erreur contrôlée, sans crash |
| victim-gui | Ubuntu 22.04 avec XFCE, VNC et Firefox 110 (vulnérable). Crash réel du navigateur avec exploit.webp |
| victim-gui-patched | Ubuntu 22.04 avec XFCE, VNC et Firefox 126 (patché). Même exploit → navigateur survit |
| postgres | PostgreSQL — backend d'authentification et de connexions de Guacamole |
| guacd | Démon d'Apache Guacamole (proxy de protocoles) |
| guacamole | Interface web depuis laquelle tu accèdes à tous les conteneurs par SSH ou VNC, sans rien installer de plus |
La démonstration automatique (victim-cli vs victim-patched) se produit seule au démarrage. La démonstration visuelle dans GUI nécessite une interaction manuelle depuis Guacamole.
make up
make up fait trois choses automatiquement si c'est la première fois :
initdb.sh depuis l'image officielle)Le build prend quelques minutes la première fois (télécharge les images de base, clone le dépôt du PoC, installe les paquets). Les exécutions suivantes utilisent le cache de Docker et sont presque instantanées.
Quand ça termine, tu verras l'URL de Guacamole dans la sortie. Les conteneurs victimes ne démarrent pas tant que l'attaquant n'est pas prêt et ne sert pas l'exploit (healthcheck).
| Accès | Utilisateur | Mot de passe |
|---|
Dans un terminal, pendant que le lab tourne :
# Ver el crash en la víctima vulnerable
make logs-victim-cli
# Ver la respuesta controlada en la víctima parcheada
make logs-victim-patched
Ce que tu verras dans 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
Ce que tu verras dans 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 démonstration la plus visuelle se fait en comparant victim-gui (vulnérable) avec victim-gui-patched (patchée) en utilisant dwebp depuis un terminal du bureau XFCE.
guacadmin / guacadminfirefox --no-sandbox http://attacker/index.html
exploit.webp → crash (SIGABRT, processus mort)Mozilla maintient une archive publique permanente de toutes ses versions sur releases.mozilla.org. Google a retiré les URL des anciennes versions de Chrome de son CDN, rendant impossible le téléchargement fiable de Chrome 116. Firefox 110 est tout aussi vulnérable (les deux embarquent libwebp en interne) et son téléchargement depuis l'archive de Mozilla est stable et reproductible.
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 direct : localhost:5900 (victim-gui) et localhost:5901 (victim-gui-patched).
make logs # todos los logs en tiempo real
make status # estado de los containers
make shell-attacker # shell en el atacante
make shell-victim-cli
make shell-victim-gui
make shell-victim-gui-patched
make down # parar el lab
make clean # parar + borrar imágenes y redes
Chrome et libwebp : Chrome embarque sa propre copie de libwebp (n'utilise pas celle du système). Les versions ≥ 116.0.5845.187 incluent le correctif. Comme Google a retiré les URL des anciennes versions, le Dockerfile tombe en fallback sur la version stable actuelle (patchée). La démonstration du crash avec dwebp est tout aussi valable et plus fiable.
Réseau isolé : aucun conteneur n'a accès à Internet pendant l'exécution. Tout le trafic reste dans le réseau Docker privé cve4863-lab-net.
| Guacamole (web) | guacadmin | guacadmin |
| SSH tous les conteneurs | root | toor |
| VNC victim-gui et victim-gui-patched | — | secret |