W narzędziu wall, dostarczanym w pakiecie util-linux i przeznaczonym do wysyłania wiadomości do terminali, zidentyfikowano lukę (CVE-2024-28085), która umożliwia atak na terminale innych użytkowników poprzez manipulację sekwencjami escape. Problem polega na tym, że narzędzie wall blokuje wykorzystanie sekwencji escape w strumieniu wejściowym, ale nie wykonuje tej operacji dla argumentów w wierszu poleceń, co pozwala atakującemu wykonać sekwencje escape w terminalu innych użytkowników.
Na przykład, wykonując ‘wall $(printf «\033[33mHI»)’ można wyświetlić napis «HI» na żółto. Przy pomocy sekwencji escape, które pozwalają na przesuwanie wskaźnika, czyszczenie i zastępowanie zawartości na ekranie, można symulować wyświetlanie prośby o wprowadzenie hasła z narzędzia sudo w terminalu innego użytkownika. Jeśli użytkownik nie zauważy oszustwa i wprowadzi swoje hasło, hasło to zostanie odnotowane w historii poleceń jako nieistniejące polecenie (de facto użytkownik zamiast polecenia wprowadzi swoje hasło w linii poleceń). «\033[3A» // przesuwamy kursor do góry o 3 linie «\033[K» // usuwamy poprzedni wydruk «[sudo] password for a_user:» // wyświetlamy fałszywe zapytanie sudo «\033[?25l» // ustawiamy kolor tła w celu ukrycia wprowadzenia «\033[38;2;48;10;36m»
Podczas wyświetlania ostrzeżenia, że wprowadzone polecenie nie zostało znalezione, w wielu dystrybucjach uruchamiany jest program obsługujący /usr/lib/command-not-found, który próbuje określić pakiet, w którym znajduje się brakujące polecenie, i wydaje sugestię jego zainstalowania. Problem w tym, że podczas uruchamiania programu command-not-found nieistniejące polecenie jest przekazywane jako parametr wiersza poleceń, który jest widoczny podczas przeglądania procesów w systemie (na przykład przy próbie uruchomienia niezainstalowanego narzędzia «xsnow» w liście procesów będzie widoczne «/usr/lib/command-not-found -- xsnow»). W związku z tym atakujący może zorganizować monitoring uruchamianych procesów (na przykład analizując pojawianie się «/proc/$pid/cmdline» dla prognozowanego numeru PID) i określić hasło wprowadzone przez ofiarę w wierszu poleceń.
Aby użytkownik wprowadził hasło w odpowiedzi na fałszywe zaproszenie sudo, zaproponowano trik, polegający na śledzeniu na liście procesów rzeczywistego uruchomienia narzędzia sudo, oczekiwaniu na jego zakończenie oraz przeprowadzaniu ataku przez „wall” tuż po tym. Poprzez manipulacje z sekwencjami escape atakujący może zastąpić komunikat po rzeczywistym wykonaniu sudo fałszywym zaproszeniem do ponownego wprowadzenia hasła. Ofiara może pomyśleć, że popełniła błąd podczas wpisywania i wprowadzić hasło drugi raz, wyjawiając je w argumentach obsługi „command-not-found”.
Do skutecznego przeprowadzenia ataku konieczne jest ustawienie trybu „mesg” na wartość „y”, co domyślnie jest ustawione w Ubuntu, Debianie oraz CentOS/RHEL. Możliwość przeprowadzenia ataku została zademonstrowana w Ubuntu 22.04 w konfiguracji domyślnej przy użyciu gnome-terminal. W Debianie atak jest utrudniony, ponieważ w domyślnym wydaniu nie jest włączony procesor „command-not-found”, a w CentOS/RHEL atak nie zadziała, ponieważ narzędzie wall jest zainstalowane bez flagi setgid i nie ma dostępu do obcych terminali. Przy użyciu windows-terminal atak można zmodyfikować w celu zmiany zawartości schowka.
Wrażliwość występuje w pakiecie util-linux od 2013 roku, po tym jak w wydaniu 2.24 dodano możliwość podania komunikatu w linii poleceń wall, ale zapomniano zastosować czyszczenie sekwencji escape. Poprawka wrażliwości została uwzględniona w wczorajszym wydaniu util-linux 2.40. Ciekawe jest to, że podczas próby naprawy wrażliwości w wydaniu util-linux 2.39 ujawniono jeszcze jedną podobną wrażliwość, pozwalającą na podstawienie znaków sterujących poprzez manipulację lokalizacjami.
Źródło: opennet.ru
