В ядре Linux найдена опасная уязвимость, позволяющая локальному злоумышленнику выполнить код с правами пользователя root (при наличии доступной пользователю SUID root программы, такой как, например, /bin/su). Проблема наблюдается, начиная с ядра 2.6.39. Уязвимость также проявляется для ядра, используемого в RHEL 6 (начиная с 2.6.32-220.el6, но старее 2.6.32-220.4.1, в котором уязвимость исправлена). На данный момент уже опубликовано три рабочих эксплоита. Уязвимости присвоен номер CVE-2012-0056.

Источником уязвимости является ошибка в реализации proc-интерфейса для прямого доступа к памяти процесса (/proc/pid/mem). До версии ядра 2.6.39 этот интерфейс предоставлял доступ только на чтение, т.к. было известно, что для записи он небезопасен. Незадолго до выхода версии 2.6.39 ограничения доступа к /proc/pid/mem были переделаны, после чего доступ на запись был разрешён. Как оказалось, проверка привилегий была выполнена некорректно, что позволяет локальному пользователю получить права суперпользователя во всех ядрах 2.6.39 и выше (исключая GIT snapshot, в котором данная уязвимость была на днях закрыта), а также в ядрах из состава RHEL 6.

Уязвимость обнаружил Juri Aedla, который в приватном порядке уведомил разработчиков ядра Linux. К сожалению, изменения в Git-репозитории ядра были внесены спешно, что позволило создать эксплоиты на основе анализа изменений ещё до появления обновлений с исправлением проблемы в дистрибутивах. На момент публикации этой новости уязвимость была исправлена в дистрибутивах ALT Linux. По неофициальной информации, обновления для Red Hat и Ubuntu планировалось выпустить завтра, но в ситуации появления эксплоита в публичном доступе, процесс выпуска обновлений будет форсирован и, возможно, они выйдут уже сегодня.

Временно нейтрализовать проблему можно запретив доступ пользователей ко всем SUID/SGID программам, либо с помощью systemtap (на дистрибутивах от Red Hat и на Debian и Ubuntu). В число уязвимых попадают некоторые продукты на базе RHEL 6 и относительно недавно выпущенные дистрибутивы, поставляемые с ядрами 2.6.39, 3.0, 3.1 и 3.2 - Fedora 16, Ubuntu 11.10, OpenSUSE 12.1, Arch Linux, Gentoo и т.п. Статус выпуска обновлений для различных дистрибутивов можно проследить на данных страницах: Ubuntu, Gentoo, openSUSE, Fedora, Debian, Red Hat Enterprise Linux 6, Scientific Linux 6 и Cent OS 6.

Дополнение 1: Выявленная проблема по своему проявляется и для более старых ядер Linux до версии 2.6.39, для которых потенциально возможно проведение менее опасных атак, связанных с чтением областей памяти процессов (например, возможно чтение остающихся в памяти определённого процесса криптографических ключей, хэшей паролей и других приватных данных).

Дополнение 2: Упомянутый выше Git-коммит привносит другую, сравнительно небольшую, проблему (возможный обход ограничения расхода памяти пользователем).

Дополнение 3: Вышло обновление с устранением уязвимости для Ubuntu 11.10.

Дополнение 4: Вышел эксплоит для платформы Android.

Дополнение 5: Вышло обновление для RHEL 6.

Дополнение 6: На RHEL 6 и некоторых других системах, где опубликованные эксплойты как-бы не работают, дело в ASLR и PIE. Для успешной атаки потребуется другая SUID/SGID-программа (собранная не как PIE, но тоже выводящая что-то подходящее в stdout или stderr) или обход ASLR (много запусков) или выключенный ASLR (для проверки). Поэтому, для пользователей подобных систем также важно установить обновление для ядра Linux.

Дополнение 7: Kees Cook (Chrome OS, Ubuntu) предлагает добавить в ядро новый sysctl kernel.proc_pid_mem, который позволит отключать поддержку /proc/pid/mem полностью или ограничивать ее режимом только на чтение. На данный момент (24 января), в LKML опубликована уже третья редакция соответствующего патча, с учетом замечаний от других разработчиков.

Дополнение 8: Данная уязвимость исправлена в ядрах 3.0.18 и 3.2.2 c использованием ранее указанного коммита.

Источник: http://www.opennet.ru/opennews/art.shtml?num=32872