
Образовательная демонстрация побега из контейнера runc с помощью CVE-2024-21626 с eBPF-гаджетом обнаружения попыток эксплуатации.
Этот репозиторий содержит примеры кода для приложения, уязвимого к CVE-2024-21626, а также eBPF-гаджет для обнаружения попыток эксплуатации.
Этот репозиторий был создан в рамках этой записи в блоге.
Гаджет, используемый для обнаружения данной уязвимости, предназначен только для демонстрационных целей. Он не является полноценным средством обнаружения CVE-2024-21626.
CVE-2024-21626 — это уязвимость в среде выполнения контейнеров runc, присутствующая в версиях до v1.1.12. Она основана на том, что runc не закрывает «утекший» файловый дескриптор своевременно при создании или выполнении команд внутри контейнера, в результате чего контейнер наследует этот файловый дескриптор и получает доступ к файловой системе хоста.
Существует несколько способов эксплуатации этой уязвимости. Этот репозиторий показывает, как данную уязвимость можно эксплуатировать во время выполнения.
Подробнее можно почитать здесь.
Для работы этой демонстрации убедитесь, что на вашей машине установлена версия runc <= 1.1.11.
leaky-app — это приложение на Go, которое создаёт символическую ссылку на потенциально утекший файловый дескриптор. Для сборки образа Docker:
make leaky-app
Чтобы собрать eBPF-гаджет, вам понадобится инструмент [ig].
Собрать гаджет можно с помощью:
make gadget
После сборки обоих компонентов запустите гаджет командой:
IG_EXPERIMENTAL=true sudo -E ig run trace-symlink:latest
Откройте другой терминал и запустите контейнер leaky-app:
docker run --rm --name leaky-app leaky-app
Вы должны увидеть, как гаджет выводит контейнер, вызвавший системный вызов symlink.
Этот репозиторий содержит демонстрационное приложение, предназначенное для демонстрации обнаружения CVE-2024-21626. Важно отметить, что эта демонстрация предназначена исключительно для образовательных целей и не должна рассматриваться как практическое средство обнаружения. Механизмы обнаружения, реализованные в этой демонстрации, не охватывают все сценарии и не отражают всей сложности обнаружения данной уязвимости.