Исследователи безопасности из группы Zero, созданной компанией Google для предотвращения атак, совершаемых с использованием ранее неизвестных уязвимостей, опубликовали детали эксплуатации уязвимости (CVE-2018-17182) в подсистеме vmacache ядра Linux, о которой сообщалось на прошлой неделе. Продемонстрирован процесс создания рабочего эксплоита при наличии возможности обращения к уже освобождённому блоку памяти (use-after-free), вызванной отсутствием проверки переполнения 32-разрядного номера последовательности в vmacache.
Уязвимость может быть эксплуатирована для повышения привилегий любым локальным процессом, который может выполняться достаточно долго для переполнения счётчика ссылок (около часа, если доступен MAP_FIXED) и способного выполнять маппинг областей памяти при помощи системных вызовов mmap()/munmap() и создавать потоки через вызов clone(). Отдельно отмечается, что указанные системные вызовы не требуют каких-то особых привилегий и обычно доступны даже из sandbox-окружений (например, допустимы в sandbox-окружении процесса отрисовки браузера Chrome и присутствуют в списке разрешённых системных вызовов Docker).
Проблема появилась в ядре 3.16 и исправлена в обновлениях 4.18.9, 4.14.71, 4.9.128, 4.4.157 и 3.16.58. Работа эксплоита продемонстрирована в Ubuntu 18.04 я ядром linux-image-4.15.0-34-generic, в том числе атака может быть совершена из изолированных окружений на базе Docker. В Debian и Ubuntu проблема пока остаётся неисправленной и обновления пакетов ещё не сформированы. Исправление уже доступно в Fedora и Slackware. Ситуация с исправлением пока не ясна для RHEL и SUSE.
В качестве временной меры защиты от предложенного эксплоита можно установить sysctl kernel.dmesg_restrict и kernel.panic_on_oops.
|