Локальная root-уязвимость в ядре Linux

12.01.2016 22:44

Раскрыты подробности эксплуатации уязвимости (CVE-2015-8660) в ядре Linux, позволяющей непривилегированному локальному пользователю получить права root. Уязвимость вызвана недоработкой в коде установки прав доступа в файловой системе OverlayFS, проявляющейся при использовании пространств имён для идентификаторов пользователей (user namespaces).

Суть проблемы в том, что пользователь может при помощи технологии "user namespaces" создать изолированное окружение со своим пользователем root и примонтировать в нём часть внешней ФС через OverlayFS. Из-за ошибки в OverlayFS при изменении прав доступа в изолированном окружении, изменения также остаются в связанной с OverlayFS директории для хранения изменений (например, директория для изменений может быть создана в tmpfs и остаётся доступна извне, также доступ к ФС изолированного окружения можно получить через /proc). Таким образом, в изолированном окружении можно создать исполняемый файл с флагом suid root и выполнить его вне изолированного окружения. Для тестирования подготовлен прототип эксплоита.

Вызвавшая уязвимость ошибка была устранена в ядре Linux в начале декабря и вошла в состав релиза ядра 4.4, но детальная информация об уязвимости обнародована только сейчас. Проблема проявляется начиная с ядра 3.18, поэтому не касается штатных ядер дистрибутивов RHEL/CentOS 5/6 (ядро RHEL/CentOS 7 подвержено проблеме) и Debian, но затрагивает выпуски Ubuntu 15.10 и Fedora 23 и уже устранена в опубликованных несколько дней назад обновлениях пакетов с ядром.

Следует отметить, что так как многие старые подсистемы ядра написаны без оглядки на возможности User Namespace, не исключается наличие ещё не выявленных похожих уязвимостей. Например, кроме OverlayFS подобные проблемы найдены в ptrace (CVE-2015-8709). В качестве обходного пути защиты рекомендуется отключить поддержку User Namespace в ядре (CONFIG_USER_NS=n). Проверить включена ли поддержка User Namespace можно командой "ls /proc/self/ns|grep user".