В случае использования инструментариев 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.
Источник: http://www.opennet.ru/opennews/art.shtml?num=60545