Open Source im professionellen Einsatz

Linux Kernel: Denial-of-Service Attacke

Eine Sicherheitslücke in dem KEYS-Subsystem des Linux Kernels hat zur Folge, dass ein lokaler Angreifer eine Denial-of-Servce-Attacke ausführen kann. Konkret kann er ein Programm im Userspace-Bereich ausführen, welches extrem viel Kernel-Speicher verbraucht. Damit zweingt er das System dann in die Knie.

Der verantwortliche Programmierfehler befindet sich in der
»eyctl_set_reqkey_keyring()«-Funktion in der »security/keys/keyctl.c«-Datei des Kernels. Hier wird der Rückgabewert der »install_process_keyring_to_cred()«-Funktion nicht korrekt behandelt. In der nun korrigierte Version werden Thread-Keyrings nur dann neu angelegt, wenn zuvor noch keiner existiert. So ist das im Kernel beispielsweise auch für
Process-Keyrings geregelt. In der fehlerhaften Kernel-Version war dies nicht der Fall, so dass ein Angreifer durch sehr häufiges Aufrufen der »eyctl_set_reqkey_keyring()«-Funktion mehr und mehr Kernel-Speicher verbrauchen
konnte. Dies ist vom Userspace aus mit folgendem einfach C-Programm möglich:

#include <keyutils.h>
int main()
{
for (;;)
keyctl_set_reqkey_keyring(KEY_REQKEY_DEFL_THREAD_KEYRING);
}

Die »keyctl_set_reqkey_keyring()«-Funktion wird hierbei von der Keyutils-Bibliothek bereitgestellt. Die For-Schleife ruft die Funktion immer wieder auf. Irgendwann wird dann der Speicher des Systems nicht mehr
ausreichen, wodurch die Denial-of-Service-Attacke möglich ist.

Betroffen sind die Kernel-Versionen 2.6.29-rc1 bis 4.11-rc8.

comments powered by Disqus

Ausgabe 10/2017

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

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