Локальная root-уязвимость в ядре Linux
В ядре Linux обнаружена локальная уязвимость (CVE-2016–8655), позволяющая локальному непривилегированному пользователю выполнить код с правами root. В том числе, уязвимость может быть использована для выхода за пределы изолированных контейнеров, работающих с использованием пространств имён идентификаторов пользователей. Рабочий прототип эксплоита подготовлен для Ubuntu 14.04/16.04 c ядром Linux 4.4 и работает независимо от активации механизмов защиты SMEP/SMAP (Supervisor Mode Execution Prevention/Supervisor Mode Access Prevention).
Проблема вызвана состоянием гонки в коде net/packet/af_packet.c и присутствует, начиная с выпуска ядра Linux 3.2-rc1, представленного в августе 2011 года. Уязвимость затрагивает функцию packet_set_ring () и позволяет через манипуляции с кольцевым буфером TPACKET_V3 осуществить обращение по уже освобождённому указателю функции, что может быть эксплутаировано для запуска кода на уровне ядра Linux.
Для атаки пользователь должен иметь полномочия по созданию сокетов AF_PACKET, которые предоставляются при наличии прав CAP_NET_RAW. В Debian, Red Hat Enterprise Linux и, возможно, в некоторых других дистрибутивах (требуется уточнение информации) проблема проявляется только при предоставлении администратором прав CAP_NET_RAW и активации поддержки пространств имён идентификаторов пользователей (user namespaces, sysctl kernel.unprivileged_userns_clone=1), которая отключена по умолчанию. В Ubuntu и Fedora режим user namespaces включен по умолчанию, но для атаки по-прежнему требуется получение полномочий CAP_NET_RAW. На платформе Android право создавать сокеты AF_PACKET имеет процесс mediaserver, через который может быть эксплуатирована уязвимость.
Патч с исправлением уязвимости принят в состав ядра Linux 4.9-rc8. Обновления пактов пока выпущены только для Ubuntu. Проблема остаётся неисправленной в Fedora, openSUSE, Debian, CentOS/RHEL 7, SUSE Linux Enerprise 12. Уязвимость не затрагивает SLE 11, RHEL 5 и RHEL 6.
Дополнительно можно отметить публикацию обновления для платформы Android, в котором устранено шесть критических уязвимостей, из которых три затрагивают ядро Linux, две драйвер NVIDIA и одна модуль для чипов Qualcomm). Уязвимости могут привести к выполнению кода с правами ядра. Эксплоиты для данных уязвимостей пока не сформированы, но информация о проблемах и код патчей уже доступны публично. Из проблем не отнесённых к категории критических, также отмечаются более 20 уязвимостей, которые дают возможность организовать выполнение кода с правами текущего процесса или позволяют поднять свои привилегии через манипуляции с различными подсистемами (kernel file system, HTC sound codec, MediaTek driver, Qualcomm codec, Qualcomm camera driver, NVIDIA libomx, libziparchive, Smart Lock, Telephony, Wi-Fi, Qualcomm sound driver и т.п.).
© OpenNet