Локальная уязвимость в ядре Linux, позволяющая получить root-доступ
В ядре Linux выявлена уязвимость (CVE-2017-1000253) в реализации метода загрузки исполняемых файлов ELF, которая позволяет добиться получения root-полномочий в системе. Проблема выявлена компанией Qualys и продолжает развитие метода Stack Сlash, основанном на пересечении содержимого стека и кучи.
Суть уязвимости заключается в том, что исполняемый файл приложения, скомпилированного в режиме PIE (Position Independent Executable), может быть загружен таким образом, что часть информации из сегмента данных отразится на области памяти, выделенных под стек. Т. е. через манипуляции с неисполняемыми данными можно переписать часть содержимого стека. Атакующий может воспользоваться данной проблемой для повышения своих привилегий через манипуляции с находящимися в системе исполняемыми файлами с флагом SUID, собранными в режиме PIE. Например приводится пример эксплуатации через утилиту ping.
Эксплуатация сводится к передаче в качестве аргумента в execve() строки, размером около 1.5 Гб, в результате чего PIE отражается в область памяти непосредственно ниже стека и становится применим метод атаки Stack Сlash. Вероятность такой раскладки оценивается в 1 из 17331, что позволяет добиться успешного стечения обстоятельств в среднем за пять часов, при интенсивности пробных запусков раз в секунду. Код для атаки очень близок к эксплоиту Linux_ldso_dynamic.c, опубликованному при анонсе Stack Сlash. При помощи вызова строковых операций, использующих стек, достигается пересечение со стеком PIE секции ".dynamic", после чего в ld.so инициируется загрузка собственной разделяемой библиотеки.
В ядре Linux проблема была исправлена еще в апреле 2015 года, без акцентирования на связь исправления с проблемами безопасности. Поэтому в LTS-ядра и пакеты с ядром некоторых дистрибутивов данное исправление не было перенесено. Уязвимости оказались подвержены все ветки RHEL/CentOS, но обновления уже включены в RHEL 7.4 и CentOS 1708, а также выпущены для прошлых веток RHEL 5.x, 6.x и 7.x. Проблема также уже устранена в Debian. В SUSE Linux Enterprise 12 GA, SP1, SP2 и SP3 проблема не проявляется, так исправление было принято в составе одного из патчей в июне 2015 года. Подверженность уязвимости Ubuntu и ветки SUSE Linux Enterprise 11 уточняется. В качестве обходного пути блокирования уязвимости можно установить "sysctl vm.legacy_va_layout=1" для активации устаревшей раскладки mmap.