Уязвимость в runc, позволяющая выбраться из контейнеров Docker и Kubernetes

Новости мира unix. Хотите узнать секрет вечного счастья? Откройте страницу 246.
Ответить
acolyte
Аватара пользователя
Сообщения: 3252
Зарегистрирован: 20.08.2022

#

Уязвимость в runc, позволяющая выбраться из контейнеров Docker и Kubernetes
Дата публикации:Sat, 03 Feb 2024 11:52:36 +0300




В инструментарии для запуска изолированных контейнеров runc, применяемом в Docker и Kubernetes, найдена уязвимость CVE-2024-21626, позволяющая получить доступ к файловой системе хост-окружения из изолированного контейнера. В ходе атаки злоумышленник может перезаписать некоторые исполняемые файлы в хост-окружения и таким образом добиться выполнения своего кода вне контейнера. В runtime LXC, crun и youki, так же использующих runc, проблема не проявляется. Уязвимость устранена в выпуске runc 1.1.12.



В случае использования инструментариев Docker или Kubernetes атака может быть совершена через подготовку специально оформленного образа контейнера, после установки и запуска которого в контейнере остаётся возможность обращения к внешней ФС. При использовании Docker имеется возможность эксплуатации через специально оформленный Dockerfile. Уязвимость также может быть эксплуатирована при запуске нового экземпляра контейнера командой "runc exec" через привязку рабочего каталога к пространству имён хостового окружения при помощи указания специального значения в параметре "workdir".




Уязвимость вызвана утечкой внутренних файловых дескрипторов. Перед запуском кода из контейнера в runc выполняется закрытие всех файловых дескрипторов при помощи флага O_CLOEXEC. Тем не менее, после последующего выполнения функции setcwd() оказывался открытым файловый дескриптор, указывающий на рабочий каталог и продолжающий оставаться доступным после запуска контейнера. Предложено несколько базовых сценария атаки на хост-окружение, используя оставшийся файловый дескриптор.



Например, атакующий может указать в образе контейнера параметр process.cwd, указывающий на "/proc/self/fd/7/", что приведёт к привязке к процессу pid1 в контейнере рабочего каталога, находящегося в пространстве монтирования хост-окружения. Таким образом в образе контейнера можно настроить запуск "/proc/self/fd/7/../../../bin/bash" и через выполнение shell-скрипта перезаписать содержимое "/proc/self/exe", которое ссылается на хостовую копию /bin/bash.



Другой вариант атаки позволяет злоумышленнику, ограниченному внутри контейнера, получить доступ к каталогу хостового окружения, если в указанном контейнере запускаются привилегированные процессы при помощи команды "runc exec с опцией "--cwd". Атакующий может подменить путь запускаемого процесса на символическую ссылку, указывающую на "/proc/self/fd/7/" и добиться открытия "/proc/$exec_pid/cwd" для доступа к ФС на стороне хоста. Атакующий также может добиться перезаписи исполняемых файлов на стороне хостового окружения, через организацию запуска исполняемого файла из хостового окружения с последующей перезаписью файла "/proc/$pid/exe", ссылающегося на тот запущенный файл.




Кроме того, в компонентах инструментария Docker выявлено ещё пять уязвимостей:
  • CVE-2024-23651 - состояние гонки в пакете BuildKit, применяемом в Docker для преобразования исходного кода в сборочные артефакты. Уязвимость вызвана использованием в параллельно выполняемых стадиях сборки одной общей точки монтирования в кэшем ("--mount=type=cache,source="), что позволяет при обработке в BuildKit специально оформленного Dockerfile получить из сборочного контейнера доступ к файлам в хостовом окружении. Уязвимость устранена в BuildKit 0.12.5.

    CVE-2024-23652 - ошибка при удалении пустых файлов, созданных для точки монтирования при использовании опции "--mount" позволяет добиться удаления файла вне контейнера при обработке специально оформленного Dockerfile. Уязвимость устранена в BuildKit 0.12.5.



    CVE-2024-23653 - ошибка в реализации API в BuildKit, позволяет добиться выполнения контейнера с повышенными привилегиями, невзирая на состояние настройки security.insecure. Уязвимость устранена в BuildKit 0.12.5.

    CVE-2024-23650 - вредоносный клиент или фронтэнд BuildKit может вызвать аварийное завершение фонового процесса BuildKit. Уязвимость устранена в BuildKit 0.12.5.


    CVE-2024-24557 - возможность отравления кэша в Moby, компоненте для построения специализированных систем контейнерной изоляции. При обработке специально оформленного образа контейнера можно добиться помещения в кэш данных, которые могут использоваться на следующих этапах сборки. Уязвимость устранена в Moby 25.0.2 и 24.0.9.




Новость позаимствована с opennet.ru
Ссылка на оригинал: https://www.opennet.ru/opennews/art.shtml?num=60545

Жизнь за Нер'зула!

Ответить