In dem Dienstprogramm , das verwendet wird, um die Ausführung von Befehlen im Namen anderer Benutzer zu organisieren, Schwachstelle (), die es ermöglicht, die eigenen Privilegien im System auf root-Nutzer zu erhöhen. Das Problem tritt ab der Version sudo 1.7.1 auf, nur wenn die Option „pwfeedback“ in der Datei /etc/sudoers verwendet wird, die standardmäßig deaktiviert, aber in einigen Distributionen wie Linux Mint und Elementary OS aktiviert ist. Das Problem wurde in der Version , die vor wenigen Stunden veröffentlicht wurde, behoben. In den Distributionen bleibt die Schwachstelle bisher ungepatcht.
Die Option „pwfeedback“ aktiviert die Anzeige des Symbols „*“ nach jedem eingegebenen Zeichen beim Eingeben des Passworts. Aufgrund von der Implementierung der Funktion getln(), die in der Datei tgetpass.c definiert ist, kann eine über den Standard-Eingabestrom (stdin) übergebene zu lange Passwortzeile unter bestimmten Bedingungen nicht in den zugewiesenen Puffer passen und andere Daten im Stack überschreiben. Das Überlaufproblem tritt während der Ausführung von sudo mit root-Rechten auf.
Der Kern des Problems liegt darin, dass beim Einsatz des Sonderzeichens ^U (Zeile löschen) während des Eingebens und einem Fehler bei der Schreiboperation der Code, der für das Löschen der ausgegebenen Symbole „*“ zuständig ist, die Daten über die verfügbare Puffergröße zurücksetzt, jedoch den Zeiger auf die aktuelle Position im Puffer nicht auf den ursprünglichen Wert zurücksetzt. Ein weiterer Faktor, der die Ausnutzung begünstigt, ist das Fehlen einer automatischen Deaktivierung des „pwfeedback“-Modus beim Empfang von Daten nicht über das Terminal, sondern über den Eingabestrom (diese Unzulänglichkeit schafft Bedingungen für einen Schreibfehler, beispielsweise auf Systemen mit unidirektionalen der Fehler tritt auf, wenn versucht wird, über das Ende des Lese-Kanals zu schreiben).
Da der Angreifer die Datenüberschreibung im Stack vollständig kontrollieren kann, ist es nicht schwierig, einen Exploit zu erstellen, der es ermöglicht, die eigenen Privilegien auf root-Nutzer zu erhöhen. Das Problem kann von jedem Benutzer ausgenutzt werden, unabhängig von den Rechten zur Nutzung von sudo und spezifischen Benutzereinstellungen in sudoers. Um das Problem zu blockieren, sollte sichergestellt werden, dass in /etc/sudoers keine Einstellung „pwfeedback“ vorhanden ist und gegebenenfalls deaktiviert wird („Defaults !pwfeedback“). Um das Vorhandensein des Problems zu überprüfen, kann folgender Code ausgeführt werden:
$ perl -e 'print(('A' x 100 . '\x{00}') x 50)' | sudo -S id
Passwort: Segmentierungsfehler
Quelle: opennet.ru
