В коде утилиты wall из util-linux 10 лет была уязвимость, позволяющая выполнить атаку на терминалы других пользователей

Исследователи выяснили, что в коде утилиты wall из пакета util-linux (версий 2.24 — 2.39, патч вышел недавно в версии 2.40) более 10 лет (с октября 2023 года) была скрытая уязвимость Wall-Escape (CVE-2024-28085), позволяющая осуществить атаку на терминалы других пользователей через манипуляцию с escape-последовательностями.

Разработчики util-linux в выпуске 2.24 добавили возможность указания сообщения в командной строке wall, но забыли применить чистку escape-последовательностей. Это событие не было раскрыто до недавнего времени.

Профильные эксперты опубликовали на GitHub Proof-of-concept эксплойта по этой проблеме безопасности, которая затрагивает сборки на Ubuntu, Debian и CentOS/RHEL.

Для минимизации проблемы системным администраторам систем на Linux предлагается удалить разрешения setgid из команды wall или отключить функцию широковещательной рассылки сообщений с помощью команды mesg, установив для её флага значение n.

По данным OpenNET, проблема вызвана тем, что утилита wall блокирует использование escape-последовательности во входном потоке, но не выполняет эту операцию для аргументов в командной строке, что позволяет атакующему выполнить escape-последовательности в терминале других пользователей. Например, выполнив команду wall $(printf «33[33mHI») можно вывести надпись HI жёлтым цветом. При помощи escape-последовательностей, которые позволяют перемещать указатель, очищать и заменять содержимое на экране, можно симулировать показ приглашения о вводе пароля от утилиты sudo в терминале другого пользователя. Если пользователь не заметит подвоха и введёт свой пароль, то пароль засветится в истории ввода как несуществующая команда. По факту пользователь вместо команды введёт свой пароль в командной строке.

Во время вывода предупреждения о том, что введённая команда не найдена, во многих дистрибутивах Linux запускается обработчик /usr/lib/command-not-found, который пытается определить пакет, в котором присутствует отсутствующая команда, и выдать подсказку о возможности его установки. Проблема в том, что при запуске обработчика command-not-found несуществующая команда передаётся в него в качестве параметра командной строки, который виден при просмотре процессов в системе (например, при попытке запуска неустановленной утилиты xsnow в списке процессов будет виден /usr/lib/command-not-found — xsnow). Соответственно, атакующий может организовать мониторинг запускаемых процессов (например, анализируя появление /proc/$pid/cmdline для прогнозируемого номера PID) и определить пароль, введённый жертвой в командной строке.

Для того чтобы пользователь ввёл пароль в ответ на фиктивное приглашение, sudo предложен трюк, суть которого в отслеживании в списке процессов реального запуска утилиты sudo, ожидания её завершения и осуществления атаки через wall сразу после этого. Через манипуляции с escape-последовательностями атакующий может заменить сообщение после реального выполнения sudo на фиктивное приглашение повторного ввода пароля. Жертва может подумать, что ошиблась при вводе и ввести пароль второй раз, засветив пароль в аргументах обработчика command-not-found.

Для успешной атаки требуется установка режима mesg в значение y, которое по умолчанию выставлено в Ubuntu, Debian и CentOS/RHEL. Возможность проведения атаки продемонстрирована исследователями в Ubuntu 22.04 в конфигурации по умолчанию при использовании gnome-terminal.

В Debian атака затруднена, так как в дистрибутиве по умолчанию не включён обработчик command-not-found, а в CentOS/RHEL атака не сработает, так как утилита wall установлена без флага setgid и не имеет доступа к чужим терминалам. При использовании windows-terminal атака может быть модифицирована для изменения содержимого буфера обмена.

Источник: habr.com

0 0 голоса
Рейтинг новости
0
0
Подписаться
Уведомить о
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии