Open Source im professionellen Einsatz

OpenSSL: Integer Overflow erlaubt Denial-of-Service-Attacken

Eine Sicherheitslücke in OpenSSL hat zur Folge, dass ein entfernter Angreifer Denial-of-Service-Attacken durchführen kann. Die Attacke ist mit Hilfe einer speziellen SSL-Anfrage an ein betroffenes System möglich. Der verantwortliche Programmierfehler befindet sich in der »ssl3_get_client_hello()«-Funktion in der »ssl/s3_srvr.c«-Datei. Hier kann es zu einem Integer-Überlauf kommen, den der Angreifer ausnutzen kann.

Das Problem besteht darin, dass in dieser Funktion, wie auch in anderen Teilen des Programmcodes, folgende Abfragen recht häufig vorkommen:

if (p + len > limit)
{ 
   return; /* Too long */
}

Dabei ist p ein Zeiger auf einen zuvor allozierten Speicherbereich, der insgesamt SIZE Bytes aufnehmen kann. Weiter ist limit ein Zeiger, der auf p + SIZE zeigt, d.h.

limit = p + SIZE 

Die len-Variable speichert die Länge von auf p abzulegenden Daten, die von dem Benutzer spezifiziert werden können in der »ssl3_get_client_hello()«-Funktion. Der Angreifer hat hier also explizit Kontrolle über len und die in den Puffer zu schreibenden Daten. Eigentlich sieht obiger Code korregt aus, denn er versucht zu verhindern, dass der Angreifer über die Grenzen des allozierte Puffers schreiben kann. Allerdings wird hier die Zeiger-Arithmetik falsch angewendet: so ist »p+len« nur dann korrekt definiert, wenn len kleiner oder gleich SIZE ist. D.h. der Angreifer kann diese Kontrolle leicht umgehen, wenn er einfach größere len-Werte verwendet, die dann zu unfedfiniertem Verhalten führen.

comments powered by Disqus

Stellenmarkt

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