Denial-of-Service-Schwäche in Fetchmail mit STARTTLS

Fetchmail ist ein Client-Programm, das E-Mails von POP3-, IMAP-, ETRN- (Extended Turn) oder ODMR- (On-Demand Mail Relay) -Servern herunterlädt. Dabei unterstützt die Software sichere Verbindungen per SSL/TLS durch Einsatz der OpenSSL-Bibliothek. Eine in diesem Zusammenhang aufgetretene Sicherheitlücke ermöglicht allerdings Denial-of-Service Attacken gegen Fetchmail.

Neben IMAP verwenden auch andere Protokolle das Schlüsselwort “STARTTLS” zum Einleiten von gesicherten Verbindungen mittels TLS (Transport Layer Security). So lässt sich etwa eine LDAP-Verbindung via STARTTLS/TLS absichern. Auch POP3 (Post Office Protocol) unterstützt verschlüsselte Verbindungen via POP3S, wobei das Schlüsselwort hier “STLS” statt “STARTTLS” lautet.

Fetchmail unterstützt STLS für POP3 seit Version 5.9.9, und seit Version 6.0.0 auch STARTTLS für IMAP-Dienste. Allerdings haben die Entwickler vergessen, einen geeigneten Timeout-Mechanismus einzubauen. Das kann zum Stillstand des Fetchmail-Clients führen, wenn ein böswilliger Server einfach nicht auf eine STARTTLS- oder STLS-Anfrage reagiert. Durch den fehlenden Timeout-Mechanismus verharrt der Fetchmail-Client im Wartezustand. Zur Attacke muss der Angreifer allerdings im Besitz eines Mailservers sein, bei dem sich der Fetchmail-Client anmeldet.

Der Patch für diese Sicherheitslücke besteht einfach darin, einen Timeout-Schutz in die Quelltext-Dateien “imap.c” und “pop3.c” einzubauen. Aus der dortigen alten If-Abfrage:

if (gen_transact(sock, "STARTTLS") == PS_SUCCESS && SSLOpen(sock, ctl->sslcert, ctl->sslkey, "tls1", ctl->sslcertck, ctl->sslcertfile, ctl->sslcertpath, ctl->sslfingerprint, commonname ctl->server.pollname, &ctl->remotename) != -1)

wird dann:

if (gen_transact(sock, "STARTTLS") == PS_SUCCESS && (set_timeout(mytimeout), SSLOpen(sock, ctl->sslcert, ctl->sslkey, "tls1", ctl->sslcertck, ctl->sslcertfile, ctl->sslcertpath, ctl->sslfingerprint, commonname, ctl->server.pollname, &ctl->remotename)) != -1)

Hier ist der Timeout-Mechanismus durch die Anweisung “set_timeout(mytimeout)” realisiert.

Betroffen sind die Fetchmail-Versionen 5.9.9 bis 6.3.19.

Wer ein Update seiner Fetchmail-Installation scheut, kann auf den von dieser Schwachstelle nicht betroffenen SSL-Modus wechseln. Dazu müssen die SSL-, SSLproto-, und SSL3-Optionen in der Rc-Datei aktiviert ein. Allerdings sollte man dann bedenken, dass sich dadurch die TCP/IP-Portnummer des Dienstes ändert, was bei Firewall-Regeln und Ähnlichem zu berücksichtigen ist.

Nach oben