В утилитата 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" веднага след това. Чрез манипулации с 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-последователностите. Поправянето на уязвимостта е включено в вчерашнияrelease util-linux 2.40. Забележително е, че при опит за поправяне на уязвимостта в версия util-linux 2.39 е била открита друга подобна уязвимост, позволяваща подмяна на управляващи символи чрез манипулация с локалите.
Източник: opennet.ru
