Aus Linux-Magazin 11/2022

Kritischer Pufferüberlauf in der Bibliothek Zlib

© Maksym Yemelyanov / 123RF.com

Eine weitverbreitete Bibliothek für die Datenkomprimierung war anfällig für Schadcode, der sich einen Pufferüberlauf zunutze machte.

Die Zlib ist eine freie Programmbibliothek zum Komprimieren und Dekomprimieren von Daten mittels des Deflate-Algorithmus. Bei Deflate handelt es sich um eine Kombination des Lempel-Ziv-Storer-Szymanski-Algorithmus (LZSS) und der Huffman-Kodierung. LZSS ersetzt dabei Zeichenfolgen, die mehrmals vorkommen. Daran schließt sich eine Entropiekodierung nach Huffman an. Die Bibliothek kann sowohl GZIP-Dateien (».gz«) erstellen als auch Datenströme bearbeiten. Das Format des ausgegebenen Datenstroms, der Deflate-Algorithmus und das GZIP-Dateiformat finden sich in den Standards RFC 1950, RFC 1951 und RFC 1952. Der Zlib-Algorithmus ist blockbasiert, arbeitet also die Daten blockweise ab. Die generierten Blöcke schützt eine Adler-32-Prüfsumme. Die von zahllosen Linux-Applikationen genutzte Bibliothek kommt aufgrund ihrer geringen Größe auch in Embedded-Systemen zum Einsatz.

Kürzlich wurde eine kritische Sicherheitslücke [1] in der Zlib entdeckt. Aufgrund der Verbreitung der Bibliothek sind eine Vielzahl von Applikationen anfällig für die entsprechende Schwachstelle. Ein Angreifer kann damit seinen eigenen Programmcode in Applikationen einschleusen und ausführen. Die genauen Konsequenzen des Problems hängen dabei von der Applikation und der konkreten Verwendung der Bibliothek ab. Schlimmstenfalls können dadurch entfernte Angreifer vollständige Kontrolle über Systeme erlangen. Das Problem beruht auf einem Heap-basierten Pufferüberlauf in der Funktion »inflateGetHeader()« aus der Datei »inflate.c«.

Der Heap-Speicher ist ein Bereich des Prozessspeichers, der dem Speichern dynamischer Variablen dient. Diese Variablen werden mit den in C eingebauten Funktionen »malloc()« und »calloc()« zugewiesen und mit der Funktion »realloc()« in der Größe angepasst. Pufferüberläufe (Buffer Overflows) gehören zu den häufigsten Sicherheitslücken. Kurz gesagt werden bei einem Pufferüberlauf durch Fehler im Programmcode zu große Datenmengen in einen dafür zu kleinen reservierten Speicherbereich geschrieben, was Speicherstellen überschreibt, die hinter dem Speicherziel liegen. Ein solcher Pufferüberlauf kann dann zum Absturz des betreffenden Programms führen und lässt sich damit für Denial-of-Service-Attacken nutzen.

Kritischer sind allerdings Szenarien, in denen der Angreifer durch den Überlauf Daten der Laufzeitumgebung des ausgeführten Programms manipuliert. So lässt sich beispielsweise die Rücksprungadresse eines Unterprogramms mit beliebigen Daten überschreiben, wodurch sich beliebige Befehle mit den Privilegien des für den Pufferüberlauf allfälligen Prozesses ausführen lassen. Besitzt dieser Root-Rechte, erlangt der Angreifer vollen Zugriff auf das betroffene System.

Der Pufferüberlauf der Zlib-Bibliothek tritt durch das Verarbeiten speziell präparierter Daten in einem Zusatzfeld eines sogenannten Large GZIP Headers auf. Konkret bedeutet das, dass sich nur solche Applikationen attackieren lassen, die die Funktion »inflateGetHeader()« aufrufen. Laut Advisory gibt es allerdings zahlreiche Anwendungen, die diese Funktion nicht verwenden und damit auch nicht für den Pufferüberlauf anfällig sind. Im Programmcode löst eine unzureichende If-Kontrolle vor einem Aufruf der Funktion »memcpy()« den Überlauf aus. In der nun korrigierten Version der Bibliothek wurde diese If-Abfrage korrigiert beziehungsweise erweitert, sodass die Schwachstelle nicht mehr auftreten kann.

Betroffen sind Zlib-Versionen bis 1.2.12. Zu den Programmen, die sich über die Lücke attackieren lassen, gehören unter anderem die häufig verwendeten Tools Rsync und Curl. (jcb)

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 1 HeftseitePreis €0,99
(inkl. 19% MwSt.)
LINUX-MAGAZIN KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Readly Logo
E-Mail Benachrichtigung
Benachrichtige mich zu:
0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben