Уязвимость в runc и LXC, затрагивающая Docker и другие системы контейнерной изоляции

В runc, инструментарии для запуска изолированных контейнеров, выявлена критическая уязвимость (CVE-2019-5736), позволяющая из подконтрольного злоумышленнику изолированного контейнера изменить исполняемый файл runc и получить root-привилегии на стороне хост-системы. Уязвимость затрагивает все системы контейнерной изоляции, использующие runtime runc, включая Docker, cri-o, containerd, Kubernetes, Podman и flatpak. Также отмечается, что аналогичная уязвимость присутствует в инструментариях LXC и Apache Mesos.

Суть уязвимости в возможности запуска исполняемого файла runc в окружении контейнера, но его обработки в контексте хост-системы. Например, атакующий может заменить /bin/bash в контейнере на скрипт с заголовком «#!/proc/self/exe» или использовать подставную разделяемую библиотеку. При выполнении «docker exec» и запуске runtime-ом подменённого /bin/bash внутри контейнера будет выполнен файл /proc/self/exe, который на данной стадии ссылается на исполняемый файл runtime (runc) в хост-окружении. После этого атакующий может через модификацию /proc/self/exe внутри контейнера внести изменение в исполняемый файл runc на стороне хост-системы.

Для проведения атаки требуется выполнение пользователем с правами root операции создания нового контейнера на основе подготовленного атакующим образа или подключения к существующему контейнеру (достаточно выполнения «docker exec»), к которому ранее атакующий имел доступ на запись. Проблема не блокируется профилем по умолчанию AppArmor и правилами SELinux в Fedora (процессы контейнера запускаются в контексте container_runtime_t). При этом проблема не проявляется при корректном использованием пространств имён идентификаторов пользователя (user namespaces) или при использовании режима «enforcing» SELinux в RHEL 7.

Уязвимость уже устранена в RHEL, Fedora и Ubuntu, но остаётся неисправленной в Debian и SUSE. Решающие проблему патчи подготовлены для runc и LXC. Рабочий прототип эксплоита планируют опубликовать 18 февраля.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.