IPBUF安全漏洞报告
English
CVE-2026-33555 CVSS 4.0 中危

CVE-2026-33555: HAProxy HTTP/3请求走私漏洞

披露日期: 2026-04-13

漏洞信息

漏洞编号
CVE-2026-33555
漏洞类型
HTTP请求走私
CVSS评分
4.0 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
HAProxy

相关标签

HTTP请求走私HAProxyHTTP/3CWE-444请求走私

漏洞概述

HAProxy在3.3.6版本之前存在一个HTTP/3解析器漏洞。当流通过带有空负载的帧关闭时,解析器未能正确验证接收到的正文长度与此前通告的Content-Length是否一致。这种验证缺失会导致与后端服务器之间的状态不同步,攻击者可利用此缺陷发起请求走私攻击,绕过安全控制。受影响的版本最早追溯至2.6,建议管理员立即升级至最新版本以修补该安全隐患。

技术细节

该漏洞根源于HAProxy HTTP/3解析器在处理流关闭逻辑时的缺陷。具体而言,当HTTP/3流通过一个没有负载的帧(如FIN帧)终止时,解析器未强制执行严格的长度校验机制。正常情况下,服务器应确保已接收的数据量与HTTP头中声明的Content-Length值完全匹配。在攻击场景中,恶意客户端可以发送一个经过精心构造的HTTP/3请求,其中包含特定的Content-Length头部,但随后通过发送空负载帧提前关闭流。由于HAProxy未检测到长度不匹配,它可能会将当前请求的剩余部分与下一个请求合并,或者导致后端服务器对请求边界产生错误的解析。这种不同步使得攻击者能够“走私”请求给后端,可能导致缓存投毒、绕过WAF防护或获取未授权的敏感信息响应。

攻击链分析

STEP 1
侦察
攻击者识别目标服务器使用的是受影响版本的HAProxy(2.6至3.3.5)并启用了HTTP/3。
STEP 2
构造恶意请求
攻击者构造一个特殊的HTTP/3请求,设置Content-Length为一个非零值(例如100),但在发送数据时只发送一个带有空负载和FIN标志的帧。
STEP 3
触发解析错误
HAProxy接收到带有FIN标志的空帧后关闭流,且未检查Content-Length与实际接收长度的差异,导致其认为请求已结束。
STEP 4
请求走私
后端服务器可能因为解析逻辑不同,仍等待剩余数据或处理下一个请求,导致请求边界混淆,进而实现走私攻击。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import socket import ssl # This is a conceptual PoC for HTTP/3 Request Smuggling in HAProxy. # Actual exploitation requires a QUIC library implementation (e.g., aioquic). def send_smuggling_request(target_host, target_port): # In a real scenario, construct a QUIC stream with: # 1. A HEADERS frame containing "Content-Length: 100" # 2. A DATA frame with 0 bytes payload but the FIN stream flag set. # 3. This causes HAProxy to expect 100 bytes but receive 0, triggering desync. print(f"[*] Targeting {target_host}:{target_port}") print("[*] Sending malicious HTTP/3 stream with CL mismatch...") # Pseudo-code for the packet logic headers = { ":method": "POST", ":path": "/", "content-length": "100" # Announce length } body_payload = b"" # Empty payload fin_flag = True # Close stream immediately # The vulnerability is that HAProxy does not check: len(body_payload) == headers['content-length'] # when fin_flag is True. print("[+] Request sent. Backend desynchronization possible.") if __name__ == "__main__": send_smuggling_request("example.com", 443)

影响范围

HAProxy 2.6
HAProxy 2.7
HAProxy 2.8
HAProxy 2.9
HAProxy 3.0
HAProxy 3.1
HAProxy 3.2
HAProxy 3.3.0 - 3.3.5

防御指南

临时缓解措施
如果无法立即升级到修复版本,建议在HAProxy配置中临时禁用HTTP/3(QUIC)协议支持,强制客户端使用HTTP/2或HTTP/1.1进行通信,直到应用安全补丁。

参考链接

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