
Reprodução do CVE-2023-4863 (heap buffer overflow no libwebp) em um ambiente Docker completamente isolado e automatizado. Baseado na prática do módulo de Hacking Ético da CEFIRE.
Sobe oito containers em rede privada:
| Container | Função |
|---|---|
| attacker | Gera exploit.webp com craft.c e o serve por HTTP junto a uma página de phishing simulada |
| victim-cli | Ubuntu 22.04 com libwebp 1.2.2-2ubuntu0.22.04.1 (vulnerável). Baixa e processa o exploit automaticamente → crash |
| victim-patched | Ubuntu 22.04 com libwebp do repositório de segurança do Ubuntu (corrigido). Mesmo exploit → erro controlado, sem crash |
| victim-gui | Ubuntu 22.04 com XFCE, VNC e Firefox 110 (vulnerável). Crash real do navegador com exploit.webp |
| victim-gui-patched | Ubuntu 22.04 com XFCE, VNC e Firefox 126 (corrigido). Mesmo exploit → navegador sobrevive |
| postgres | PostgreSQL — backend de autenticação e conexões do Guacamole |
| guacd | Daemon do Apache Guacamole (proxy de protocolos) |
| guacamole | Interface web a partir da qual você acessa todos os containers por SSH ou VNC, sem instalar mais nada |
A demonstração automática (victim-cli vs victim-patched) acontece sozinha na inicialização. A demonstração visual na GUI requer interação manual a partir do Guacamole.
make up
make up faz três coisas automaticamente se for a primeira vez:
initdb.sh a partir da imagem oficial)O build leva alguns minutos na primeira vez (baixa imagens base, clona o repo do PoC, instala pacotes). As execuções seguintes usam o cache do Docker e são quase instantâneas.
Quando termina, você verá a URL do Guacamole no output. Os containers das vítimas não iniciam até que o atacante esteja pronto e servindo o exploit (healthcheck).
| Acesso | Usuário | Senha |
|---|
Em um terminal, enquanto o lab está rodando:
# 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
O que você verá em 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
O que você verá em 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
A demonstração mais visual é feita comparando victim-gui (vulnerável) com victim-gui-patched (corrigida) usando dwebp a partir de um terminal da área de trabalho XFCE.
guacadmin / guacadminfirefox --no-sandbox http://attacker/index.html
exploit.webp → crash (SIGABRT, processo morto)A Mozilla mantém um arquivo público permanente de todas as suas versões em releases.mozilla.org. O Google removeu as URLs de versões antigas do Chrome do seu CDN, tornando impossível baixar o Chrome 116 de forma confiável. O Firefox 110 é igualmente vulnerável (ambos embutem o libwebp internamente) e seu download a partir do arquivo da Mozilla é estável e reproduzível.
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 direto: localhost:5900 (victim-gui) e 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 e libwebp: o Chrome empacota sua própria cópia do libwebp (não usa a do sistema). As versões ≥ 116.0.5845.187 incluem o patch. Como o Google removeu as URLs de versões antigas, o Dockerfile cai no fallback com a versão estável atual (corrigida). A demonstração do crash com dwebp é igualmente válida e mais confiável.
Rede isolada: nenhum container tem acesso à Internet durante a execução. Todo o tráfego permanece dentro da rede Docker privada cve4863-lab-net.
| Guacamole (web) | guacadmin | guacadmin |
| SSH todos os containers | root | toor |
| VNC victim-gui e victim-gui-patched | — | secret |