单包攻击:将远程竞态条件转化为“本地”攻击
单包攻击是一种触发Web竞态条件的新技术。它通过单个TCP包完成多个HTTP/2请求,有效消除网络抖动,使请求几乎同时被处理。这使得远程竞态条件的利用变得与本地环境同样简单。
过去两个月里,社区使用单包攻击在发现竞态条件方面取得显著成功,甚至有人用它攻击了我自己搭建的网站。许多人询问该技术是否适用于其他网络协议,本文将探讨HTTP/3、HTTP/1.1、WebSocket和SMTP等协议的应用可能性,并提供适配指南。
技术核心原理
网络抖动如何隐藏竞态条件
触发竞态条件通常需要网站在极短时间内接收并处理多个请求。由于网络抖动(数据包传输中不可预测的延迟),同时发送的请求无法保证同时到达目标服务器,这使得远程系统的竞态条件检测比本地系统困难得多。
单包攻击的解决方案
单包攻击通过结合“末字节同步”和“无时间戳定时攻击”技术来解决网络抖动:
- 在单个HTTP/2连接上发起所有请求,保留每个请求的微小片段以避免服务器立即处理
- 等待短暂时间让数据包到达目标服务器
- 同时发送所有请求的最终片段
操作系统会将最终片段组合成单个TCP包
这种技术可轻松扩展到20-30个请求,且实现异常简单。Burp Suite Repeater的标签组功能和开源扩展Turbo Intruder均已支持该技术。
多协议适配分析
HTTP/3
HTTP/3基于QUIC和UDP构建,需通过单个UDP数据包完成多个请求。虽然HTTP/3支持多路复用,但UDP包大小限制(约1500字节)带来挑战。实际测试表明TCP也存在类似软限制,因此HTTP/3支持单包攻击但现阶段开发价值有限。
HTTP/1.1
虽然可通过流水线技术将多个请求塞入单个TCP包,但RFC要求服务器按请求顺序返回响应(队头阻塞问题),导致请求仍被顺序处理。建议使用带末字节同步的并行连接进行竞态条件攻击。
SMTP
通过RFC 2920定义的流水线扩展可实现多消息单包发送,但同样受响应顺序限制,实现并行处理的可能性极低。
WebSocket
由于没有“响应”概念,服务器可并发处理单连接上的多消息。虽然消息片段不能交错发送(RFC6455限制),但RFC 8441提出的基于HTTP/2流嵌套WebSocket连接的方案可能实现完整的单包攻击。
技术实现关键
- 多路复用:单连接上支持并发消息的能力是核心
- 交错片段支持:显著增加单包可容纳消息数量
- 底层协议最大包大小:直接影响攻击规模
分层聚合策略
除TCP包聚合外,还可将最终请求片段放置在单个TLS记录中。由于TLS位于TCP之上,即使通过多个TCP包传递记录仍可工作,这可能使攻击通过SOCKS代理等非解密隧道可靠工作,但需要定制TLS实现。
结论
当前大量HTTP/2网站的竞态条件漏洞从难以检测转变为可轻松利用。通过RFC基础分析评估了其他协议对单包攻击变体的支持性,下一步需创建概念验证工具并测试主流服务器实现的兼容性。新工具可能暴露更多WebSocket漏洞和需要30+同时请求的HTTP漏洞。
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
公众号二维码