Jann Horn vom Project Zero-Team von Google, der die Spectre- und Meltdown-Schwachstellen entdeckte, veröffentlichte eine Technik zur Ausnutzung einer Schwachstelle (CVE-2021-4083) im Kernel-Garbage-Collector. LinuxDie Sicherheitslücke entsteht durch eine Race Condition beim Löschen von Unix-Socket-Dateideskriptoren und ermöglicht es möglicherweise einem lokalen Benutzer ohne Administratorrechte, Kernel-Code auszuführen.
Das Problem ist deshalb interessant, weil das Zeitfenster, in dem sich der Race Condition manifestiert, als zu klein angesehen wurde, um echte Exploits zu erstellen. Der Autor der Studie zeigte jedoch, dass selbst solche zunächst skeptischen Schwachstellen zu einer Quelle echter Angriffe werden können, wenn der Exploit-Ersteller über die erforderlichen Fähigkeiten und die nötige Zeit verfügt. Jann Horn zeigte, wie es durch subtile Manipulationen möglich ist, den Race Condition, der beim gleichzeitigen Aufruf von close() und fget() auftritt, auf eine vollständig ausnutzbare Use-after-free-Schwachstelle zu reduzieren und Zugriff auf eine bereits freigegebene Datenstruktur innerhalb des Kernels zu erhalten.
Ein Race Condition tritt auf, wenn ein Datei-Deskriptor durch den gleichzeitigen Aufruf von close() und fget() geschlossen wird. Der Aufruf von close() kann vor der Ausführung von fget() ausgeführt werden, was den Garbage Collector verwirrt, da die Dateistruktur laut Refcount keine externen Referenzen hat, aber mit dem Dateideskriptor verbunden bleibt, d. h. der Garbage Collector denkt, dass er exklusiven Zugriff auf die Struktur hat, aber tatsächlich zeigt der in der Dateideskriptortabelle verbleibende Eintrag für einen kurzen Zeitraum noch auf die Struktur, die freigegeben wird.
Um die Wahrscheinlichkeit zu erhöhen, in einen Race Condition zu geraten, wurden verschiedene Tricks verwendet, die es ermöglichten, die Wahrscheinlichkeit einer erfolgreichen Ausnutzung durch die Einführung systemspezifischer Optimierungen auf 30 % zu erhöhen. Um beispielsweise die Zugriffszeit auf eine Struktur mit Dateideskriptoren um mehrere hundert Nanosekunden zu erhöhen, wurden Daten aus dem Prozessorcache verdrängt, indem der Cache mit Aktivität auf einem anderen CPU-Kern überfüllt wurde. Dadurch war es möglich, die Struktur aus dem Speicher und nicht aus dem schnellen CPU-Cache zurückzugeben.
Das zweite wichtige Feature war die Verwendung von Interrupts, die vom Hardware-Timer generiert wurden, um die Race-Condition-Zeit zu erhöhen. Der Zeitpunkt wurde so gewählt, dass der Interrupt-Handler beim Auftreten eines Race Condition ausgelöst wird und die Ausführung des Codes für einige Zeit unterbricht. Um die Rückgabe der Kontrolle weiter zu verzögern, generierte Epoll etwa 50 Einträge in der Warteschlange, was eine Iteration im Interrupt-Handler erforderte.
Die Exploit-Technik wurde nach einer 90-tägigen Geheimhaltungsfrist offengelegt. Das Problem besteht seit Kernel 2.6.32 und wurde Anfang Dezember behoben. Der Fix wurde in Kernel 5.16 aufgenommen und auch auf LTS-Kernelzweige und mit Distributionen ausgelieferte Kernelpakete portiert. Bemerkenswert ist, dass die Schwachstelle bei der Analyse eines ähnlichen Problems CVE-2021-0920 identifiziert wurde, das sich im Garbage Collector bei der Verarbeitung des MSG_PEEK-Flags manifestiert.
Source: opennet.ru
