Unabhängig voneinander haben Sicherheitsexperten von Red Hat und Google eine Schwachstelle in der Standardbibliothek glibc gefunden, die das Ausführen von Schadcode ermöglichen kann. „glibc“ steht für die „Gnu C Library“ und ist die im Unix-Bereich am weitesten verbreitete Standardbibliothek für die Programmiersprache C. So enthält glibc häufig verwendete Funktionen für Ein- und Ausgabe, Speichermanagement, mathematische Operationen und Netzwerkfunktionen.

Pufferüberlauf in getaddrinfo()

Die Sicherheitslücke existiert seit 2008 und betrifft konkret die glibc-Funktion getaddrinfo(), die verwendet wird, um menschenlesbare Adressen wie Hostnamen oder IP-Adressen in die interne addrinfo-Struktur umzuwandeln. Die Funktion beinhaltet einen DNS-Resolver, der Anfragen an DNS-Server, z.B. zum Ermitteln der IP-Adresse eines gegebenen Hostnamens, schickt. Der Pufferüberlauf kann bei der Verarbeitung der Serverantwort auftreten. Intern reserviert glibc nämlich 2048 Bytes auf dem Stack für die Antwort. Bei einer Antwort, deren Länge 2048 Bytes überschreitet, werden zwar neue Speicher reserviert und Zeiger auf den neuen Speicher aktualisiert, allerdings nicht zuverlässig. Unter bestimmten Voraussetzungen kann es passieren, dass die überlange DNS-Antwort doch auf den Stack geschrieben wird, was zu einem Pufferüberlauf führt: Die Funktion schreibt in für sie nicht vorgesehene Speicherbereiche. Dass kann zur Folge haben, dass das System instabil wird und eine Anwendung abstürzt. Allerdings lässt sich so auch schadhafter Programmcode im Speicher unterbringen, der vom Prozessor ausgeführt werden kann.

Ausnutzen des Überlaufs

Zum Ausnutzen der Sicherheitslücke muss ein Angreifer also eine manipulierte DNS-Antwort an das Zielsystem übermitteln. Entweder steht ihm also ein DNS-Server zur Verfügung, den das Zielsystem abfragt, oder er fängt per Man-In-The-Middle Attacke eine beliebige DNS-Antwort ab, manipuliert sie entsprechend und sendet sie weiter an das Zielsystem.

Folgen

Der Pufferüberlauf gefährdet die Stabilität des Zielsystems und ein Angreifer kann die Lücke ausnutzen, um das Zielsystem zum Absturz bringen. Das Ausführen von Schadcode auf einem entfernten Zielsystem ist jedoch für den Angreifer viel interessanter – und komplizierter in der Umsetzung. Mittlerweile enthalten viele Betriebssysteme Gegenmaßnahmen, die das Ausführen von Fremdcode durch Pufferüberläufe erschweren. So werden zum Beispiel Speicherbereiche für Programme zufällig vergeben, sodass sich ein Angreifer nicht auf feste Speicheradressen verlassen kann (Address Space Layout Randomization).

Wer ist gefährdet?

Betroffen von der Sicherheitslücke ist glibc in Version 2.9 (von 2008) oder aktueller. Als Standardbibliothek wird glibc auf vielen Unix- bzw. Linux-Systemen verwendet, sodass ein Großteil der Linux-Server und Linux-Desktoprechner betroffen sein wird, sowie zahlreiche Embedded Devices wie Router oder NAS-Systeme, die auf Linux basieren. Gerade im Embedded-Bereich ist diese Schwachstelle gravierend, da hier teilweise der Updateprozess aufwändig ist und die Hersteller nur langsam oder gar nicht mit einem Update reagieren.

Das Android Betriebssystem verwendet eine andere Standardbibliothek (Bionic libc), die diese Schwachstelle nicht enthält. Ebenso verwenden Apples iOS und OS X eine andere Standardbibliothek, wie auch andere BSD Systeme.

Gegenmaßnahmen

Auf betroffenen Systemen sollte glibc schnellstens aktualisiert werden. Viele Linux-Distributionen stellen bereits aktualisierte Pakete zur Verfügung. Falls ein Update nicht möglich ist, könnte als Gegenmaßnahme ein sicherer DNS-Server im eigenen Netz eingesetzt werden. Ein interner Angriff per Man-In-The-Middle Attacke wäre so allerdings immer noch möglich.