Es wurde eine Technik zum Ausnutzen einer Schwachstelle im TTY-Subsystem des Linux-Kernels offengelegt

Forscher des Google Project Zero-Teams haben eine Methode zum Ausnutzen einer Schwachstelle (CVE-2020-29661) in der Implementierung des TIOCSPGRP ioctl-Handlers aus dem tty-Subsystem des Linux-Kernels veröffentlicht und auch die Schutzmechanismen, die eine solche blockieren könnten, im Detail untersucht Schwachstellen.

Der Fehler, der das Problem verursachte, wurde bereits am 3. Dezember letzten Jahres im Linux-Kernel behoben. Das Problem tritt in Kerneln bis zur Version 5.9.13 auf, aber die meisten Distributionen haben das Problem in den im letzten Jahr vorgeschlagenen Kernel-Paketaktualisierungen behoben (Debian, RHEL, SUSE, Ubuntu, Fedora, Arch). Eine ähnliche Schwachstelle (CVE-2020-29660) wurde gleichzeitig in der Implementierung des TIOCGSID-ioctl-Aufrufs gefunden, sie wurde jedoch ebenfalls überall behoben.

Das Problem wird durch einen Sperrfehler verursacht, der eine Race-Bedingung im Code drivers/tty/tty_jobctrl.c verursacht, die zum Erstellen von „Use-after-free“-Speicherzugriffsbedingungen verwendet werden könnte, die aus dem Benutzerbereich über den ioct-Aufruf von TIOCSPGRP ausgenutzt werden. Es wurde ein funktionierender Exploit für die Rechteausweitung unter Debian 10 mit Kernel 4.19.0-13-amd64 demonstriert.

Gleichzeitig liegt der Schwerpunkt in dem veröffentlichten Artikel nicht so sehr auf der Technik zum Erstellen eines funktionierenden Exploits, sondern darauf, welche Tools im Kernel zum Schutz vor solchen Schwachstellen vorhanden sind. Die Schlussfolgerung ist nicht ermutigend, Methoden wie die Segmentierung des Speichers im Heap und die Steuerung des Speicherzugriffs nach der Freigabe werden in der Praxis nicht verwendet, da sie zu einer Leistungseinbuße und einem auf CFI (Control Flow Integrity) basierenden Schutz führen, der Exploits blockiert in den späteren Phasen des Angriffs verbesserungsbedürftig.

Bei der Überlegung, was auf lange Sicht einen Unterschied machen könnte, ist die Verwendung fortschrittlicher statischer Analysatoren oder die Verwendung speichersicherer Sprachen wie Rust und C-Dialekte mit umfangreichen Annotationen (wie Checked C) in der Erstellungsphase von Zustandsprüfern hervorstechen. Schlösser, Objekte und Zeiger. Unter den Schutzmethoden werden auch die Aktivierung des panic_on_oops-Modus, die Überführung von Kernelstrukturen in den Nur-Lese-Modus und die Einschränkung des Zugriffs auf Systemaufrufe durch Mechanismen wie seccomp genannt.

Source: opennet.ru

Kommentar hinzufügen