Buffer-Overflow in 64Bit-Linux-Kernel

Der 64-bittige Linux-Kernel bis zur Version 2.4.31 sowie in der 2.6er-Reihe bis einschließlich 2.6.6 enthält einen Buffer-Overflow, über den ein angemeldeter Benutzer Root-Rechte erlangen könnte.

vorlesen Druckansicht 273 Kommentare lesen
Lesezeit: 2 Min.
Von

Wie der Security-Spezialist Ilja van Sprundel vom Sicherheitsunternehmen Suresec in einem Security-Advisory berichtet, enthält der 64-bittige Linux-Kernel der Serie 2.4 bis zur aktuellen Version 2.4.31 sowie in der 2.6er-Reihe bis einschließlich Version 2.6.6 eine so genannte Race Condition in der 32-Bit-Kompatibilitäts-Funktion sys32_execve().

Diese Funktion dient zum Aufrufen von 32-Bit-Prozessen und hat einen kleinen, aber folgenreichen Designfehler. So zählt die Funktion beim Aufruf alle Zeiger (Pointer) im Userland und nutzt den gewonnenen Wert, um einen Kernel-Speicherbereich zu alloziieren. Danach kopiert sys32_execve() die Daten vom Userland in den vorher angeforderten Kernel-Bereich. Wenn zwischen der Speicheranforderung und dem Kopieren die Anzahl der Zeiger verändert wird, kann dies zu einem Buffer-Overflow führen. Dies lässt sich laut van Sprundel lokal ausnutzen, um Root-Recht zu erlangen, da die Funktionen kmalloc() und get_user() blockierbar sind. Dies ist bei Uniprozessor-Systemen Voraussetzung -- SMP-Kernel sind auch ohne das Blockieren dieser Funktionen in der Lage, die Daten parallel zu verändern.

Für die 2.4er-Kernel-Reihe gibt es noch keinen offiziell bereinigten Kernel. Im Changelog für den 2.4.31-hf1-Kernel ist dieser Fehler jedoch bereits von Andi Kleen als behoben vermerkt. Die Hotfix-Seite ist generell interessant, da hier zügig Sicherheitsupdates für den Linux-Kernel zu finden sind, wenn das nächste Minor-Kernel-Release noch auf sich warten lässt. Es stehen dort auch Backports für ältere Kernel-Versionen bis einschließlich 2.4.29 bereit.

Siehe dazu auch: (dmk)