Open Source im professionellen Einsatz

[Update] Cyrus IMAP STARTTLS: Man-in-the-Middle Attacke trotz TLS

Der Cyrus Mailserver, ursprünglich entwickelt von der Carnegie Mellon Universität, ist ein verbreiteter Server zum Abwickeln von POP3 und IMAP. Einige Linux-Distributionen haben erst kürzlich Updates für eine schon einige Wochen alte Sicherheitslücke (CVE-2011-1926) herausgegeben.

IMAP (Internet Message Access Protocol) ist ein Protokoll der Anwendungsebene im TCP/IP-Protokollstapel zum Abrufen von E-Mails und hat vielerorts POP3 abgelöst. Die aktuelle Spezifikation für IMAP4rev1 findet sich in RFC 3501. IMAP läuft über Port 143, und die SSL-verschlüsselte Variante IMAPS über Port 993, während POP3 (Post Office Protocol) standardmäßig Port 110 verwendet.

Zum Absichern von IMAP-Verbindungen stehen verschiedene Methoden bereit: STARTTLS oder IMAPS. IMAPS setzt schon bei der ersten Netzwerkverbindung zum Server via SSL ein. Darum benützt es auch einen gesonderten Port. Die SSL-Schicht ist für das IMAP-Protokoll transparent, was den Vorteil hat, dass am Protokoll selbst nichts verändert werden muss. STARTTLS andererseits setzt zunächst auf eine unverschlüsselte Port-143-Verbindung und leitet während der Verbindung mit Hilfe des STARTTLS-Befehls eine verschlüsselte TLS-Verbindung ein.

Und genau im Prozess dieser Initialisierung via STARTTLS findet sich die Schwachstelle im Cyrus-Mailserver. Ursache ist ein Problem mit dem internen Kommunikationspuffer für vom Client empfangene Befehle. Dieser Puffer sammelt zunächst die Client-IMAP-Befehle, die der Server anschließend abarbeitet. Auch der STARTTLS-Befehl wird dort abgelegt. Sobald der Server diesen Befehl abarbeitet, schaltet er auf verschlüsselte Kommunikation um und arbeitet die weiteren im Puffer befindlichen Befehle ab.

Das klingt prinzipiell sicher, ist aber anfällig für Man-in-the-Middle(MITM)-Attacken, bei denen ein Angreifer Daten in die unverschlüsselte Verbindung einschleust. So kann er kann beliebige IMAP-Befehle nach dem STARTTLS-Befehle senden, die der Server ausführt. Obwohl sich der Benutzer durch die Verschlüsselung via TLS sicher fühlt, kann er also dennoch Opfer einer solchen Attacke sein. Ein Angreifer könnte beispielsweise die Mailbox löschen oder Mails lesen.

Der Patch für diese Schwachstelle ist relativ einfach: Cyrus muss den Puffer nach dem Empfang des STARTLS-Befehls einfach löschen. Dies wurde im Code so implementiert:

/* XXX  discard any input pipelined after STARTTLS */
prot_flush(imapd_in);

Dabei ist "prot_flush()" eine neue Funktion, die das Löschen (Flush) des Puffers nach dem Abarbeiten des STARTTLS-Kommandos übernimmt:

 /*
+ * If 's' is an input stream, discard any pending/buffered data.  Otherwise,
  * Write out any buffered data in the stream 's'
  */
 int prot_flush(struct protstream *s) 
 {
+    if (!s->write) {
+ int c, save_dontblock = s->dontblock;
+
+ /* Set stream to nonblocking mode */
+ if (!save_dontblock) nonblock(s->fd, (s->dontblock = 1));
+
+ /* Ingest any pending input */
+ while ((c = prot_fill(s)) != EOF);
+
+ /* Reset stream to previous blocking mode */
+ if (!save_dontblock) nonblock(s->fd, (s->dontblock = 0));
+
+ /* Discard any buffered input */
+ s->cnt = 0;
+ s->can_unget = 0;
+
+ return 0;
+    }
+
     return prot_flush_internal(s, 1);
 }

Wie der Kommentar im Quelltext andeutet, werden für Inputstreams die Daten im Puffer gelöscht. Das entfernt
auch mögliche Befehle des MITM-Angreifers nach dem STARTTLS-Befehl aus dem Puffer.

Betroffen sind die Versionen vor 2.4.7. In der aktuelle Version 2.4.8 ist die ebenfalls Schwachstelle behoben.

Mehr über MITM-Angriffe

Der erste Schritt bei einer "Man in the Middle"-Attacke besteht darin, sich zwischen die Kommunikationspartner zu schalten. Beliebt ist hierfür ARP-Spoofing/Poisoning, um den Verkehr zwischen Client und Server über den Rechner des Angreifers umzuleiten. In IPv4-Netzwerken regelt ARP (Address Resolution Protocol) die Übersetzung von IP-Adressen zu Hardwareadressen, in IPv6 wird diese Aufgabe vom Neighbor Discovery Protocol (NDP) übernommen. Betriebssysteme besitzen für IPv4-Netzwerke eine interne ARP-Lookup-Tabelle. Mit ARP-Spoofing-Tools kann der Angreifer diese Tabelle modifizieren und so den gesamten Datenverkehr über seinen eigenen Rechner umleiten. Damit lässt sich der Datenverkehr fälschen oder auch passiv Abhören. Mit ARP-Spoofing funktioniert dieses Abhören sogar in geswitchten Netzwerken, wohingegen normales Abhören, beispielsweise mit Tcpdump, nur ungeswitchte Daten erfasst. Weitere MITM-Angriffsarten sind DNS-Cache Poisoning, wo die DNS-IP-Adressenauflösung modifiziert wird. Wer mehr über MITM-Attacken erfahren möchte kann sich beispielsweise das Tool Ettercap genauer ansehen.

comments powered by Disqus

Stellenmarkt

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