Luka umożliwiająca wstawianie sekwencji ucieczki do terminali innych osób

W narzędziu ściennym, 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 ucieczki. Problem jest spowodowany tym, że narzędzie ścienne blokuje sekwencje ucieczki w strumieniu wejściowym, ale nie robi tego w przypadku argumentów wiersza poleceń, umożliwiając atakującemu uniknięcie sekwencji ucieczki na terminalach innych użytkowników.

Na przykład wykonując polecenie 'wall $(printf "\033[33mHI")' możesz wydrukować "HI" w kolorze żółtym. Używając sekwencji ucieczki, które pozwalają przesuwać wskaźnik, czyścić i zamieniać zawartość na ekranie, możesz symulować wyświetlanie monitu o hasło sudo na terminalu innego użytkownika. Jeśli użytkownik nie zauważy sztuczki i wprowadzi swoje hasło, hasło pojawi się w historii wprowadzania jako nieistniejące polecenie (w rzeczywistości użytkownik wprowadzi swoje hasło w wierszu poleceń zamiast polecenia). „\033[3A” // przesuń kursor o 3 linie w górę „\033[K” // usuń poprzednie wyjście „[sudo] hasło dla_użytkownika:” // wyświetl fałszywe żądanie sudo „\033[?25l” / / ustaw kolor tła, aby ukryć wejście „\033[38;2;48;10;36m”

Gdy zostanie wyświetlone ostrzeżenie, że wprowadzone polecenie nie zostało znalezione, wiele dystrybucji uruchamia procedurę obsługi /usr/lib/command-not-found, która próbuje zidentyfikować pakiet zawierający brakujące polecenie i podać wskazówkę, czy można je zainstalować . Problem polega na tym, że po uruchomieniu procedury obsługi nieodnalezionej komendy przekazywane jest do niej nieistniejące polecenie jako parametr wiersza poleceń, który jest widoczny podczas przeglądania procesów w systemie (na przykład podczas próby uruchomienia odinstalowanego narzędzia „xsnow”, „/usr” będzie widoczne na liście procesów /lib/command-not-found - xsnow”). W związku z tym osoba atakująca może monitorować uruchomione procesy (na przykład analizując występowanie „/proc/$pid/cmdline” dla przewidywanego numeru PID) i ustalić hasło wprowadzone przez ofiarę w wierszu poleceń.

Aby użytkownik mógł wpisać hasło w odpowiedzi na fikcyjny monit sudo, zaproponowano trik, którego istotą jest śledzenie faktycznego uruchomienia narzędzia sudo na liście procesów, oczekiwanie na jego zakończenie i natychmiast po tym przeprowadź atak przez „ścianę”. Manipulując sekwencjami ucieczki, osoba atakująca może zastąpić wiadomość po faktycznym wykonaniu sudo monitem o ponowne wprowadzenie fałszywego hasła. Ofiara może pomyśleć, że popełniła błąd podczas wpisywania hasła i wprowadzić hasło po raz drugi, ujawniając hasło w argumentach procedury obsługi „nie znaleziono polecenia”.

Udany atak wymaga ustawienia trybu „mesg” na „y”, który jest ustawiony domyślnie w Ubuntu, Debianie i CentOS/RHEL. Atak został zademonstrowany w Ubuntu 22.04 w domyślnej konfiguracji przy użyciu terminala gnome. W Debianie atak jest trudny, ponieważ procedura obsługi „nie znaleziono polecenia” nie jest domyślnie włączona w dystrybucji, a w CentOS/RHEL atak nie zadziała, ponieważ narzędzie ścienne jest zainstalowane bez flagi setgid i nie ma dostępu do terminali innych osób. Podczas korzystania z terminala Windows atak można zmodyfikować w celu zmiany zawartości schowka.

Luka występuje w pakiecie util-linux od 2013 roku, po wydaniu wersji 2.24, która dodała możliwość określenia komunikatu w wierszu poleceń ściany, ale zapomniała wyczyścić sekwencje ucieczki. Poprawka usuwająca tę lukę została dołączona do wczorajszego wydania util-linux 2.40. Warto zauważyć, że podczas próby naprawienia luki w wydaniu util-linux 2.39 zidentyfikowano inną podobną lukę, która umożliwia podstawienie znaków kontrolnych poprzez manipulację ustawieniami regionalnymi.

Źródło: opennet.ru

Dodaj komentarz