17.07.2009 17:05
Der Entwickler des Grsecurity-Projekts, Brad Spengler, hat einen Exploit für eine Lücke im Tun-Interface des Linux-Kernel 2.6.30 und des in der Beta-Version von RHEL5.4 verwendeten Kernels 2.6.18 (mit Backports) veröffentlicht, über die Angreifer an Root-Rechte gelangen können. Das besondere daran ist, dass der Exploit offenbar sogar Sicherheitserweiterungen wie SELinux aushebeln kann. Die Lücke ist dem Bericht von Spengler zufolge nur in diesen Kernel-Versionen zu finden. Kern des Problems ist offenbar eine normalerweise nicht ausnutzbare Null-Pointer-Dereference, die im Zusammenspiel mit den Optimierfunktionen des GCC doch ausnutzbar wird.
Das Zusammenspiel der Lücke und der Tricks, um SELinux zu umgehen, ist relativ knifflig. Das Internet Storm Center hat einen ersten Blick auf die Schwachstelle geworfen. So ist folgender Codeschnipsel für das Problem verantwortlich:
static unsigned int tun_chr_poll(struct file *file, poll_table * wait)
struct sock *sk = tun->sk;
…
if (!tun)
return POLLERR;
Demnach soll zwar if (!tun) bei 0 (NULL) einen Fehler zurückliefern, jedoch optimiert der Compiler den if-Block einfach weg, da die Variable ja bereits zugewiesen respektive dereferenziert wurde. In der Folge kann der Kernel unter Umständen doch auf die Adresse x00000000 zugreifen, was ein Angreifer auf eigenen Code umbiegen kann. Marcus Meissner von Suse bestätigte gegenüber heise Security das prinzipielle Problem.
Damit der Exploit funktioniere, seien aber zwei weitere Bedingungen nötig, erklärt Meissner. Der Code müsse des Device /dev/net/tun öffnen können, wozu der Exploit ladbare Module von pulseaudio benutze, die in einigen Distributionen SUID gesetzt sind. Zudem müsse der Code die Exploit-Schutzfunktionen "mmap_min_addr" ausschalten können, was Spengler offenbar über einen Fehler in der Implementierung von sogenannten Personalities erreiche.
Die Lösung des Problem ist nach einhelliger Meinung sehr einfach: Man muss im betroffenen Code die Prüfung vor die Zuweisung setzen, um die Wegoptimierung zu verhindern. Im Kernel 2.6.30.2 soll der Fehler behoben sein.
Künftige Kernelversionen sollen zudem mit der Option "fno-delete-null-pointer-checks" übersetzt werden, womit der Compiler keine Prüfungen für Null-Pointer-Prüfungen mehr eliminiert. Auf lwn.net gehen derweil die Meinungen auseinander, ob es sich um eine Kaputtoptimierung des GCC oder einen Programmierfehler handelt.
Siehe dazu auch:
(Daniel Bachfeld)
/
(dab/c't)
Version zum Drucken | Per E-Mail versenden | Newsletter abonnieren
Kommentare lesen (629 Beiträge)
Themen-Forum Schwachstellen
Programmieren von Exploits
Sieben Tutorials zeigen alles, was man wissen muss, um zuverlässige Exploits für Buffer Overflows in Software zu schreiben
mehr...
TLS-Renegotiation-Schwachstelle erklärt
Anhand einfacher Grafiken zeigt Thierry Zoller, wie sich die TLS-Renegotiation-Schwachstelle ausnutzen lässt.
mehr...
Security Operations von Innen
Im Security Operations Center (SOC) überwacht Symantec aus der Ferne die Netzwerke seiner Kunden auf Hackerangriffe und verdächtige Aktivitäten. Wir haben uns das SOC von innen angeschaut.
mehr...
Sicherheitslücken in Add-ons gefährden Firefox-Anwender
ENISA-Studie hilft bei Risikoabschätzung für Cloud Computing
Fedora rudert bei den Installationsrechten zurück
PHP 5.3.1: Bug-Fixes und Sicherheitskorrekturen
Forderungen nach mehr Videoüberwachung für Sicherheit in Bus und Bahn
ONLINE MARKT
Werbung