IPBUF安全漏洞报告
English
CVE-2026-40557 CVSS 4.8 中危

CVE-2026-40557 Apache Storm证书验证绕过漏洞

披露日期: 2026-04-27

漏洞信息

漏洞编号
CVE-2026-40557
漏洞类型
证书验证绕过
CVSS评分
4.8 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Apache Storm

相关标签

Apache Storm证书验证绕过中间人攻击CVE-2026-40557

漏洞概述

Apache Storm的Prometheus报告器组件存在证书验证不当漏洞。当管理员启用特定的跳过TLS验证配置时,该组件会全局设置JVM的默认SSL上下文。这导致不仅Prometheus连接跳过验证,Storm守护进程中所有后续的HTTPS连接(包括ZooKeeper、Thrift等)都会静默信任所有证书。攻击者可利用此漏洞拦截集群状态、拓扑数据和管理凭据,实施中间人攻击。

技术细节

该漏洞的根本原因在于Apache Storm的`PrometheusPreparableReporter`类在处理TLS配置时存在全局副作用。为了支持`storm.daemon.metrics.reporter.plugin.prometheus.skip_tls_validation`配置项,该类实现了一个名为`INSECURE_TRUST_MANAGER`的信任管理器,其`checkClientTrusted`和`checkServerTrusted`方法为空实现,意味着接受任何证书。最严重的问题在于`INSECURE_CONNECTION_FACTORY`中调用了`SSLContext.setDefault(sslContext)`。这个Java原生方法会修改整个JVM进程的默认SSL上下文,而不仅仅是针对Prometheus的连接。因此,当管理员启用该配置时,意图仅针对Prometheus PushGateway的TLS绕过会扩散到Storm守护进程的所有HTTPS通道,包括ZooKeeper、Thift、Netty和UI连接。攻击者利用此漏洞,可以在网络中通过提供自签名或恶意生成的证书,成功建立TLS连接并拦截集群通信,实施中间人攻击。

攻击链分析

STEP 1
配置触发
管理员在storm.yaml中启用storm.daemon.metrics.reporter.plugin.prometheus.skip_tls_validation配置,意图允许Prometheus PushGateway连接跳过TLS验证。
STEP 2
全局上下文篡改
Apache Storm启动时,PrometheusPreparableReporter类加载并调用SSLContext.setDefault(),将JVM全局默认SSL上下文替换为不安全的上下文(空实现的TrustManager)。
STEP 3
建立不安全连接
攻击者在网络中拦截Storm集群与其他组件(如ZooKeeper、Thrift服务)的通信流量。
STEP 4
中间人攻击
由于JVM默认接受所有证书,受害节点接受攻击者提供的自签名或伪造证书,建立加密连接。
STEP 5
数据窃取与篡改
攻击者解密拦截到的流量,获取集群状态、拓扑数据、Tuple数据及管理员凭据,并可篡改传输的数据。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import javax.net.ssl.*; import java.io.IOException; import java.net.URL; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; import java.security.cert.X509Certificate; // PoC simulating the vulnerable behavior in Apache Storm PrometheusPreparableReporter public class VulnerableSSLContext { public static void main(String[] args) throws NoSuchAlgorithmException, KeyManagementException, IOException { System.out.println("[+] Simulating CVE-2026-40557: Global SSL Context Downgrade"); // 1. Create an insecure TrustManager (matches INSECURE_TRUST_MANAGER) TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() { public X509Certificate[] getAcceptedIssuers() { return null; } public void checkClientTrusted(X509Certificate[] certs, String authType) { /* Empty/Vulnerable */ } public void checkServerTrusted(X509Certificate[] certs, String authType) { /* Empty/Vulnerable */ } } }; // 2. Initialize SSLContext SSLContext sslContext = SSLContext.getInstance("TLS"); sslContext.init(null, trustAllCerts, new java.security.SecureRandom()); // 3. VULNERABLE OPERATION: Setting the global default SSLContext // This is what PrometheusPreparableReporter does when skip_tls_validation is true SSLContext.setDefault(sslContext); System.out.println("[!] Global SSLContext has been set to INSECURE mode."); // 4. Proof of Concept: Opening a connection to any HTTPS site will now ignore certificate validation // (Simulating subsequent connections to ZooKeeper, Thrift, etc.) URL url = new URL("https://expired.badssl.com/"); // A site with invalid cert HttpsURLConnection conn = (HttpsURLConnection) url.openConnection(); conn.setRequestMethod("GET"); try { conn.connect(); System.out.println("[+] Connection successful! Certificate validation was bypassed globally."); System.out.println("[+] Response Code: " + conn.getResponseCode()); } catch (Exception e) { System.out.println("[-] Connection failed (should not happen if vulnerable)."); } } }

影响范围

Apache Storm 2.6.3 - 2.8.6

防御指南

临时缓解措施
建议用户立即升级Apache Storm至2.8.7版本。若无法立即升级,请务必删除配置文件中的`storm.daemon.metrics.reporter.plugin.prometheus.skip_tls_validation: true`设置,并配置包含PushGateway证书的有效信任库,以确保仅对特定连接进行必要的TLS配置,防止全局安全上下文被篡改。

参考链接

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