CVE-2020-17519 & CVE-2020-17518 分析
字数 1194 2025-08-18 17:33:30
Apache Flink 目录遍历漏洞分析 (CVE-2020-17518 & CVE-2020-17519)
漏洞概述
Apache Flink 是一个开源的流处理框架,在1.11.2及之前版本中存在两个目录遍历漏洞:
- CVE-2020-17519:通过REST API的/jobmanager/logs/端点实现目录遍历
- CVE-2020-17518:通过文件上传功能实现目录遍历
这两个漏洞都允许攻击者读取服务器上的任意文件,可能导致敏感信息泄露。
漏洞分析
CVE-2020-17519 分析
漏洞位置
漏洞存在于Flink的REST API中,具体在org.apache.flink.runtime.webmonitor.WebMonitorEndpoint类中处理/jobmanager/logs/路由的部分。
漏洞原理
- 攻击者可以向
/jobmanager/logs/端点发送请求,并在路径参数中注入目录遍历序列(如../) - 服务端未对用户输入的路径参数进行充分验证
- 攻击者可以构造特殊请求读取服务器上的任意文件
修复方式
修复提交:b561010b0ee741543c3953306037f00d7a9f0801
修复代码添加了new File().getName()调用,确保只获取路径名的最后一部分,防止目录遍历。
CVE-2020-17518 分析
漏洞位置
漏洞存在于文件上传功能中,通过REST API的文件上传端点。
漏洞原理
- 攻击者可以通过文件上传功能上传文件
- 上传时可以在文件名中注入目录遍历序列(如
../) - 服务端未对上传的文件名进行充分验证
- 攻击者可以将文件写入服务器上的任意可写目录
修复方式
修复提交:a5264a6f41524afe8ceadf1d8ddc8c80f323ebc4
修复方式与CVE-2020-17519类似,确保只处理文件名部分,不处理路径。
环境搭建
- 使用Docker搭建漏洞环境:
docker run -it -p 8081:8081 morgel/flink:1.11.2-bin-scala_2.12-java_11 /bin/bash
- 启动Flink集群:
./bin/start-cluster.sh
漏洞验证
CVE-2020-17519验证
构造包含目录遍历序列的请求访问/jobmanager/logs/端点,尝试读取系统文件如/etc/passwd。
示例请求:
GET /jobmanager/logs/../../../../etc/passwd HTTP/1.1
Host: target:8081
CVE-2020-17518验证
通过文件上传功能,在文件名中包含目录遍历序列,尝试将文件写入系统目录。
示例请求:
POST /upload HTTP/1.1
Host: target:8081
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="file"; filename="../../../../tmp/evil.txt"
Content-Type: text/plain
恶意文件内容
------WebKitFormBoundary7MA4YWxkTrZu0gW--
影响版本
Apache Flink 1.11.2及之前版本
修复建议
- 升级到Apache Flink 1.11.3或更高版本
- 如果无法立即升级,可以限制对Flink REST API的访问
总结
这两个漏洞都是由于未对用户输入进行充分验证导致的目录遍历问题,攻击者可以利用这些漏洞读取或写入服务器上的任意文件。开发人员在处理用户提供的文件路径时,应当始终进行规范化并验证路径是否在预期范围内。