🖥
Уязвимость в runc, позволяющая выбраться из контейнеров Docker и Kubernetes⏩В инструментарии для запуска изолированных контейнеров
runc, применяемом в Docker и Kubernetes, найдена уязвимость
CVE-2024-21626, позволяющая получить доступ к файловой системе хост-окружения из изолированного контейнера. В ходе атаки злоумышленник может перезаписать некоторые исполняемые файлы в хост-окружения и таким образом добиться выполнения своего кода вне контейнера.
⏩Уязвимость устранена в выпуске
runc 1.1.12. В
runtime LXC,
crun и
youki, альтернативных
runc, проблема не проявляется.
⏩В случае использования инструментариев Docker или Kubernetes атака может быть совершена через подготовку специально оформленного образа контейнера, после установки и запуска которого из контейнера можно обратиться к внешней ФС. При использовании Docker имеется возможность эксплуатации через специально оформленный
Dockerfile. Уязвимость также может быть эксплуатирована в случае запуска в контейнере процессов командой
runc exec через привязку рабочего каталога к пространству имён хостового окружения
⏩Уязвимость вызвана утечкой внутренних файловых дескрипторов. Перед запуском кода внутри контейнера в
runc выполняется закрытие файловых дескрипторов при помощи флага
O_CLOEXEC. Однако, после последующего выполнения функции
setcwd() остаётся открытым файловый дескриптор, указывающий на рабочий каталог и продолжающий оставаться доступным после запуска контейнера. Предложено несколько базовых сценария атаки на хост-окружение, используя оставшийся файловый дескриптор
⏩Например, атакующий может указать в образе контейнера параметр process.cwd, указывающий на
"/proc/self/fd/7/", что приведёт к привязке к процессу
pid1 в контейнере рабочего каталога, находящегося в пространстве монтирования хост-окружения. Таким образом, в образе контейнера можно настроить запуск
"/proc/self/fd/7/../../../bin/bash" и через выполнение shell-скрипта перезаписать содержимое
"/proc/self/exe", которое ссылается на хостовую копию
/bin/bash.
📎
Читать подробнее@DevOPSitsec