IPBUF安全漏洞报告
English
CVE-2026-41016 CVSS 5.9 中危

CVE-2026-41016 Apache Airflow SMTP证书验证缺失

披露日期: 2026-04-30

漏洞信息

漏洞编号
CVE-2026-41016
漏洞类型
中间人攻击
CVSS评分
5.9 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Apache Airflow (apache-airflow-providers-smtp)

相关标签

Apache AirflowSMTPMITM证书验证缺失凭证窃取

漏洞概述

Apache Airflow 的 SMTP provider `SmtpHook` 在调用 Python 的 `smtplib.SMTP.starttls()` 时未提供 SSL 上下文,导致未对 TLS 升级进行证书验证。位于 Airflow worker 与 SMTP 服务器之间的攻击者可利用中间人攻击,通过提供自签名证书完成 STARTTLS 升级,进而截获后续 `login()` 调用中发送的 SMTP 凭据。建议用户升级至包含修复的 `apache-airflow-providers-smtp` 版本。

技术细节

该漏洞源于 Apache Airflow 的 SMTP provider 在实现时存在逻辑缺陷。当 `SmtpHook` 尝试建立加密连接时,它直接调用了 Python 标准库 `smtplib` 中的 `starttls()` 方法,且未传入 `ssl.create_default_context()` 或自定义的 SSL 上下文参数。这导致底层的 TLS 握手过程默认不验证服务器的证书链。在正常的 TLS 流程中,客户端应验证服务器证书的合法性(如颁发机构、域名匹配等),但在该漏洞场景下,客户端会接受任何证书。因此,位于网络路径上的攻击者可以拦截流量,伪造一个自签名证书并扮演 SMTP 服务器。由于客户端不验证证书,连接建立成功,Airflow Worker 随即发送明文的用户名和密码,导致凭据泄露。

攻击链分析

STEP 1
步骤1:网络侦察
攻击者定位目标网络,确认 Apache Airflow Worker 与 SMTP 服务器的通信路径,并确立能够进行中间人攻击的位置(如同网段ARP欺骗)。
STEP 2
步骤2:流量劫持
攻击者利用ARP欺骗、DNS投毒等技术,将Airflow Worker发往合法SMTP服务器的流量重定向到攻击者控制的恶意SMTP服务器。
STEP 3
步骤3:建立伪造连接
Airflow Worker 尝试连接SMTP服务器并发送 STARTTLS 指令。攻击者的服务器响应并使用自签名证书进行 TLS 握手。
STEP 4
步骤4:绕过证书验证
由于漏洞代码中 `starttls()` 未设置 SSL 上下文进行证书验证,Airflow Worker 接受攻击者的自签名证书,完成加密通道建立。
STEP 5
步骤5:凭据窃取
Airflow Worker 在建立的加密通道内调用 `login()` 发送用户名和密码。攻击者的服务器接收并记录这些凭据。
STEP 6
步骤6:维持或转发
攻击者可选择将请求转发给真实服务器以维持连接正常,避免立即引起警觉,随后利用窃取的凭据进行恶意操作。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import smtplib import ssl # This script demonstrates the vulnerability: a client that does not verify the server certificate. # An attacker can set up a rogue SMTP server with a self-signed certificate to capture credentials. def vulnerable_smtp_login(server_host, server_port, username, password): try: # Connect to the server server = smtplib.SMTP(server_host, server_port) server.ehlo() # VULNERABILITY: Calling starttls() without an SSL context. # This disables certificate verification. server.starttls() server.ehlo() # Login credentials are sent over the "encrypted" connection (to the attacker) server.login(username, password) print("[+] Login successful (Credentials sent potentially to MITM)") server.quit() except Exception as e: print(f"[-] Error: {e}") # Example usage (do not run with real credentials in a hostile environment) # vulnerable_smtp_login('smtp.attacker-controlled-domain.com', 587, 'user', 'pass')

影响范围

apache-airflow-providers-smtp < 修复版本

防御指南

临时缓解措施
在无法立即升级补丁的情况下,应确保 Airflow 与 SMTP 服务器之间的网络通信链路是绝对可信的(例如使用受控的私有网络或专线),避免流量经过不可控的公共网络,从而降低被中间人攻击的风险。

参考链接

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