Раскрыта информация об обнаруженной месяц назад ошибке, присутствующей практически во всех Linux-ядрах серии 2.6.x, которая позволяет непривилегированному пользовательскому процессу, который имеет доступ к X-серверу (т.е. любому графическому приложению), безоговорочно получить привилегии суперпользователя, при этом, стоит отметить, что проведение атаки не затрагивает никакие ошибки X-сервера.

Другими словами, любое, имеющие уязвимости, непривилегированное графическое приложение в результате атаки может обойти все механизмы защиты безопасности Linux-ядра и скомпрометировать систему целиком. Атака может быть произведена даже из изолированного окружения системы безопасности SELinux, которая не спасает от данной уязвимости. Например, злоумышленник может воспользоваться уязвимостью в PDF-просмотрщике, запущенном в chroot или под контролем SELinux, и добившись от пользователя открытия специально оформленного документа, получить доступ к машине с правами суперпользователя. Ошибка, судя по всему, существует уже несколько лет практически во всех ядрах серии 2.6.x.

Суть атаки состоит в том, что графическое приложение искусственно практически полностью потребляет адресное пространство X-сервера с помощью расширения MIT-SHM, затем создаёт разделяемый сегмент памяти "S", то есть заставляя X-сервер использовать этот сегмент. Сегмент "S", однако, будет находиться близко над исполняемым стеком. Затем атакующий инструктирует X-сервер с тем, чтобы последний стал исполнять рекурсивную функцию, что приводит к расширению стека, а указатель стека смещается в сторону сегмента "S" на непродолжительный промежуток времени. После чего, атакующий осуществляет запись в область памяти "S", что приводит к замене смещения в стеке и позволяет выполнить произвольный код.

Без обновления ядра данную проблему можно решить несколькими способами. Во-первых, можно выключить поддержку MIT-SHM в X-сервере:



Section "Extensions"

 Option "MIT-SHM" "disable"
EndSection

Во-вторых, можно создать wrapper для запуска X-сервера с указанием RLIMIT_AS, что ограничит регион памяти, доступной для X-сервера и поможет избежать атаки. Однако, этот способ не является надёжным.

Данная проблема решена в выпущенных на днях обновлениях Linux-ядра 2.6.32.19, 2.6.34.4, 2.6.35.2, а также устранена в ядре RedHat Enterprise Linux. Примечательно, что данная уязвимость была исправлена молча, без акцентирования о критичности проблемы и без отметки об отношении исправления к безопасности в списке изменений. Более подробно об уязвимости можно прочитать в данном отчете (PDF, 100 Кб).

Дополнение: Оказывается, ещё в 2004 году разработчики из SUSE предложили патч для этой проблемы, но по неизвестным причинам он не был принят в ядро и вскоре про него забыли. SUSE Linux Enterprise 9/10/11 и openSUSE 11.1-11.3 не подвержены данной проблеме.

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