Уязвимость в ядре Linux, позволяющая обойти ограничения user namespace

В ядре Linux в коде трансляции uid/gid из пространства имён идентификаторов пользователей (user namespace) в основной набор идентификаторов выявлена уязвимость (CVE-2018-18955), позволяющая непривилегированному пользователю, имеющему полномочия администратора в изолированном контейнере (CAP_SYS_ADMIN), обойти ограничения безопасности и получить доступ к ресурсам вне текущего пространства имён идентификаторов. Например, при использовании общей файловой системы в контейнере и хост-окружении можно через прямое обращение к i-node прочитать содержимое файла /etc/shadow в основном окружении.

Уязвимость вызвана ошибкой в ядре 4.15, внесённой в октябре прошлого года. Проблема исправлена в выпусках 4.18.19, 4.19.2 и 4.20-rc2. Уязвимость присутствует в функции map_write(), определённой в файле kernel/user_namespace.c, и вызвана некорректной обработкой вложенных пространств идентификаторов пользователей, в которых используется более 5 диапазонов UID или GID. В данных условиях трансляция идентификаторов uid/gid из пространства имён в ядро (forward map) работает корректно, но не выполняется при обратном преобразовании (reverse map, из ядра в пространство идентификаторов).

Возникает ситуация, когда идентификатор пользователя 0 (root) корректно сопоставляется с идентификатором 0 в ядре при прямом преобразовании, но не отражает реальной ситуации при обратном преобразовании, которое используется в проверках inode_owner_or_capable() и privileged_wrt_inode_uidgid(). Таким образом при обращении к inode ядро считает, что пользователь имеет должные полномочия, несмотря на то, что используется id 0 не из основного набора идентификаторов пользователей, а из отдельного пространства имён.

Уязвимость присутствует в дистрибутивах, использующих ядро 4.15 и более новые выпуски, например, в Ubuntu 18.04/18.10, Arch Linux и FedorаArch и Fedora уже доступно ядро 4.19.2 с исправлением). RHEL и SUSE не подвержены проблеме. В Debian и Red Hat Enterprise Linux поддержка «user namespace» по умолчанию не активирована, но она включена в Ubuntu и Fedora.

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

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

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