利用TRACE方法简化异步攻击:HTTP请求走私与缓存投毒技术解析

本文揭示了如何通过古老的TRACE方法结合HTTP/2异步攻击漏洞,实现从请求走私到缓存投毒的完整攻击链。研究者利用TRACE响应反射特性构造恶意脚本,突破连接隔离限制,最终通过响应拼接技术实现任意响应注入。

利用TRACE方法简化异步攻击

你是否遇到过因复杂约束条件而难以利用的HTTP异步漏洞?本文将探讨一种新型利用技术,通过TRACE这个古老却广泛支持的HTTP方法完全攻陷Web应用。

漏洞发现过程

研究者在漏洞赏金项目中发现了HTTP/2异步漏洞(即HTTP请求走私),该漏洞允许在头部值中注入换行符,从而走私传输编码头来分割后端请求。提交漏洞后却收到回复:“仅能走私请求并不构成漏洞本身”。

TRACE方法的妙用

当传统攻击路径受阻时,研究者注意到后端服务器响应TRACE请求。根据HTTP RFC标准,TRACE方法会原样返回接收到的请求消息,这成为突破的关键:

  1. 请求反射:TRACE响应会完整反射后端接收的请求头和协议变化
  2. 漏洞诊断:可观察代理修改的头部(如X-Forwarded-For)和协议降级情况
  3. 攻击构造:结合响应走私和缓存投毒实现完整攻击链

响应走私技术回顾

通过走私HEAD请求产生仅含头部的响应,利用代理对Content-Length的错误处理实现响应拼接:

1
2
3
4
5
6
7
8
9
GET / HTTP/1.1
Host: vulnerable.com
Content-Length: 108

HEAD / HTTP/1.1
Host: vulnerable.com

GET /reflect?value=payload HTTP/1.1
Host: vulnerable.com

TRACE攻击实战

当应用缺乏有效反射端点时,利用TRACE构造恶意脚本:

1
2
3
4
5
6
HEAD / HTTP/1.1
Host: vulnerable.com

TRACE / HTTP/1.1
Host: vulnerable.com
X-Malicious: <script>alert(1)</script>

产生的TRACE响应会被拼接进后续响应,实现XSS攻击。即使代理禁止TRACE方法,通过请求走私仍可绕过限制。

缓存投毒升级攻击

当后端连接隔离时,通过两种技术扩大影响:

  1. 客户端异步攻击:需要HTTP/2注入支持
  2. Web缓存投毒:精心构造包含Cache-Control头的响应

更高级的响应分割技术允许创建完全任意的缓存响应:

1
2
3
4
5
6
7
8
POST /reflect HTTP/1.1
Host: vulnerable.com

PADDING_XXXXXXXXXXXXXXXXXHTTP/1.1 200 Ok\r\n
Cache-Control: max-age=31536000\r\n
Content-Type: text/html\r\n
\r\n
<script>alert(1)</script>

技术限制与绕过

当TRACE限制请求体时:

  • 使用分块编码传输
  • 通过额外响应追加载荷
  • 构造重定向响应实施钓鱼攻击

安全启示

这项研究证明:

  1. 被遗忘的TRACE方法仍构成重大威胁
  2. 异步攻击技术仍在持续进化
  3. 现代防御体系可能被古老方法突破
  4. 完整的漏洞利用需要创造性思维组合多种技术

该案例再次警示我们:安全防护必须全面覆盖所有HTTP方法,及时禁用调试功能,并严格校验请求/响应边界。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计