HTTP Connection Request Smuggling

Reading time: 7 minutes

tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE) 学习和实践 Azure 黑客技术:HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks

本页面总结、扩展和更新 PortSwigger 关于 Browser-Powered Desync Attacks 的开创性研究以及后续对 HTTP/2 连接状态滥用的工作。它专注于漏洞,其中 每个 TCP/TLS 连接仅确定一次源,使攻击者能够在通道建立后“走私”请求到不同的内部主机。

Connection-State Attacks

First-request Validation

在路由请求时,反向代理可能依赖 Host(或 HTTP/2 中的 :authority)头来确定目标后端服务器,通常依赖于允许访问的主机白名单。然而,许多代理存在一个漏洞,即白名单 仅在连接中的第一个请求上强制执行。因此,攻击者可以通过首先发送一个允许的请求,然后重用相同的底层连接来访问内部虚拟主机:

http
GET / HTTP/1.1
Host: allowed-external-host.example

GET /admin HTTP/1.1
Host: internal-only.example

First-request Routing

许多 HTTP/1.1 反向代理仅基于它们转发的第一个请求将出站连接映射到后端池。所有通过相同前端套接字发送的后续请求都会被静默重用,无论它们的 Host 头是什么。这可以与经典的 Host header attacks 结合使用,例如密码重置中毒或 web cache poisoning,以获得类似 SSRF 的访问权限到其他虚拟主机:

http
GET / HTTP/1.1
Host: public.example

POST /pwreset HTTP/1.1
Host: private.internal

tip

在 Burp Suite Professional ≥2022.10 中,您可以启用 HTTP Request Smuggler → Connection-state probe 来自动检测这些弱点。


2023-2025 新增 – HTTP/2/3 连接合并滥用

现代浏览器通常会在证书、ALPN 协议和 IP 地址匹配时,将 HTTP/2 和 HTTP/3 请求合并到单个 TLS 连接上。如果前端仅授权第一个请求,则每个后续合并请求都会继承该授权 – 即使 Host/:authority 发生变化

利用场景

  1. 攻击者控制 evil.com,该域名解析到与目标 internal.company 相同的 CDN 边缘节点。
  2. 受害者的浏览器已经与 evil.com 建立了一个开放的 HTTP/2 连接。
  3. 攻击者在其页面中嵌入一个隐藏的 <img src="https://internal.company/…">
  4. 由于连接参数匹配,浏览器重用 现有 TLS 连接并复用对 internal.company 的请求。
  5. 如果 CDN/路由器仅验证第一个请求,则内部主机会暴露。

Chrome/Edge/Firefox 的 PoC 可在 James Kettle 的演讲 “HTTP/2: The Sequel is Always Worse”(Black Hat USA 2023)中找到。

工具

  • Burp Suite 2023.12 引入了一个实验性的 HTTP/2 Smuggler 插入点,自动尝试合并和 TE/CL 技术。
  • smuggleFuzz (https://github.com/microsoft/smugglefuzz) – 一个在 2024 年发布的 Python 框架,用于通过 HTTP/2 和 HTTP/3 对前端/后端不同步向量进行暴力破解,包括连接状态排列。

缓解措施

  • 始终在每个请求上 重新验证 Host/:authority,而不仅仅是在连接创建时。
  • 在 CDN/负载均衡层禁用或严格限制 源合并(例如,在 NGINX 中关闭 http2_origin_cn)。
  • 为内部和外部主机名部署单独的证书或 IP 地址,以便浏览器无法合法地合并它们。
  • 在每个请求后尽可能使用 connection: closeproxy_next_upstream

真实案例 (2022-2025)

年份组件CVE备注
2022AWS 应用负载均衡器Host 头仅在第一个请求时验证;通过修补规则引擎修复(由 SecurityLabs 披露)。
2023Apache Traffic Server < 9.2.2CVE-2023-39852CONFIG proxy.config.http.parent_proxy_routing_enable 设置时,允许通过 HTTP/2 连接重用进行请求走私。
2024Envoy Proxy < 1.29.0CVE-2024-2470在第一个流之后对 :authority 的不当验证使得在共享网格中启用了跨租户请求走私。

检测备忘单

  1. 同一 TCP/TLS 连接中发送两个具有不同 Host 或 :authority 头的请求。
  2. 观察第二个响应是否来自第一个主机(安全)或第二个主机(易受攻击)。
  3. 在 Burp 中:Repeat → keep-alive → Send → Follow
  4. 测试 HTTP/2 时,为良性主机打开一个 专用 流(ID 1),然后复用第二个流(ID 3)到内部主机并查找回复。

参考文献

  • PortSwigger Research – HTTP/2: The Sequel is Always Worse(Black Hat USA 2023)
  • Envoy 安全通告 CVE-2024-2470 – 不当的权限验证

tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE) 学习和实践 Azure 黑客技术:HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks