Как пофиксить уязвимость Dirty COW (CVE-2016-5195)
Nov 3, 2016 09:59 · 301 words · 2 minute read
В ядре Linux 19-го октября была обнаружена опасная 0-day уязвимость, связанная с обработкой подсистемой памяти ядра механизма copy-on-write
(COW). Давайте разберемся как пофиксить данную уязвимость, уже получившую имя Dirty COW!
Данная уязвимость уже почти десять лет присутствует в ядре Linux (начиная с 2.6.22) и относится к privilege escalation. Эксплуатируя данную уязвимость неавторизованный локальный пользователь может получить доступ к memory mappings
с правом записи, хотя доступ должен быть ограничен только чтением.
На практике проблема позволяет выполнить запись данных в область памяти, находящуюся в режиме только для чтения. Например, в прототипе эксплоита показано как использовать данную проблему для изменения содержимого файла, принадлежащего пользователю root и доступного только на чтение:
sudo -s
echo this is not a test > foo
chmod 0404 foo
ls -lah foo
-r-----r-- 1 root root 19 Oct 20 15:23 foo
cat foo
this is not a test
gcc -lpthread dirtyc0w.c -o dirtyc0w
./dirtyc0w foo m00000000000000000
mmap 56123000
madvise 0
procselfmem 1800000000
$ cat foo
m00000000000000000
C помощью такого метода атаки непривилегированный пользователь может изменить исполняемые системные файлы, обойдя штатные механизмы управления доступом.
Уже на следующий день были выпущены обновления для версий Linux 4.8, 4.7 и 4.4 LTS, исправляющие уязвимость Dirty COW (CVE-2016-5195). Для устранения уязвимости необходимо выполнить несколько несложных действий:
- Проверить версию ядра, установленную в операционной системе:
uname -rv
Результат выполнения команды будет примерно следующим:
3.16.0-4-amd64 #1 SMP Debian 3.16.36-1+deb8u1 (2016-09-03)
Обязательно обновляемся, если версия ядра ниже, чем в этом списке:
4.8.0-26.28 for Ubuntu 16.10
4.4.0-45.66 for Ubuntu 16.04 LTS
3.13.0-100.147 for Ubuntu 14.04 LTS
3.2.0-113.155 for Ubuntu 12.04 LTS
3.16.36-1+deb8u2 for Debian 8
3.2.82-1 for Debian 7
4.7.8-1 for Debian unstable
- В ОС Debian/Ubuntu выполняем следующую команду:
sudo apt-get update && sudo apt-get dist-upgrade
В ОС Centos делаем так:
sudo yum update kernel
- После обновления перезагружаемся:
sudo reboot
После обновлений можно еще раз выполнить тест с помощью эксплоита.