Три слабых места: Найдены способы обойти авторизацию в Ubuntu Linux
Компания Qualys идентифицировала ряд слабых мест в защите Ubuntu Linux и продемонстрировала, как ими можно воспользоваться. Разработчики дистрибутива усиливают защиту
Что тебе в имени моем
Исследователи компании Qualys обнаружили три способа обойти ограничения некоторых функций безопасности в Ubuntu Linux. В конечном счете это может привести к повышению привилегий текущего локального пользователя, а при наличии других уязвимостей - и к полному захвату контроля над системой.
Для всех пользователей Linux предусматриваются изолированные безопасные среды - namespaces (пространства имен), в которых пользователь может производить определенные операции с правами администратора, даже если таких прав в системе в целом у него нет.
Функциональность пространства имен, тем не менее, зависит от общих привилегий пользователя хоста.
Эта функция появилась в версии 23.10, а с версии 24.04 стала активной по умолчанию. Сверх этого разработчики Ubuntu добавили ограничения на основе AppArmor, и с версии 24.04 они также активны по умолчанию.
К сожалению, обнаружились лазейки, которые позволяют непривилегированным пользователям создавать пространства имен, обладающими полным административным функционалом.
При использовании в комбинации с уязвимостями ядра операционной системы это позволяет получить полный контроль над машиной.
Есть три пути
Qualys выделяет три метода.
Первый подразумевает использование инструмента aa-exec, который позволяет запускать программы под определенными профилями AppArmor. Некоторые из этих профилей - trinity, chrome или flatpak настроены так, чтобы создавать пользователей с полным набором доступных действий. Воспользовавшись командой unshare в контексте такого профиля возникает возможность обойти все ограничения пространства имен и повысить привилегии текущего пользователя до максимального уровня.
Второй метод предполагает использование шелла busybox, который по умолчанию ставится на Ubuntu Server и Ubundu Desktop. Он также связан с профилем AppArmor со сниженными ограничениями, так что busybox можно использовать для запуска той же команды unshare и снабдить пользовательский профиль административными полномочиями.
Третий метод опирается на функции динамического загрузчика библиотек Ubuntu, а конкретнее - способности переменной сред LD_PRELOAD внедрять произвольную библиотеку с общим доступом в доверенный процесс. В качестве такого процесса можно использовать, например, Nautilus, программу, чей профиль AppArmor содержит ослабленные ограничения, и через нее запустить привилегированное пространство имен.
Эксперты Qualys проинформировали разработчиков Ubuntu - компанию Canonical - о выявленной проблеме еще в середине января. Стороны договорились не разглашать подробности, пока не выйдут нужные обновления.
Однако один из способов обхода - через busybox - самостоятельно обнаружил еще один исследователь, и самостоятельно опубликовал все подробности 21 марта.
В Canonical заявляют, что рассматривают выявленные проблемы не как программные уязвимости, а как «ограничения защитного механизма», поэтому обновления AppArmor, необходимые для снятия рисков, были выпущены в штатном порядке, т.е. далеко не сразу.
«Степень угрозы от любой уязвимости - или «ограниченности защиты» - прямо зависит от того, насколько легко или сложно ее будет эксплуатировать на практике», - указывает Анастасия Мельникова, директор по информационной безопасности компании SEQ. «В данном случае речь идет только о возможности локальных атак, требующих некоторой технической подготовленности и знания системы. Угроза не нулевая, так что все необходимые меры стоит принять незамедлительно».
В бюллетене Canonical, помимо установки обновлений, рекомендовано предпринять еще несколько шагов.
В частности, отключить расширенные профили AppArmor для busybox и Nautilus, чтобы предотвратить создание пространства имен, и/или назначить более рестриктивный профиль bwrap для приложений вроде Nautilus; активировать режим ограничений для любых непривилегированных и неизолированных процессов - kernel.apparmor_restrict_unprivileged_unconfined (по умолчанию он отключен), а также идентифицировать и отключить представляющие риск профили с помощью aa-status.