В ядре Linux найдена новая критическая уязвимость (разновидность Dirty COW)

Уязвимость ядра Linux (Dirty COW)

В ядре Linux выявлена критическая уязвимость (CVE-2017-1000405), которая манипулирует недоработкой в прошлогодних патчах, устраняющих нашумевшую уязвимость Dirty COW (CVE-2016-5195), но, как оказалось, закрывающих не все векторы атаки. Проблема проявляется в ядрах с 2.6.38 по 4.14 и позволяет поднять свои привилегии в системе. Для проверки своих систем на наличие уязвимости доступен рабочий прототип эксплоита.

Уязвимость присутствует в подсистеме управления памятью (в функции pmd_mkdirty) в реализации режима Transparent HugePage (THP). К функции touch_pmd() можно получить доступ через вызов get_user_pages() и добиться изменения содержимого PMD (Page Medium Directory) без выполнения цикла copy-on-write (COW) при попытке записи (в нормальных условиях при изменении общих страниц происходит «write fault» и для пытающегося выполнить запись процесса создаётся копия страницы памяти, в которую и вносятся изменения). В итоге, появляется возможность изменения содержимого больших страниц памяти, находящихся в режиме только для чтения, в том числе нулевой страницы виртуального адресного пространства процессов.

В отличие от уязвимости Dirty COW отсутствует возможность изменения содержимого произвольных файлов, так как в Ext4 не поддерживается маппинг обычных файлов в память с применением THP-страниц. При этом можно добиться перезаписи THP в режиме read-only, например перезаписать содержимое памяти привилегированного процесса или файлов, привязанных к разделяемой памяти (файлы в shmem могут отражаться в память с использованием THP).

Проблема пока остаётся неисправленной в Debian, Ubuntu, openSUSE, Gentoo. Обновления уже выпущены для Fedora 26 и 27. Штатные ядра SUSE Linux Enterprise и RHEL/CentOS проблеме не подвержены. Для ядра Linux подготовлен патч. В качестве обходного пути защиты можно отключить THP или запретить маппинг нулевой страницы в режиме THP:

echo never > /sys/kernel/mm/transparent_hugepage/enabled

echo 0 > /sys/kernel/mm/transparent_hugepage/use_zero_page

 

Информация взята с источника OpenNet.ru