23.10.2001

23-10-2001 Linux Kernel: Sicherheitslücken

Sicherheitsprobleme unter Linux

Auf BugTraq sind zwei Sicherheitsprobleme mit schweren Implikationen für Linux-Anwender gepostet worden. Beide Sicherheitslücken können nur lokal, das heißt mit einem direkten Zugriff auf die Maschine, genutzt werden. Beide Lücken sind in Linux Kernels der 2.2er-Serie vor 2.2.20, und 2.4ern vor 2.4.10 präsent. Es handelt sich einerseits um eine Verwundbarkeit gegenüber DoS Attacken, andererseits um einen möglichen local root Exploit, d.h. um die Möglichkeit, durch einen Softwarefehler root-Rechte zu erlangen.
Ein Upgrade auf 2.4.12 beziehungsweise auf einen neueren Kernel der 2.2er Serie sollte beide Probleme beheben können, und wird dringend empfohlen!

Die erste Lücke ermöglicht lokale Denial-Of-Service (DoS) Attacken. Dabei wird der Kernel von einem lokalen User mit dem Dereferenzieren eines Symlinks ausgelastet, sodass sie keine anderen Aufgaben mehr wahrnehmen kann.
Mit einem Skript, das rekursiv mehrere Symlinks anlegt kann der Kernel für mehrere Stunden problemlos voll ausgelastet werden. Kernel 2.4.10 behebt das Problem, allerdings lassen sich diese Prozesse (Symlink anlegen) unter 2.4.10 auch nicht beheben. Erst in Kernel 2.4.12 ist das Problem voll behoben!

Root-Zugang per ptrace(3)
Etwas komplizierter ist der Exploit mit ptrace anzusehen. Beim Tracen eines SetUID-Root Binaries kann der mit SetUID-Berechtigung laufende Prozess von einem anderen Prozeß aus verändert und zum ausführen beliebiger Befehle veranlasst werden.
Ein gutes Beispiel ist /usr/bin/newgrp, das auf den meisten Distributionen als SetUID Binary die Voraussetzungen erfüllt. Das SetUID Binary muss für den Angreifer ausführbar sein und mit Root-Rechten SetUID laufen (d.h. das Programm läuft mit Root-Rechten um seine Aufgaben zu erledigen, auch wenn es von unprivilegierten Benutzern gestartet wurde).
Ein Angreifender Prozeß müßte zuerst ein ptrace und danach ein exec (Ausführen eines Programms) auf das SetUID-Programm, etwa newgrp, ausführen. Er führt nun das SetUID Programm als 'Kind' aus, das seinerseits ein Programm aufruft, das mit Root-Rechten läuft, z.B. su.
Im weiteren Ablauf kann der kontrollierende Prozeß der ptrace aufgerufen hat, den Arbeitsspeicher des Kind-Kind-Prozesses, der mit Root-Rechten läuft, verändern, da er den Kind-Prozeß traced. So kann der Kind-Kindprozess veranlasst werden, beliebige Befehle oder Programme mit Root-Rechten zu starten, oder einfach Passwörter umzusetzen!

Dieses Problem ist ebenfalls in Kernel 2.4.12 behoben. Zu beiden Problemen gibt es Demo-Software von Rafal Wojtczuk, einerseits ein Skript, mit dem die Symlinks leicht erzeugt werden können, andererseits eine Demo für den Root-Exploit.

paul


Weiter in der Web-Version mit Fotos, Videos, Links und mehr...