In dem Tool wall, das im Paket util-linux enthalten ist und zum Senden von Nachrichten an Terminals verwendet wird, wurde eine Sicherheitsanfälligkeit (CVE-2024-28085) entdeckt, die es Angreifern ermöglicht, über Manipulationen mit Escape-Sequenzen Angriffe auf die Terminals anderer Benutzer durchzuführen. Das Problem entsteht, da das Tool wall die Verwendung von Escape-Sequenzen im Eingabestrom blockiert, jedoch diese Operation nicht für Argumente in der Befehlszeile durchführt, was es dem Angreifer erlaubt, Escape-Sequenzen im Terminal anderer Benutzer auszuführen.
Zum Beispiel kann man mit 'wall $(printf "\033[33mHI")' die Nachricht „HI“ in gelber Farbe ausgeben. Mit Hilfe von Escape-Sequenzen, die es ermöglichen, den Cursor zu bewegen, den Bildschirm zu löschen und Inhalte zu ersetzen, kann man die Aufforderung zur Eingabe eines Passworts von der sudo-Utility im Terminal eines anderen Benutzers simulieren. Wenn der Benutzer keinen Verdacht schöpft und sein Passwort eingibt, wird das Passwort als nicht existierender Befehl in der Eingabeverlauf angezeigt (der Benutzer gibt in Wirklichkeit sein Passwort in die Befehlszeile ein, anstelle eines Befehls). "\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 fiktive sudo-Anforderung aus "\033[?25l" \/\/ stellt die Hintergrundfarbe zum Verbergen der Eingabe ein "\033[38;2;48;10;36m"
Während 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 zu bestimmen, in welchem Paket der fehlende Befehl vorhanden ist, und einen Hinweis zur Installation zu geben. Das Problem dabei ist, dass beim Aufruf des Handlers 'command-not-found' der nicht existierende Befehl ihm als Parameter der Befehlszeile übergeben wird, der beim Betrachten der Prozesse im System sichtbar ist (zum Beispiel wird beim Versuchen, das nicht installierte Tool 'xsnow' zu starten, in der Prozessliste '/usr/lib/command-not-found — xsnow' sichtbar sein). Folglich kann ein Angreifer den Start von Prozessen überwachen (zum Beispiel durch das Analysieren des Auftretens von '/proc/$pid/cmdline' für die vorhersehbare PID-Nummer) und das Passwort bestimmen, das das Opfer in die Befehlszeile eingegeben hat.
Um den Benutzer dazu zu bringen, ein Passwort als Antwort auf eine gefälschte Sudo-Eingabeaufforderung einzugeben, gibt es einen Trick, der darin besteht, den tatsächlichen Startprozess des Sudo-Dienstprogramms zu verfolgen, auf dessen Abschluss zu warten und den Angriff über "wall" unmittelbar danach durchzuführen. Durch Manipulation mit Escape-Sequenzen kann der Angreifer die Nachricht nach der tatsächlichen Ausführung von Sudo durch eine gefälschte Eingabeaufforderung zur erneuten Eingabe des Passworts ersetzen. Das Opfer könnte denken, dass es einen Fehler bei der Eingabe gemacht hat und das Passwort ein zweites Mal eingeben, wodurch das Passwort in den Argumenten des "command-not-found"-Handlers offengelegt wird.
Für einen erfolgreichen Angriff ist es erforderlich, den "mesg"-Modus auf "y" zu setzen, was standardmäßig in Ubuntu, Debian und CentOS/RHEL der Fall ist. Die Möglichkeit, den Angriff durchzuführen, wurde in Ubuntu 22.04 in der Standardkonfiguration unter Verwendung von gnome-terminal demonstriert. In Debian ist der Angriff erschwert, da der "command-not-found"-Handler standardmäßig nicht im Distribution enthalten ist, und in CentOS/RHEL funktioniert der Angriff nicht, da das Dienstprogramm wall ohne das Setgid-Flag installiert ist und keinen Zugriff auf fremde Terminals hat. Bei der Verwendung von windows-terminal kann der Angriff modifiziert werden, um den Inhalt der Zwischenablage zu ändern.
Die Sicherheitsanfälligkeit ist seit 2013 im Paket util-linux vorhanden, nachdem in der Version 2.24 die Fähigkeit hinzugefügt wurde, eine Nachricht in der Kommandozeile wall anzugeben, jedoch das Bereinigen von Escape-Sequenzen vergessen wurde. Der Fix für die Sicherheitsanfälligkeit ist in der gestrigen Version util-linux 2.40 enthalten. Interessanterweise wurde bei dem Versuch, die Sicherheitsanfälligkeit in der Version util-linux 2.39 zu beheben, eine weitere ähnliche Sicherheitsanfälligkeit entdeckt, die es ermöglicht, Steuerzeichen durch Manipulation von Lokalisationen einzufügen.
Quelle: opennet.ru
