
Воспроизведение CVE-2023-4863 (heap buffer overflow в libwebp) в полностью изолированном и автоматизированном Docker-окружении. Основано на практике модуля «Этичный хакинг» от CEFIRE.
Поднимает восемь контейнеров в приватной сети:
| Container | Роль |
|---|---|
| attacker | Генерирует exploit.webp с помощью craft.c и раздаёт его по HTTP вместе со страницей симулированного фишинга |
| victim-cli | Ubuntu 22.04 с libwebp 1.2.2-2ubuntu0.22.04.1 (уязвимая). Автоматически скачивает и обрабатывает эксплойт → crash |
| victim-patched | Ubuntu 22.04 с libwebp из репозитория безопасности Ubuntu (исправленная). Тот же эксплойт → контролируемая ошибка, без crash |
| victim-gui | Ubuntu 22.04 с XFCE, VNC и Firefox 110 (уязвимый). Реальный крах браузера с exploit.webp |
| victim-gui-patched | Ubuntu 22.04 с XFCE, VNC и Firefox 126 (исправленный). Тот же эксплойт → браузер выживает |
| postgres | PostgreSQL — бэкенд аутентификации и подключений Guacamole |
| guacd | Демон Apache Guacamole (прокси протоколов) |
| guacamole | Веб-интерфейс, из которого вы получаете доступ ко всем контейнерам по SSH или VNC, ничего дополнительно не устанавливая |
Автоматическая демонстрация (victim-cli против victim-patched) происходит сама при запуске. Визуальная демонстрация в GUI требует ручного взаимодействия через Guacamole.
make up
make up при первом запуске автоматически делает три вещи:
initdb.sh из официального образа)Первый раз сборка занимает несколько минут (скачиваются базовые образы, клонируется репозиторий PoC, устанавливаются пакеты). Последующие запуски используют кэш Docker и происходят почти мгновенно.
Когда всё завершится, вы увидите URL Guacamole в выводе. Контейнеры-жертвы не запускаются, пока атакующий не будет готов и не начнёт раздавать эксплойт (healthcheck).
| Доступ | Пользователь | Пароль |
|---|
В терминале, пока лабораторная запущена:
# Посмотреть crash на уязвимой жертве
make logs-victim-cli
# Посмотреть контролируемый ответ на исправленной жертве
make logs-victim-patched
Что вы увидите на 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
Что вы увидите на 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
Наиболее наглядная демонстрация — сравнение victim-gui (уязвимая) с victim-gui-patched (исправленная) с помощью dwebp из терминала на рабочем столе XFCE.
guacadmin / guacadminfirefox --no-sandbox http://attacker/index.html
exploit.webp → crash (SIGABRT, процесс умирает)Mozilla поддерживает постоянный публичный архив всех своих версий на releases.mozilla.org. Google удалил со своего CDN ссылки на старые версии Chrome, что делает невозможной надёжную загрузку Chrome 116. Firefox 110 столь же уязвим (оба встраивают libwebp внутрь себя), а его загрузка из архива Mozilla стабильна и воспроизводима.
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: localhost:5900 (victim-gui) и localhost:5901 (victim-gui-patched).
make logs # все логи в реальном времени
make status # состояние контейнеров
make shell-attacker # shell на атакующем
make shell-victim-cli
make shell-victim-gui
make shell-victim-gui-patched
make down # остановить лабораторную
make clean # остановить + удалить образы и сети
Chrome и libwebp: Chrome включает собственную копию libwebp (не использует системную). Версии ≥ 116.0.5845.187 содержат патч. Поскольку Google удалил ссылки на старые версии, Dockerfile использует запасной вариант с текущей стабильной версией (исправленной). Демонстрация краха с dwebp при этом так же валидна и более надёжна.
Изолированная сеть: ни один контейнер не имеет доступа к Интернету во время выполнения. Весь трафик остаётся внутри приватной Docker-сети cve4863-lab-net.
| Guacamole (веб) | guacadmin | guacadmin |
| SSH на все контейнеры | root | toor |
| VNC victim-gui и victim-gui-patched | — | secret |