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
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
本页面总结、扩展和更新 PortSwigger 关于 Browser-Powered Desync Attacks 的开创性研究以及后续对 HTTP/2 连接状态滥用的工作。它专注于漏洞,其中 每个 TCP/TLS 连接仅确定一次源,使攻击者能够在通道建立后“走私”请求到不同的内部主机。
Connection-State Attacks
First-request Validation
在路由请求时,反向代理可能依赖 Host(或 HTTP/2 中的 :authority)头来确定目标后端服务器,通常依赖于允许访问的主机白名单。然而,许多代理存在一个漏洞,即白名单 仅在连接中的第一个请求上强制执行。因此,攻击者可以通过首先发送一个允许的请求,然后重用相同的底层连接来访问内部虚拟主机:
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 的访问权限到其他虚拟主机:
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 发生变化。
利用场景
- 攻击者控制
evil.com
,该域名解析到与目标internal.company
相同的 CDN 边缘节点。 - 受害者的浏览器已经与
evil.com
建立了一个开放的 HTTP/2 连接。 - 攻击者在其页面中嵌入一个隐藏的
<img src="https://internal.company/…">
。 - 由于连接参数匹配,浏览器重用 现有 TLS 连接并复用对
internal.company
的请求。 - 如果 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: close 或
proxy_next_upstream
。
真实案例 (2022-2025)
年份 | 组件 | CVE | 备注 |
---|---|---|---|
2022 | AWS 应用负载均衡器 | – | Host 头仅在第一个请求时验证;通过修补规则引擎修复(由 SecurityLabs 披露)。 |
2023 | Apache Traffic Server < 9.2.2 | CVE-2023-39852 | 当 CONFIG proxy.config.http.parent_proxy_routing_enable 设置时,允许通过 HTTP/2 连接重用进行请求走私。 |
2024 | Envoy Proxy < 1.29.0 | CVE-2024-2470 | 在第一个流之后对 :authority 的不当验证使得在共享网格中启用了跨租户请求走私。 |
检测备忘单
- 在 同一 TCP/TLS 连接中发送两个具有不同 Host 或 :authority 头的请求。
- 观察第二个响应是否来自第一个主机(安全)或第二个主机(易受攻击)。
- 在 Burp 中:
Repeat → keep-alive → Send → Follow
。 - 测试 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
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。