Специалисты компании Qualys рассказали о проблеме, которая получила название Stack Clash и позволяет атакующему получить root-привилегии в *NIX-системах (Linux, OpenBSD, NetBSD, FreeBSD, Solaris и так далее), перехватив контроль над уязвимыми машинами.
Исследователи пишут, что обнаружили проблему в прошлом месяце и все это время тесно сотрудничали с разработчиками разных дистрибутивов, чтобы убедиться, что к моменту обнародования информации о Stack Clash, патчи будут уже готовы и доступны. При этом специалисты Qualys отмечают, что тестировали проблему только на платформах i386 и amd64, и не исключают, что могут быть уязвимы другие вендоры и платформы, о которых пока неизвестно.
В сердце проблемы Stack Clash лежит уязвимость, обнаруженная в далеком 2005 году. Данная проблема была исправлена, однако в 2010 году исследователи заметили, что выпущенные патчи не совсем эффективны, по сути, «открыв» уязвимость заново.
Дело в том, что специалисты из года в год находят способы спровоцировать пересечение стека и хипа. В свежем сообщении от специалистов Qualys подобные атаки разделены на три типа:
- Clashing — пересечение стека с другой областью памяти: выделение памяти производится до тех пор, пока стек не достигает другой области памяти, или пока другая область памяти не достигает стека;
- Jumping — перескакивание через защиту stack guard-page: указатель стека перемещается в другую область памяти в обход stack guard-page;
- Smashing — разбиение стека или другой области памяти: стек перезаписывает содержимое другой области памяти или наоборот.
По сути, Stack Clash является классическим случаем эскалации привилегий, причем локальным, что немного снижает степень опасности проблемы. Тем не менее, аналитики Qualys подготовили не только детальный отчет об уязвимости, но и целый набор proof-of-concept эксплоитов для различных операционных систем. Для использования эксплоитов атакующему понадобится локальный доступ, однако исследователи не исключают того, что проблему Stack Clash можно использовать и удаленно, к примеру, посредством HTTP-запросов, JavaScript и так далее.
Пользователям настоятельно рекомендуется проверить наличие обновлений для своего дистрибутива. Также можно воспользоваться функцией -fstack-check в GCC, которая добавит дополнительную защиту помимо stack guard-page, и изменить настройки RLIMIT_STACK и RLIMIT_AS.