The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Уязвимость, позволяющая подставить escape-последовательности в чужие терминалы

28.03.2024 14:58

В утилите wall, поставляемой в пакете util-linux и предназначенной для отправки сообщений в терминалы, выявлена уязвимость (CVE-2024-28085), позволяющая осуществить атаку на терминалы других пользователей через манипуляцию с escape-последовательностями. Проблема вызвана тем, что утилита wall блокирует использование escape-последовательности во входном потоке, но не выполняет эту операцию для аргументов в командной строке, что позволяет атакующему выполнить escape-последовательности в терминале других пользователей.

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


            "\033[3A" // перемещаем курсор вверх на 3 строк
            "\033[K"  // удаляем предыдущий вывод
            "[sudo] password for a_user:" // выводим фиктивный запрос sudo
            "\033[?25l" // выставляем фоновый цвет для скрытия ввода
            "\033[38;2;48;10;36m" 

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

Для того чтобы пользователь ввёл пароль в ответ на фиктивное приглашение sudo предложен трюк, суть которого в отслеживании в списке процессов реального запуска утилиты sudo, ожидания её завершения и осуществления атаки через "wall" сразу после этого. Через манипуляции c 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 атака может быть модифицирована для изменения содержимого буфера обмена.

Уязвимость проявляется в пакете util-linux с 2013 года, после того как в выпуск 2.24 добавили возможность указания сообщения в командной строке wall, но забыли применить чистку escape-последовательностей. Исправление уязвимости включено во вчерашний выпуск util-linux 2.40. Примечательно, что при попытке исправления уязвимости в выпуске util-linux 2.39 была выявлена ещё одна похожая уязвимость, позволяющая совершить подстановку управляющих символов через манипуляцию с локалями.

  1. Главная ссылка к новости (https://www.openwall.com/lists...)
  2. OpenNews: Уязвимость в xterm, приводящая к выполнению кода при обработке определённых строк
  3. OpenNews: Сценарий атаки на обработчик не установленных приложений в Ubuntu
  4. OpenNews: Уязвимость в tmux, эксплуатируемая через escape-последовательность
  5. OpenNews: Уязвимость в Vim, приводящая к выполнению кода при открытии вредоносного файла
  6. OpenNews: Концепция атаки по подмене копируемого в терминал текста с сайта
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/60869-wall
Ключевые слова: wall, escape, util-linux
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (37) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.2, Аноним (2), 15:19, 28/03/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • –10 +/
    И эти в юникод не умеют, сколько можно то. Срочно добавить icu в зависимости.
     
     
  • 2.8, Аноним (8), 15:51, 28/03/2024 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Речь про Esc-последовательности, а не кодировки.
     
     
  • 3.11, Аноним (2), 15:55, 28/03/2024 [^] [^^] [^^^] [ответить]  
  • –5 +/
    Речь про локали, локали это кодировки. И проблема именно в широких символах, читай внимательнее.
     
     
  • 4.21, Kenneth (?), 18:12, 28/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    What the hell are you talking about?
     
     
  • 5.22, Аноним (2), 18:14, 28/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Ну, ты вот читал, о чём новость написана? Очевидно, что нет.
     
  • 4.30, Аноним (-), 21:45, 28/03/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Речь про локали, локали это кодировки. И проблема именно в широких символах, читай внимательнее.

    Ога. У собак есть шерсть. В шерсти водятся блохи. Блохи это... :))). (C) анек про студня знавшего только 1 билет - про блох.

     

  • 1.3, Аноним (3), 15:27, 28/03/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +6 +/
    > во многих дистрибутивах запускается обработчик /usr/lib/command-not-found

    написали бы прямым текстом - в убунте

     
     
  • 2.39, Аноним (-), 06:11, 29/03/2024 Скрыто ботом-модератором     [к модератору]
  • +/
     
  • 2.42, Аноним (42), 09:01, 29/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > command-not-found

    и еще несколько "мусорных" программ подлежит удалению сразу после инсталляции системы.

     

  • 1.4, Аноним (-), 15:29, 28/03/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Почему в Ubuntu утилита wall установлена с флагом setgid и имеет доступ к чужим терминалам? И почему в Ubuntu нет SELinux? 🤔
     
     
  • 2.5, Аноним (2), 15:38, 28/03/2024 Скрыто ботом-модератором     [к модератору]
  • +/
     
  • 2.7, Аноним (8), 15:49, 28/03/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Потому, что в Ubuntu - AppArmor.
     
     
  • 3.40, Аноним (-), 08:37, 29/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Который защищает только /usr/lib/colord, avahi-daemon, i2pd и nscd.
    https://www.opennet.ru/opennews/art.shtml?num=60860
     
  • 2.23, Аноним (23), 18:31, 28/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Придумай wall без доступа к чужим терминалам, раз такой умный.
     
     
  • 3.27, Аноним (-), 20:44, 28/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Резонно. А как это сделали в Fedora/RHEL?
     

  • 1.12, Аноним (-), 16:12, 28/03/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Это же просто wall-смайлик из древнего квипа)

    А вообще ошибка логическая - вызвали не ту функцию, такое с каждым может случиться.
    Жаль конечно, что тысячи-глаз ее не заметили с 2013 года. Ну, или решили умолчать)

     
  • 1.15, Аноним (15), 16:49, 28/03/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А какого хрена чужие процессы вообще видны? По-хорошему у каждого пользователя и у каждого процесса должны быть списки, кому они видны. А привелегированным пользователям с соотв. capability должно быть всё видно.
     
     
  • 2.20, Хру (?), 17:44, 28/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    В ведроиде начиная с 8 версии /proc закрыт на чтение правилами selinux. Но правильнее использовать для каждого юзера свой pid namespace. И не надо ныть про namespaces - systemd их и так во все поля пользует)
     

  • 1.17, NV (??), 17:02, 28/03/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Не по этому ли 20.04 ? А , так пришлось метофицировать drm видео драйвера на канале у griggorii
     
  • 1.18, Аноним (-), 17:37, 28/03/2024 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • +/
     
  • 1.24, Аноним (23), 18:37, 28/03/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Хорошую мину с обработкой эскейп-последовательностей диды подложили. OpenBSD только в прошлом году перестала от неправильного вывода в терминал целиком падать. А эмуляторы терминалов до сих пор не все пофикшены. Так что аккуратнее, пацаны, с cat /var/log/blah-blah, иной раз может и калькулятор запуститься, если вы понимаете о чём я.
     
     
  • 2.25, Аноним (25), 20:01, 28/03/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Регулярно пользую FreeBSD watch. Хорошо работает, проблем не замечено.
     
  • 2.28, Аноним (28), 21:23, 28/03/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Не ошибается только тот, кто ни чего не делает.
    Вся современная ИТ инфраструктура сделана дидами, не без ошибок, естественно.
    А после тебя что останется? Куча невнятных комментариев на опеннете.
     
     
  • 3.46, Аноним (46), 13:59, 29/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Вся современная ИТ инфраструктура сделана дидами

    …на коленке. За что до сих пор расплачиваемся.

     
     
  • 4.48, Аноним (28), 12:28, 30/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    >на коленке

    Ты прав. Начинали с нуля. VS Code со встроенным Copilot еще не было.

     

  • 1.26, Аноним (26), 20:20, 28/03/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Ставлю из util-linux только нужное уже миллион лет. Wall вообще не нужен.
     
  • 1.33, Аноним (33), 22:49, 28/03/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > В утилите wall, поставляемой в пакете util-linux и предназначенной для отправки сообщений

    Это все происки Извечного Врага!
    https://github.com/util-linux/util-linux/blob/master/term-utils/wall.c
    > * Copyright (c) 1988, 1990, 1993
    > * The Regents of the University of California.  All rights reserved.

     
  • 1.34, Аноним (34), 00:12, 29/03/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Нафига вообще посылать какие-то сообщения в чужие терминалы, вы в 20 веке живёте?
     
     
  • 2.35, Аноним (35), 00:57, 29/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Нафига вообще посылать какие-то сообщения в чужие терминалы, вы в 20 веке
    > живёте?

    поттеринг сделал вам божественный dbus с xml-ем, пользуйтесь, луддиты, вертикальными нанотехнологиями! так нет же, терминал, пердолинг, лошади, кареты, вот это вот всё. Я даже не понимаю про какой терминал речь, куда деньги суют, или в аэропорту.

     
  • 2.37, Аноним (-), 06:09, 29/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    >Нафига вообще посылать какие-то сообщения в чужие терминалы, вы в 20 веке живёте?

    Терминал это бесмертная и божественная технология.

     
     
  • 3.43, Sw00p aka Jerom (?), 09:13, 29/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    век персональных компьютеров, а ОС почему-то многопользовательская :)

    эт типа пользователь номер адин это я, а пользователь номер Н - товарищь майор?

     
     
  • 4.45, Аноним (33), 11:29, 29/03/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > эт типа пользователь номер адин это я, а пользователь номер Н - товарищь майор?

    В современных девайсах номер один это товарищ/герр/сэр/達瓦里希 майор, потом идет кто-то от гугла, эппла и прочих, за ними - условный Ляо. А ты так, на птичьих правах ;)

     

  • 1.41, Ivan_83 (ok), 08:59, 29/03/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >  обработчика "command-not-found"

    Осталось только автозапуск через autorun.inf сделать, чтобы совсем удобно было.

     
     
  • 2.44, Sw00p aka Jerom (?), 09:16, 29/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    копилот прикручивай скорее, как так в век ИИ может что-нибудь быть не найденным :)
     

  • 1.47, user90 (?), 19:10, 29/03/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Так это в убунте, но нам-то зачем? ;)
     
  • 1.49, scriptkiddis (?), 20:37, 30/03/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    забыли применить чистку escape-последовательностей


    Аха... забыли.

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру