Das Unternehmen Qualys hat eine gefährliche Schwachstelle (CVE-2023-6246) in der Standard-C-Bibliothek Glibc entdeckt, die es ermöglicht, durch Manipulation beim Start von SUID-Anwendungen eine Codeausführung mit erhöhten Rechten zu erreichen. Forscher konnten einen funktionierenden Exploit entwickeln, der es erlaubt, Root-Rechte durch Manipulation der Kommandozeilenargumente beim Ausführen des Programms su zu erlangen.
Die Schwachstelle wird durch einen Pufferüberlauf in der Funktion __vsyslog_internal() verursacht, die bei Aufrufen der Funktionen syslog() und vsyslog() verwendet wird. Das Problem entsteht durch einen Fehler beim Versuch, über das Makro SYSLOG_HEADER einen zu langen Anwendungsnamen auszugeben. Wenn der Puffer unter Berücksichtigung des langen Namens erweitert werden soll, tritt ein Fehler auf, nach dem Daten in den ursprünglichen kleineren Puffer geschrieben werden.
Bei der Durchführung eines Angriffs über das Programm su kann der Angreifer den Prozessnamen beim Starten der Anwendung ändern, indem er den Wert von argv[0] ersetzt, der zur Erfassung des Programmnamens bei der Protokollausgabe verwendet wird, und eine kontrollierte Überschreibung von Daten außerhalb des zugewiesenen Puffers erreichen. Das Überlauf kann dann verwendet werden, um die Struktur nss_module in der nss-Bibliothek zu überschreiben und eine gemeinsam genutzte Bibliothek mit Root-Rechten zu laden.
Das Problem tritt ab der Version glibc 2.37 auf, die im August 2022 veröffentlicht wurde und eine Änderung enthält, die die Situation bei der Versuch, zu große Nachrichten zu schreiben, behandelt. Der sicherheitskritische Fix wurde in den Branch glibc 2.36 und in die Pakete von Distributionen mit älteren Versionen von glibc zurückportiert, da der angesprochene Fix die Schwachstelle CVE-2022-39046 behob, die zu Datenlecks aus dem Heap führte. Interessanterweise führte die Behebung einer unkritischen Schwachstelle zur Entstehung eines kritischen Problems. Bemerkenswert ist, dass über eine ähnliche Schwachstelle in der Funktion vsyslog() in der Bibliothek libc 5.4.3 bereits 1997 berichtet wurde.
Eine Sicherheitsanfälligkeit wurde in Debian 12/13, Ubuntu 23.04/23.10 und Fedora 37-39 bestätigt. Die Funktionsweise des Exploits zur Erlangung von root-Rechten durch einen nicht privilegierten Benutzer wurde in einer vollständig aktualisierten Umgebung von Fedora 38 mit allen Standard-Sicherheitsmechanismen demonstriert. Die Sicherheitsanfälligkeit kann nur lokal ausgenutzt werden, da sie die Übertragung von mehr als 1024 Bytes über das Argument argv[0] oder das Argument ident in der Funktion openlog() erfordert.
Die Behebung der Sicherheitsanfälligkeit wurde vor wenigen Stunden in die Codebasis von Glibc integriert und wird in die morgige Aktualisierung von Glibc 2.39 aufgenommen, zusammen mit der Behebung von zwei weiteren Sicherheitsanfälligkeiten (CVE-2023-6779, CVE-2023-6780), die ebenfalls den Code von __vsyslog_internal() betreffen und zu einem Buffer-Overflow führen. Darüber hinaus hat das Unternehmen Qualys auf einen gefundene Buffer-Overflow in der Implementierung der Funktion qsort() hingewiesen, der von den Entwicklern von Glibc nicht als Sicherheitsanfälligkeit eingestuft wurde, da die Ausnutzung die Verwendung einer untypischen Vergleichsfunktion als Argument beim Aufruf von qsort erfordert, die die Differenz der verglichenen Parameter zurückgibt.
Der Status der Behebung von Schwachstellen in den Distributionen kann auf den folgenden Seiten eingesehen werden: Debian, Ubuntu, SUSE, RHEL, Fedora, Arch Linux, Gentoo, Slackware. Die Anfälligkeit des Systems für Schwachstellen kann mit dem folgenden Befehl getestet werden: $ (exec -a "`printf '28000x' 1`" /usr/bin/su < /dev/null)
Quelle: opennet.ru
