Eine SicherheitsanfĂ€lligkeit, die das EinfĂŒgen von Escape-Sequenzen in fremde Terminals ermöglicht

In dem Werkzeug wall, das im Paket util-linux geliefert wird und zum Versenden von Nachrichten an Terminals dient, wurde eine SicherheitsanfĂ€lligkeit (CVE-2024-28085) entdeckt, die es ermöglicht, Angriffe auf die Terminals anderer Benutzer ĂŒber die Manipulation von Escape-Sequenzen durchzufĂŒhren. Das Problem entsteht, weil das Werkzeug wall die Verwendung von Escape-Sequenzen im Eingabestrom blockiert, diese jedoch nicht fĂŒr die Argumente in der Befehlszeile anwendet, was es einem Angreifer ermöglicht, Escape-Sequenzen im Terminal anderer Benutzer auszufĂŒhren.

Zum Beispiel kann durch die AusfĂŒhrung von 'wall $(printf "\033[33mHI")' die Nachricht 'HI' in gelber Farbe angezeigt werden. Mit Hilfe von Escape-Sequenzen, die es ermöglichen, den Cursor zu bewegen, den Bildschirm zu löschen und den Inhalt zu ersetzen, kann eine Eingabeaufforderung zur Eingabe des Passworts von sudo im Terminal eines anderen Benutzers simuliert werden. Wenn der Benutzer den Trick nicht bemerkt und sein Passwort eingibt, wird es als nicht existierender Befehl in der Eingabeverlauf sichtbar (tatsĂ€chlich gibt der Benutzer anstelle eines Befehls sein Passwort in die Befehlszeile ein). "\033[3A" // bewegt den Cursor um 3 Zeilen nach oben "\033[K" // löscht die vorherige Ausgabe "[sudo] Passwort fĂŒr a_user:" // gibt eine gefĂ€lschte sudo-Abfrage aus "\033[?25l" // stellt die Hintergrundfarbe zur Verbergung der Eingabe ein "\033[38;2;48;10;36m"

Bei der Ausgabe einer Warnung, dass der eingegebene Befehl nicht gefunden wurde, wird in vielen Distributionen der Handler /usr/lib/command-not-found gestartet, der versucht, das Paket zu ermitteln, in dem der fehlende Befehl enthalten ist, und einen Hinweis zur Installation ausgibt. Das Problem ist, dass beim Starten des Handlers command-not-found der nicht existierende Befehl als Befehlszeilenparameter ĂŒbergeben wird, der bei der Betrachtung der Prozesse im System sichtbar ist (zum Beispiel wird beim Versuch, das nicht installierte Werkzeug 'xsnow' zu starten, in der Prozessliste 'usr/lib/command-not-found — xsnow' sichtbar). Dementsprechend kann ein Angreifer die gestarteten Prozesse ĂŒberwachen (zum Beispiel durch Analyse des Auftretens von '/proc/$pid/cmdline' fĂŒr eine vorhersehbare PID-Nummer) und das Passwort bestimmen, das das Opfer in die Befehlszeile eingegeben hat.

Um sicherzustellen, dass der Benutzer das Passwort als Antwort auf die gefĂ€lschte sudo-Aufforderung eingibt, wird ein Trick vorgeschlagen, der darin besteht, die tatsĂ€chliche AusfĂŒhrung des sudo-Dienstprogramms in der Prozessliste zu ĂŒberwachen, auf dessen Beendigung zu warten und den Angriff ĂŒber "wall" sofort danach durchzufĂŒhren. Durch Manipulationen mit Escape-Sequenzen kann der Angreifer die Nachricht nach der tatsĂ€chlichen AusfĂŒhrung von sudo durch eine gefĂ€lschte Aufforderung zur erneuten Eingabe des Passworts ersetzen. Das Opfer könnte denken, es habe einen Fehler bei der Eingabe gemacht und das Passwort ein zweites Mal eingeben, wodurch das Passwort in den Argumenten des "command-not-found"-Handlers sichtbar wird.

FĂŒr einen erfolgreichen Angriff muss der "mesg"-Modus auf "y" eingestellt werden, was standardmĂ€ĂŸig in Ubuntu, Debian und CentOS/RHEL eingestellt ist. Die Möglichkeit, den Angriff durchzufĂŒhren, wurde in der Standardkonfiguration von Ubuntu 22.04 unter Verwendung von gnome-terminal demonstriert. In Debian ist der Angriff erschwert, da im Standard-Distribution kein "command-not-found"-Handler aktiviert ist, und in CentOS/RHEL funktioniert der Angriff nicht, da das wall-Dienstprogramm ohne das setgid-Flag installiert wurde und keinen Zugriff auf andere Terminals hat. Bei der Verwendung des windows-terminal kann der Angriff modifiziert werden, um den Inhalt der Zwischenablage zu Ă€ndern.

Die Schwachstelle besteht seit 2013 im Paket util-linux, nachdem in Version 2.24 die Möglichkeit hinzugefĂŒgt wurde, eine Nachricht in der Befehlszeile von wall anzugeben, aber die Bereinigung der Escape-Sequenzen vergessen wurde. Die Behebung der Schwachstelle wurde in der gestrigen Veröffentlichung von util-linux 2.40 aufgenommen. Bemerkenswert ist, dass bei dem Versuch, die Schwachstelle in der Version util-linux 2.39 zu beheben, eine weitere Ă€hnliche Schwachstelle gefunden wurde, die es ermöglicht, Steuerzeichen durch Manipulation der Locale einzuschleusen.

Quelle: opennet.ru

60GB SSD 8Gb DDR4