Уязвимост, която ви позволява да замествате escape последователности в терминалите на други хора

Беше идентифицирана уязвимост (CVE-2024-28085) в помощната програма за стена, доставена в пакета util-linux и предназначена за изпращане на съобщения до терминали, която позволява атака срещу терминалите на други потребители чрез манипулиране на последователности за изход. Проблемът е причинен от това, че помощната програма на стената блокира escape-последователности във входния поток, но не го прави в аргументите на командния ред, което позволява на атакуващ да избяга от escape-последователности на терминалите на други потребители.

Например, като изпълните 'wall $(printf "\033[33mHI")' можете да отпечатате "HI" в жълто. Чрез използване на последователности за изход, които ви позволяват да преместите показалеца, да изчистите и замените съдържание на екрана, можете да симулирате показване на подканата за парола sudo в терминала на друг потребител. Ако потребителят не забележи трика и въведе паролата си, паролата ще се появи в хронологията на въвеждането като несъществуваща команда (всъщност потребителят ще въведе паролата си в командния ред вместо команда). “\033[3A” // преместване на курсора нагоре с 3 реда “\033[K” // изтриване на предишния изход “[sudo] парола за 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 в списъка с процеси, да изчакате да завърши и извършете атака през „стената“ веднага след това. Чрез манипулиране на последователности за изход, атакуващият може да замени съобщението след действителното изпълнение на sudo с подкана за повторно въвеждане на фалшива парола. Жертвата може да си помисли, че е направил грешка при въвеждането на паролата и да я въведе втори път, разкривайки паролата в аргументите на манипулатора „command-not-found“.

Успешната атака изисква настройка на режима "mesg" на "y", който е зададен по подразбиране в Ubuntu, Debian и CentOS/RHEL. Атаката е демонстрирана в Ubuntu 22.04 в конфигурацията по подразбиране с помощта на gnome-terminal. В Debian атаката е трудна, тъй като манипулаторът „command-not-found“ не е активиран по подразбиране в дистрибуцията, а в CentOS/RHEL атаката няма да работи, тъй като помощната програма за стена е инсталирана без флага setgid и прави нямате достъп до терминалите на други хора. Когато използвате windows-терминал, атаката може да бъде модифицирана, за да промени съдържанието на клипборда.

Уязвимостта присъства в пакета util-linux от 2013 г., след като версията 2.24 добави възможността за указване на съобщение в командния ред на стената, но забрави да изчисти последователностите за изход. Корекция за уязвимостта е включена във вчерашното издание на util-linux 2.40. Трябва да се отбележи, че при опит за коригиране на уязвимостта в изданието на util-linux 2.39 беше идентифицирана друга подобна уязвимост, която позволява заместване на контролни знаци чрез манипулиране на локали.

Източник: opennet.ru

Добавяне на нов коментар