Root-Rechte durch Linux-Kernel-Bug [Update]
Durch eine Schwachstelle in der Speicherverwaltung des Linux-Kernels können Anwendungen ihren Code mit Root-Rechten ausführen. Der Fehler ist offenbar seit Einführung der Version 2.6 im Kernel zu finden.
- Ronald Eikenberg
Durch ein konzeptionelles Problem in der Speicherverwaltung von Linux können lokale Angreifer unter Linux Code mit Root-Rechten ausführen, wie Rafal Wojtczuk in seinem Paper beschreibt. Das Problem beruht auf der möglichen Überschneidung der Speicherbereiche des Stacks und von Shared-Memory-Segmenten unter Linux.
Wojtczuk führt als konkretes Angriffsbeispiel den X-Server an, bei dem sich durch Ausfüllen des Speichers mit Daten (etwa Pixmaps etc.) die Grenzen von Heap und Stack sehr nah aneinanderbringen lassen. Ein dann vom Angreifer angefordertes Shared Memory Segment wird dann an das Ende des Heaps gehängt. Schafft man es nun, den X-Server eine rekursive Funktion aufrufen zu lassen, so wächst der Stack in das Shared Memory Segment. Schreibt der Angreifer in diesem Moment in den angeforderten Shared Memory, so verändert er zugleich den Inhalt des Stacks, etwa Rücksprungadressen. Auf diese Weise lässt sich Code mit Root-Rechten ausführen. Der grsecurity-Entwickler Brad Spengler hat einen Exploit veröffentlicht, der das Problem demonstriert – aber nur zum Absturz des X-Server führt.
Laut Sicherheitsexpertin Joanna Rutkowska ist die Schwachstelle schon seit Jahren im Kernel vorhanden, vermutlich seit der Veröffentlichung von Version 2.6 im Dezember 2003. [Update: In einer E-Mail an unsere englische Schwester-Publikation The H erklärt Rutkowska, dass Spenglers Exploit eine andere, unabhängige Schwachstelle betreffe. Ihre Bemerkungen dazu bezogen sich nur auf einen Kommentar im Quellcode.]
Wojtczuk schlägt in seinem Paper als Lösung vor, für einen Mindestabstand von einer Speicherseite (Guard Page) zwischen Stack und anderen Speicherbereichen zu sorgen. Diese Funktion wurde in den Kernel-Versionen 2.6.32.19, 2.6.34.4 und 2.6.35.2 bereits implementiert – jedoch ohne explizit auf das Problem hinzuweisen. Zudem werden Prozesse, deren Stack die Grenze anderer Speicherbereiche berührt, nun per SIGBUS terminiert. Für 2.6.27.52 wird ein Update noch vorbereitet. Wer nicht den Kernel von Kernel.org nutzt, sollte auf ein Update seitens des Anbieter der jeweiligen Linux-Distribution warten. Red Hat hat bereits mit einem eigenen Hinweis reagiert.
Ausnutzen lässt sich Schwachstelle bei allen älteren Versionen, sofern auf dem System ein X-Server läuft. Will man ein System aus der Ferne kompromittieren, müsste man zunächst eine weitere Lücke ausnutzen, um überhaupt Code auf das System schleusen und ausführen zu können. Im zweiten Schritt würde man sich denn auf dem oben beschriebenen Weg Root-Rechte verschaffen. Kernel-Entwickler Greg Kroah-Hartman richtet sich mit deutlichen Worten an die Linux-Gemeinde: "Alle Nutzer [der betroffenen Kernel-Serien] müssen updaten."
[Update: SUSEs Maintainer Andrea Arcangeli hat bereits im September 2004 einen Fix für das Problem angeboten, der aber aus unbekannten Gründen nicht in den allgemeinen Kernel aufgenommen wurde, wie Marcus Meissner vom Suse-Security-Team gegenüber heise Security erklärt. SUSE selbst hat den Fix zumindest in SUSE Linux Enterprise 9 und 11 sowie openSUSE 11.1-11.3 eingepflegt. Für den SUSE Linux Enterprise Server 10 stellen die Entwickler ein Update in Aussicht.] (rei)