Linux: Kernel-Attacke über USB-Tastatur

Eine Sicherheitslücke im Linux-Kernel hat zur Folge, dass ein entfernter Angreifer Root-Rechte auf einem System erlangen kann. Das besondere an dieser Angriffsmöglichkeit besteht darin, dass sie sich durch das Anschließen speziell präparierter USB-Geräte ausnutzen lässt.

Die Ursache liegt in mehreren Schwachstellen im HID-Code (für Human Interface device) des Kernels. Insgesamt hat der Entwickler Kees Cook Ende August zwölf Sicherheitslecks inklusive Patches veröffentlicht.

Der kritischste Programmierfehler findet sich dabei in der Quelltextdatei “drivers/hid/hid-core.c” und wird unter CVE-2013-2888 geführt. Wird ein HID-Gerät via USB an einen Rechner angeschlossen, so sendet das Gerät verschiedene Daten an den Kernel. Bei einer Tastatur sind diese Ereignisse beispielsweise Tastenanschläge. Die Ereignisse werden dabei im Kernel in speziellen Datenfeldern (Report-IDs) verarbeitet von denen der Kernel maximal 256 aufnehmen kann. In “linux/hid.h” ist diese Zahl in der Struktur “hid_report_enom” fest kodiert:

struct hid_report *report_id_hash[256];

Allerdings wurde vergessen, im Kernel auch sicherzustellen, dass dieser Speicher nicht überläuft, wenn ein Gerät mehr als diese 256 Einträge verwendet. Dadurch kann ein Angreifer einen Buffer Overflow im Kernel auslösen und somit Befehle mit höherer Berechtigung ausführen.

Das Patch führt nun im Kernel die Variable “HID_MAX_IDS” ein, die in “hid.h” als

#define HID_MAX_IDS 256

definiert ist, so dass sich jetzt obige “report_id_hash”-Zeile wie folgt liest:

struct hid_report *report_id_hash[HID_MAX_IDS];

Zudem führt das Patch auch Kontrollen in “hid-core.c” ein, um sicherzustellen, dass nicht mehr als “HID_MAX_IDS” Einträge in “report_id_hash[]” abgelegt werden. So findet sich beispielsweise in der Funktion “hid_register_report()” jetzt eine If-Abfrage:

if (id >= HID_MAX_IDS) return NULL;

Sie garantiert, dass kein Overflow mehr auftritt.

Mindestens Debian (Wheezy) und Red Hat (Fedora 19, Enterprise Linux 6) sind von diesem Problem betroffen.

Nach oben