Das Unternehmen Qualys hat drei Sicherheitsanfälligkeiten im Dienstprogramm needrestart entdeckt, das für das Neustarten von Hintergrundprozessen nach der Aktualisierung von Bibliotheken, die von den Prozessen verwendet werden, zuständig ist. Ab Ubuntu 21.04 ist das Dienstprogramm needrestart Teil der Basisumgebung von Ubuntu Server, wo es mit Root-Rechten am Ende jeder Transaktion des APT-Paketmanagers ausgeführt wird. Es scannt laufende Prozesse und startet diejenigen neu, die mit Dateien verbunden sind, die nach der Paketaktualisierung geändert wurden. Die identifizierten Sicherheitsanfälligkeiten ermöglichen es einem lokalen nicht privilegierten Benutzer, Root-Rechte in Ubuntu Server mit der Standardkonfiguration zu erhalten.
Die Sicherheitsanfälligkeiten sind in needrestart seit Version 0.8 (2014) vorhanden und wurden in der Version needrestart 3.8 behoben. Die Probleme wurden ebenfalls in den Distributionen Debian und Ubuntu bereits behoben. Als Umgehung zur Blockierung der Ausnutzung der Sicherheitsanfälligkeiten kann das Scannen von Interpretern deaktiviert werden, indem die Konfigurationsdatei /etc/needrestart/needrestart.conf mit dem Parameter "$nrconf{interpscan} = 0" angepasst wird.
Die Sicherheitsanfälligkeiten sind im Code des Modus zur Bestimmung von Aktualisierungen für Skripte vorhanden, die unter Verwendung von Interpretern ausgeführt werden. Identifizierte Probleme:
- CVE-2024-48990 — Ein lokaler Benutzer kann die Ausführung von Code mit Root-Rechten erreichen, indem er Bedingungen schafft, um den Python-Interpreter mit einer vom Angreifer festgelegten Umgebungsvariable PYTHONPATH zu starten. Neben der Verwendung von Python kann der Angriff auch (CVE-2024-48992) durch den Start des Ruby-Interpreters mit der Umgebungsvariable RUBYLIB durchgeführt werden.
Die Schwachstellen entstehen dadurch, dass das Dienstprogramm needrestart beim Neustart eines geänderten Skripts die Umgebungsvariable PYTHONPATH basierend auf dem Inhalt der Datei /proc/pid/environ festlegt, die dann auch für die Ausführung von eigenem Python-Code verwendet wird. Daher kann ein Angreifer auf eine Aktivität warten, die mit dem Paketmanager APT verbunden ist, eine Änderung seines Skripts simulieren und eine Umgebungsvariable PYTHONPATH setzen, die ebenfalls beim Start des in needrestart integrierten Python-Codes („import sys\n print(sys.path)“) mit Root-Rechten angewendet wird.
Zum Beispiel kann zur Ausnutzung der Schwachstelle ein ständig im Speicher laufender Python-Prozess gestartet werden, indem die Umgebungsvariable "PYTHONPATH=/home/test" gesetzt wird. Eine gemeinsam genutzte Bibliothek "/home/test/importlib/__init__.so" kann abgelegt werden, die ausgeführt wird, wenn privilegierter Python-Code in needrestart ausgeführt wird.
- CVE-2024-48991 — Ein lokaler Benutzer kann die Ausführung von Code mit Root-Rechten erreichen, indem er einen Race Condition auslöst, wodurch needrestart einen gefälschten Python-Interpreter, der vom Angreifer bereitgestellt wird, anstelle des systemeigenen Python-Interpreters startet. Das Konzept der Schwachstelle ähnelt dem oben genannten Problem, der Unterschied besteht darin, dass needrestart den Namen des Python-Prozesses (z.B. /usr/bin/python3) durch das Lesen von "/proc/pid/exe" bestimmt.
Zur Ausnutzung der Schwachstelle kann ein Prozess /home/test/race erstellt werden, der mithilfe des inotify-Mechanismus darauf wartet, dass needrestart beginnt, den Inhalt von /proc/pid/exe zu lesen, und sofort über die Funktion execve den systemeigenen Python-Interpreter startet. Da needrestart nicht überprüft, ob es sich tatsächlich um Python handelt, wird es annehmen, dass /home/test/race der Python-Interpreter ist und ihn für seinen Code ausführen.
- CVE-2024-11003 — Ein lokaler Benutzer kann durch das Erzeugen von Bedingungen für die Verarbeitung von Dateinamen im Format „Befehl|“ in needrestart die Ausführung willkürlicher Shell-Befehle mit Root-Rechten erreichen. Tatsächlich zeigt die Schwachstelle im Perl-Modul ScanDeps (CVE-2024-10224), wurde jedoch durch die Übergabe externer Parameter an dieses Modul ohne angemessene Überprüfung verursacht.
Ein Angriff kann durch das Starten eines Perl-Skripts mit dem Symbol „|“ im Namen, beispielsweise „/home/test/perl|“, erfolgen. Während der Ausführung der Funktion scan_deps() in needrestart wird diese Datei über die Funktion open() geöffnet, die das Zeichen „|“ als Flag zur Ausführung des Programms „/home/test/perl“ interpretiert und den Ausgabestrom dieses Programms verwendet.
Quelle: opennet.ru
