Kritische LĂĽcke im Linux-Kernel betrifft alle Versionen seit 2001
Die Lücke ermöglicht es Anwender mit eingeschränkten Rechten, an Root-Rechte auf dem System zu gelangen. Ursache ist eine Null-Pointer-Dereferenzierung im Zusammenhang mit der Initialisierung von Sockets für selten verwendete Protokolle.
- Daniel Bachfeld
Eine kritische Sicherheitslücke im Linux-Kernel betrifft alle Versionen 2.4 und 2.6 seit 2001 auf allen Architekturen, berichten die Google-Sicherheitsspezialisten Tavis Ormandy und Julien Tiennes. Die Lücke ermöglicht es Anwendern mit eingeschränkten Rechten, an Root-Rechte auf dem System zu gelangen. Ursache ist eine Null-Pointer-Dereferenzierung im Zusammenhang mit der Initialisierung von Sockets für selten verwendete Protokolle.
Üblicherweise definiert eine Pointer-Struktur, welche Operationen ein Socket unterstützt, etwa accept, bind und so weiter. Ist aber etwa die Operation accept nicht implementiert, so sollte sie auf eine vordefinierte Komponente wie sock_no_accept zeigen. Allerdings ist dies offenbar nicht bei allen implementierten Protokollen der Fall. Der Bericht nennt unter anderem PF_BLUETOOTH, PF_IUCV, PF_INET6 (mit IPPROTO_SCTP), PF_PPPOX und PF_ISDN. Dort bleiben einige Zeiger uninitalisiert, was sich im Zusammenhang mit der Funktion sock_sendpage zum Ausführen von Code mit Root-Rechten ausnutzen lässt.
Ormandy und Tiennes glauben, dass Linux-Version 2.4 und 2.6 seit Mai 2001 betroffen sind, also 2.4.4 bis einschließlich 2.4.37.4 sowie 2.6.0 bis einschließlich 2.6.30.4. Die Kernel-Entwickler haben, statt alle unvollständig implementierten Protokolle zu fixen, einfach sock_sendpage auf die Funktion kernel_sendpage umgemappt, die auch den Fall behandelt, dass ein Zeiger nicht initalisiert ist. Die Korrektur ist aber bislang nur in das Kernel-Repository eingeflossen.
Es ist aber in Kürze mit einer neuen offiziellen Kernel-Version zu rechnen, da für die Lücke bereits ein Exploit (wunderbar_emporium) öffentlich verfügbar ist. Autor des Codes ist erneut Brad Spengler, der bereits Mitte Juli einen Root-Exploit für den Linux-Kernel veröffentlichte. Der neue Exploit ermöglichte in einem kurzen Test der heise-Security-Redaktion auf einem vollständig gepatchen Ubuntu 8.10 den Root-Zugriff auf das System.
Laut Ormandy und Tiennes soll der Exploit aber bei aktuellen Kerneln mit mmap_min_addr-Unterstützung nicht funktionieren, wenn dort mittels sysctl als Wert für vm.mmap_min_addr eine Zahl größer als Null definiert ist.
Siehe dazu auch:
- Linux NULL pointer dereference due to incorrect proto_ops initializations (CVE-2009-2692), Blogeintrag von Julien Tiennes
- Linux NULL pointer dereference due to incorrect proto_ops initializations, Beschreibung von Tavis Ormandy
- Root-Exploit für Linux-Kernel veröffentlicht
(dab)