Android-, Debian- und Ubuntu-Benutzer sind immer noch gefährdet.
Es wurde ein Fehler bei der Cache-Invalidierung im Linux-Kernel aufgedeckt, der es einem Angreifer ermöglichen könnte, Root-Privilegien auf dem Zielsystem zu erlangen.
Dies ist der zweite Kernel-Fehler in Linux, der in der letzten Woche debütiert wurde; ein Problem der Eskalation lokaler Privilegien wurde ebenfalls kürzlich entdeckt.
Der Fehler (CVE-2018-17182), der in der Linux-Speicherverwaltung in den Kernel-Versionen 3.16 bis 4.18.8 existiert, kann auf viele verschiedene Arten ausgenutzt werden, "sogar aus relativ stark sandkastenförmigen Zusammenhängen", so Jann Horn, ein Forscher beim Google-Projekt Zero.
Das Linux-Team behebt das Problem im Upstream-Kernelbaum innerhalb von zwei Tagen, nachdem Horn es am 18. September verantwortungsbewusst gemeldet hatte, was laut Horn "im Vergleich zu den Reparaturzeiten anderer Softwareanbieter außergewöhnlich schnell" war.
Die schlechte Nachricht ist, dass die Debian-Stable- und Ubuntu-Veröffentlichungen 16.04 und 18.04 die Verwundbarkeit noch nicht gepatcht haben - und Android-Benutzer bleiben weiterhin gefährdet.
"Android versendet nur einmal im Monat Sicherheitsaktualisierungen", sagte Horn diese Woche in einem Blog-Post über den Fehler. "Daher kann es, wenn eine sicherheitskritische Korrektur in einem stabilen Upstream-Kernel verfügbar ist, immer noch Wochen dauern, bis die Korrektur tatsächlich für die Nutzer verfügbar ist - insbesondere wenn die Auswirkungen auf die Sicherheit nicht öffentlich bekannt gegeben werden.
Wenn der Linux-Kernel den virtuellen Speicherbereich (VMA) nachschlägt, um einen Seitenfehler zu behandeln, gibt es einen langsamen Pfad, der ein Kriechen durch alle VMAs im Code beinhaltet, um die richtige Lösung für das Problem zu finden. Da dies ineffizient ist und mit einem Leistungseinbruch einhergeht, haben Codierer eine schnelle Alternative eingebaut, die verwendet werden kann, wenn der VMA vor kurzem verwendet wurde. Dieser Caching-Ansatz brachte jedoch seine eigenen Probleme mit sich.
"Wenn ein VMA freigegeben wird, müssen die VMA-Caches aller Threads ungültig gemacht werden - andernfalls würde der nächste VMA-Lookup einem baumelnden Zeiger folgen. Da ein Prozess jedoch viele Threads haben kann, wäre eine einfache Iteration durch die VMA-Caches aller Threads ein Leistungsproblem", erklärte Horn.
Die Lösung hierfür besteht darin, Threads mit Sequenznummern zu versehen, um die verschiedenen Schnellspurpfade voneinander zu unterscheiden. Aber die Sequenznummern sind nur 32 Bit breit, was bedeutet, dass sie überlaufen können. Als Optimierung in Version 3.16 wurde die Überlaufbehandlungslogik hinzugefügt, die einen Fehler einführte, der zu einer "use-after-free"-Schwachstelle (UAF) führte, auch bekannt als CVE-2018-17182.
UAF bezieht sich insbesondere auf den Versuch, auf Speicher zuzugreifen, nachdem dieser freigegeben wurde; eine falsche UAF-Kodierung (z.B. die Erlaubnis, dass ein Programm einen Zeiger nach der Freigabe weiterhin verwendet) kann ein Programm zum Absturz bringen. UAF-Schwachstellen sind inzwischen eine Klasse von Speicher-Korruptionsfehlern, die aus der Verwirrung darüber resultieren, welcher Teil des Programms für die Freigabe des Speichers verantwortlich ist. Im Falle dieser Schwachstelle öffnet dies die Tür zu Ausnutzungen, die Root-Zugang und die Ausführung von beliebigem Code ermöglichen.
Benutzer können CVE-2018-17182 zu einem Nichtproblem machen, indem sie auf eine stabile Upstream-Veröffentlichung aktualisieren, entweder 4.18.9, 4.14.71, 4.9.128, 4.4.157 oder 3.16.58.
"Der Fehler wurde behoben, indem die [VMA]-Sequenznummern auf 64 Bit geändert wurden, wodurch ein Überlauf undurchführbar wurde und die Überlaufbehandlungslogik entfernt wurde", sagte Horn.
Bei ungepatchten Systemen gibt es unzählige Möglichkeiten, die Schwachstelle zu nutzen, um ein Ziel anzugreifen, so Horn. Allerdings kann die Konfiguration des Kernels große Auswirkungen haben - und in diesem Fall wird die erfolgreiche Ausnutzung in Umgebungen, die Linux-Kernel verwenden, die nicht für erhöhte Sicherheit konfiguriert wurden, trivialer, so Horn.
Ein Angreifer, der versucht, einen Kernel-Fehler auszunutzen, könnte beispielsweise von der Möglichkeit profitieren, einen Angriff mehrmals zu wiederholen, ohne einen System-Neustart auszulösen.
"Ein Angreifer mit der Fähigkeit, das Absturzprotokoll zu lesen, das beim ersten Versuch erzeugt wurde, könnte sogar in der Lage sein, diese Informationen für einen ausgeklügelteren zweiten Versuch zu nutzen", sagte der Forscher.
Horn hat einen Proof-of-Concept (PoC) für den gezielten Angriff auf Ubuntu 18.04 (mit Kernel linux-image-4.15.0-34-generic in der Version 4.15.0-34.37) gebaut, der dies demonstriert - er erlaubt es jemandem mit ausreichend langem Zugriff - etwa einer Stunde - Root-Privilegien auf dem Zielsystem zu erlangen.
"Grundsätzlich kann dieser Fehler von jedem Prozess ausgelöst werden, der ausreichend lange laufen kann, um den Referenzzähler zu überlaufen (etwa eine Stunde, wenn MAP_FIXED verwendbar ist) und die Fähigkeit hat, mmap()/munmap() (zur Verwaltung von Speicherzuordnungen) und clone() (zur Erstellung eines Threads) zu verwenden", erklärte er.
Es scheint kein Problem zu sein, die Sicherheit zu erhöhen, aber der Forscher stellte fest, dass es darauf hinausläuft, Kompromisse zwischen Verfügbarkeit, Zuverlässigkeit und Sicherheit einzugehen.
"Ein Systemeigentümer möchte vielleicht, dass ein System so lange wie möglich läuft, selbst wenn Teile des Systems abstürzen, wenn eine plötzliche Kernel-Panik zu Datenverlust oder Ausfallzeiten eines wichtigen Dienstes führen würde", erklärte er.