В Linux 11 лет скрывалась уязвимость, позволяющая красть чужие пароли. Особенно уязвимы Debian и Ubuntu
В команде wall ОС Linux более десятка лет скрывалась уязвимость, позволяющая при соблюдении целого ряда условий, красть чужие пароли.
Старая, старая сказка
На протяжении 11 лет в наборе util-linux, одном из компонентов Linux, скрывалась уязвимость, которая позволяет злоумышленнику, не обладающему какими-либо системными привилегиями, красть пароли или подменять содержимое буфера обмена на компьютере жертвы.
«Баг» CVE-2024-28085 выявлен в команде wall и в связи с этим получил наименование WallEscape. Уязвимость появилась в версии ядра Linux 11 лет назад, но была устранена лишь на днях в версии util-linux 2.40. Как указывается в материале издания Bleeping Computer, эксплуатация уязвимости «вероятно ограничена несколькими сценариями».
В частности, злоумышленнику необходимо иметь доступ к серверу Linux, к которому в момент гипотетической атаки уже подключены несколько пользователей через терминал (подобное возможно в учебных заведениях).
Команда wall используется в системах под Linux для рассылки сообщений на терминалы всем пользователям, которые подключены в данный момент к одной и той же системе (серверу).
Управляющие символы
Проблема CVE-2024-28085 вызвана некорректной фильтрацией пользовательского ввода escape-символов - управляющих символов, указывающих, что следующие за ним символы должны интерпретироваться как команда для выводного или принимающего устройства. В результате непривилегированный пользователь может использовать escape-символы для создания поддельного запроса SUDO на терминалах других пользователей и тем самым заставить их ввести свои административные пароли.
Как пояснил эксперт по информационной безопасности Скайлер Ферранте (Skyler Ferrante), выявивший уязвимость, эксплуатация уязвимости возможна при условии, что в системе активна утилита mesg, а для команды wall выставлены разрешения setgid. Оба условия по умолчанию соблюдены в Ubuntu 22.04 LTS (Jammy Jellyfish) и Debian 12.5 (Bookworm).
Ферранте уже опубликовал демонстрационный эксплойт, а заодно описал сразу несколько сценариев, при которых уязвимость может сработать.
Например, поддельный SUDO-запрос в терминале Gnome сформулирован так, чтобы потенциальная жертва вводила административный пароль в качестве аргумента командной строки. Со стороны злоумышленника потребуется применить несколько фокусов, так, чтобы с помощью команды wall передать потенциальной жертве скрипт, подменяющий ввод на терминале (меняется цвет шрифта и время сна, скрывается набор). В итоге поддельный запрос пароля воспринимался как вполне легитимный запрос.
Чтобы найти пароль, злоумышленнику затем потребуется проверить файл /proc/$pid/cmdline - пароль будет виден как командный аргумент, причём во многих дистрибутивах Linux для просмотра файла не требуется каких-либо привилегий.
В некоторых эмуляторах терминала (но далеко не всех) можно также подменить содержимое буфера обмена на компьютере жертвы, используя управляющую или экранированную последовательность (escape sequence). Такие последовательности представляют собой совокупность идущих подряд значащих элементов, в группе теряющих для обрабатывающего механизма своё индивидуальное значение с одновременным приобретением этой группой нового значения.
Поскольку такую последовательность можно передать через команду wall, то, при условии, что терминал её в принципе поддерживает, злоумышленник может подменить содержимое буфера обмена жертвы произвольным текстом.
В целом, эксплуатация WallEscape возможна только при наличии физического доступа к атакуемой системе или удалённого через SSH (Secure Shell). Это значительно уровень угрозы, хотя и не устраняет полностью.
«Всё зависит от сценария эксплуатации», - говорит Михаил Зайцев, эксперт по информационной безопасности компании SEQ. По его словам, тот факт, что эту уязвимость предположительно не могли обнаружить 11 лет, может говорить о том, что рассматривать её как нечто критичное не стоит.
Пользователям рекомендовано обновить util-linux до версии 2.40. Системным администраторам стоит отозвать разрешения setgid у команды wall или вовсе отключить функцию рассылки сообщения, выставив команде mesg значение n.