![](https://habrastorage.org/web/663/82f/030/66382f030afe4c78aea41cf501498f92.jpg)
Изображение:finnsland, CC BY-SA 2.0
В механизме управления памятью операционных систем Linux, OpenBSD, NetBSD, FreeBSD и Solaris обнаружена серьезная уязвимость, позволяющая осуществлять повышение привилегий до уровня суперпользователя и выполнять произвольный код. Проблема безопасности получила название Stack Clash.
В чем проблема
Проблему обнаружили исследователи информационной безопасности из компании Qualys. Уязвимость была впервые обнаружена в 2005 году, тогда же появилось исправление. Однако в 2010 году исследователи выяснили, что выпущенные патчи не полностью блокируют возможность эксплуатации. Разработчики Linux вновь выпустили патч, однако оказалось, что защиту можно обойти.
Суть уязвимости заключается в том, что при смежном размещении стека и кучи не исключены ситуации, когда содержимое переполненной кучи может оказаться в области стека, или стек, наоборот, может переписать область кучи, если куча растет в сторону увеличения, а стек — в сторону уменьшения. Для предотвращения подобных ситуаций в Linux и других операционных системах используется защитная техника stack guard-page.
В ходе исследования эксперты выявили множественные уязвимости в реализации «сторожевой страницы» (guard-page) и выделили три возможных типа атак:
- Пересечение стека с другой областью памяти: выделение памяти производится до тех пор, пока стек не достигнет другой области памяти или память не достигнет стека;
- «Прыжок» через сторожевую страницу: в этом случае указатель стека перемещается из стека в другую область памяти не затрагивая страницу защиты памяти;
- Разбиение стека или другой области памяти: производится перезапись стека содержимым другой области памяти либо другой области памяти содержимым стека.
Исследователи подготовили набор PoC-эксплоитов для различных операционных систем. Для использования описанной проблемы безопасности необходим локальный доступ к компьютеру, однако специалисты не исключают наличия возможности удаленной эксплуатации, например, посредством HTTP-запросов или JavaScript.
Как защититься
Как сказано в отчете исследователей, они заранее оповестили разработчиков уязвимых операционных систем о найденных проблемах. В настоящий момент разрабатываются патчи, закрывающие уязвимость. Компания Red Hat уже опубликовала бюллетень безопасности — однако описанные в нем способы защиты могут негативно сказываться на производительности системы. Эту проблему разработчики обещают устранить позднее.
По словам исследователей, они проверяли наличие проблемы в операционных системах FreeBSD, NetBSD, OpenBSD, Solaris, а также популярных Linux-дистрибутивов Red Hat, SuSE, Debian и Ubuntu. Пользователям рекомендуется проверить наличие обновлений для своего дистрибутива. На данный момент неясно, подвержена ли уязвимости мобильная ОС Android.
В качестве временной меры до выхода патча для конкретной ОС ее пользователи могут изменить настройки опций RLIMIT_STACK и RLIMIT_AS для локальных учетных записей и удаленных сервисов, понизив значения по-умолчанию. Однако этот способ не позволит полностью обезопасить себя — выбор слишком низких значений не позволит работать многим доверенным приложениям, а выбор средней величины позволить осуществить ряд атак (например, Stack Clash атаку на Sudo).