Open Source im professionellen Einsatz

Denial-of-Service-Attacke auf Postfix mit Cyrus-SASL

Postfix ist ein sehr verbreiteter SMTP-Server und wurde ursprünglich geschrieben, um Sendmail durch eine sicherere Software zu ersetzen. Bei der Verwendung mit der Cyrus-SASL-Bibliothek ist nun eine Sicherheitslücke aufgetreten.

Das SMTP-Protokoll selbst ist in RFC 821 spezifiziert und enthält keine Authentifikationsmechanismen. Als das Internet noch in den Kinderschuhen steckte, war dies eine akzeptable Lösung. Aber mit der steigenden Zahl an Nutzern (und Spammern) wurde es schnell nötig, SMTH AUTH als Erweiterung einzuführen. Für den Prozess der Authentifikation gibt es verschiedene Möglichkeiten: Die einfachste und unsicherste Methode besteht darin, die Benutzerdaten als Klartext an den Postfix-SMTP-Server zu übertragen. Bessere Methoden werden häufig mit Hilfe des SASL Frameworks (Simple Authentication and Security Layer) in der Anwendungsschicht implementiert.

Es existieren verschiedene SASL-Bibliotheken, die mit dem Programm selbst gelinkt werden, um die gewünschten Authentifizierungs-Methoden bereitzustellen. Postfix wird häufig mit der Cyrus-SASL-Bibliothek betrieben. Im Zusammenspiel zwischen dieser Bibliothek und Postfix hat sich leider ein Programmierfehler eingeschlichen, wie CVE-2011-1720 beschreibt.

Das Problem hängt mit dem Verarbeiten von SASL-Handles zusammen. Postfix erzeugt zunächst für jede SMTP-Session ein eigenes SASL-Handle. Das Handle wird erst dann wieder freigegeben, wenn die SMTP-Verbindung geschlossen wird. Außerdem sollte der Server sicherstellen, dass er ein neues Handle für jede Client-AUTH-Anfrage verwendet.

Wird die Client-Authentifikation abgebrochen, kann es aber zur Wiederverwendung des alten Handle kommen. Da jedes SASL-Handle aber speziell für eine Authentifikations-Methode zugeschnitten ist, kann es bei einer späteren Wiederverwendung dieses Handles zu einem Heap-Overflow kommen, weil die Datenstrukturen sich unterscheiden. Das führt zum Absturz des Servers mit einem Segmentation Fault (Signal 11). Die entsprechende Client-Server-Kommunikation könnte so aussehen (C=Client, S=Server):

S: 220 server.example.com ESMTP
C: EHLO client.example.com
S: 250-server.example.com
S: [weitere Ausgaben]
S: 250-AUTH DIGEST-MD5 LOGIN PLAIN CRAM-MD5
S: 250-AUTH=DIGEST-MD5 LOGIN PLAIN CRAM-MD5
S: [weitere Ausgaben]
C: AUTH CRAM-MD5
S: 334 PDg5ODE0OTI3MS4xMDQyMTg1OUBzZXJ2ZXIuZXhhbXBsZS5jb20+Cg==
C: *
S: 501 5.7.0 Authentication aborted
C: AUTH DIGEST-MD5
Connection closed by foreign host.

Hier baut der Angreifer zunächst eine SMTP-Verbindung zu "server.example.com" auf. Nach dem "EHLO" des Clients zeigt der Server an, dass er neben den nicht anfälligen LOGIN- und PLAIN-Protokollen auch DIGEST-MD5 und CRAM-MD5 versteht. Damit kann der Angreifer nun eine Attacke gegen dieses System durchführen. Dazu verlangt er zunächst eine CRAM-MD5-Authentifikation via AUTH CRAM-MD5, die von der Cyrus-SASL-Bibliothek bereitgestellt wird. Diese Authentifikation bricht er jedoch direkt via "*" ab, um dann eine neue Methode (DIGEST-MD5) zu verlangen. Da diese nun mit dem selben SASL-Handle verarbeitet wird, kommt es zu dem Heap-Overflow, und der Server stürzt ab. Den oben gezeigten Test kann man einfach via Telnet auf Port 25 (ältere Server) oder Port 587 (neuere Server) durchführen.

Der dedizierte Port 587 für MSAs (Mail Submission Agents) wurde erst 1998 eingeführt. Vorher ging sowohl MTA- (Mail Transfer Agents) als auch MSA-Verkehr immer über den TCP/IP-Port 25.

Betroffen von dieser Sicherheitslücke sind die Postfix-Versionen vor 2.5.13, 2.6.10, 2.7.4 und 2.8.3, die die Cyrus-SASL-Bibliothek für Nicht-PLAIN/LOGIN-Authentifizierung verwenden.

comments powered by Disqus

Stellenmarkt

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