Open Source im professionellen Einsatz

Kernel-Schwachstelle: Lokaler Angreifer gelangt an Root-Rechte

Eine Sicherheitslücke im Linux Kernel hat zur Folge, dass ein lokaler Angreifer Root-Rechte auf dem System erlangen kann. Die Schwachstelle entsteht durch Fehler in dem SCSI (Small Computer System Interface) Subsystem und in einer generischen Blocktreiber Funktion. Im einzelnen sind die sg_write()- und bsg_write()-Funktionen fehlerhaft implementiert in den drivers/scsi/sg.c- und block/bsg.c-Dateien. Anfällig für das System sind allerdings nur Systeme, die KERNEL_DS aktiviert haben.  KERNEL_DS steht grob gesagt für Kernel-Daten-Speicher im Gegensatz zu USER_DS, das für Benutzer-Datenspeicher steht. Je nachdem welcher Speicher gerade genutzt wird, liegen andere Adresslimits vor, die mit der Funktion get_fs() bestimmt werden können. Genauso können die Limits auch via set_fs() gesetzt werden. Diese Funktion nimmt lediglich KERNEL_DS oder USER_DS als Argumente an.

Das Problem der beiden fehlerhaften Funktionen besteht darin, dass versehentlich mit falschen Speicherlimits aufgerufen werden können, so dass der Angreifer Zugriff auf diesen Speicher erlangen kann, der dann im Kernel
ausgeführt wird. Dadurch erhält er dann direkt Root-Zugriff auf das System.

Um diese Probleme zu beseitigen, wurden nun im Kernel in den beiden Funktionen eine zusätzliche Prüfung eingebaut:

if (unlikely(segment_eq(get_fs(), KERNEL_DS)))
    return -EINVAL;

Diese If()-Abfrage stellt sicher, dass Zeiger im richtigen Adress-Bereich leben und damit das Problem nicht mehr nicht mehr auftritt.

comments powered by Disqus

Ausgabe 04/2017

Digitale Ausgabe: Preis € 6,40
(inkl. 19% MwSt.)

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.