HTTP 请求走私漏洞详解:CL.TE、TE.CL 与 TE.TE 攻击手法

一、什么是 HTTP 请求走私

HTTP 请求走私(HTTP Request Smuggling)是一种利用前端代理(如负载均衡器、CDN、反向代理)与后端服务器对 HTTP 请求边界解析差异发起攻击的技术。攻击者通过精心构造的请求,使前后端对“一个请求在哪里结束、下一个请求从哪里开始”产生不同理解,从而将恶意请求“走私”到后端服务器,影响后续用户的请求处理。

这类漏洞的本质在于:HTTP/1.1 规范允许使用两种方式描述请求体长度——Content-Length(CL)和 Transfer-Encoding(TE)。当两者同时出现或被代理篡改时,不同实现可能做出不一致的判断,攻击窗口由此打开。

二、核心机制:CL 与 TE

  • Content-Length:以字节为单位明确指定消息体长度。
  • Transfer-Encoding: chunked:消息体以分块方式传输,每块前有十六进制长度,最后以 0 长度块结束。

RFC 7230 规定:如果同时存在 Transfer-EncodingContent-Length,必须忽略 Content-Length,并优先处理 Transfer-Encoding。但现实中的代理和服务器实现并不总是遵守该规则,甚至同一厂商的不同版本行为也不一致。正是这种不一致催生了 CL.TE、TE.CL 和 TE.TE 三类经典攻击手法。

三、CL.TE 攻击

定义:前端代理使用 Content-Length 判断请求边界,后端服务器使用 Transfer-Encoding 判断请求边界。

攻击者发送如下请求:

POST / HTTP/1.1
Host: vulnerable.com
Content-Length: 13
Transfer-Encoding: chunked

0

SMUGGLED

前端代理看到 Content-Length: 13,认为请求体是 0\r\n\r\nSMUGGLED 共 13 字节,于是将整个请求转发给后端。后端看到 Transfer-Encoding: chunked,按分块解析:遇到 0 块认为请求体结束,剩余的 SMUGGLED 被当作下一个请求的开头留在缓冲区中。当后续正常用户请求到达时,后端会把 SMUGGLED 与其拼接,形成攻击者控制的请求。

危害:可绕过前端访问控制、窃取其他用户请求、缓存投毒、会话劫持等。

四、TE.CL 攻击

定义:前端代理使用 Transfer-Encoding 判断请求边界,后端服务器使用 Content-Length 判断请求边界。

攻击者发送:

POST / HTTP/1.1
Host: vulnerable.com
Content-Length: 3
Transfer-Encoding: chunked

8
SMUGGLED
0

前端按 chunked 解析,读取到 0 块结束,将请求转发。后端按 Content-Length: 3 只读取 8\r\n 三个字节作为请求体,剩余的 SMUGGLED\r\n0\r\n\r\n 被当作下一个请求。这样攻击者同样实现了请求走私。

注意:TE.CL 构造比 CL.TE 更敏感,因为 Content-Length 必须精确匹配前端实际转发的内容长度,否则前端可能直接报错或截断。

五、TE.TE 攻击

定义:前后端都支持 Transfer-Encoding,但其中一方可以通过混淆使其“不识别”该头部,从而退化为 CL 或 TE 解析。

常见混淆手法包括:

  • Transfer-Encoding: xchunked
  • Transfer-Encoding : chunked(冒号前有空格)
  • Transfer-Encoding: chunked
  • Transfer-Encoding: x
  • 多个 Transfer-Encoding 头部,其中一个为 chunked

例如:

POST / HTTP/1.1
Host: vulnerable.com
Content-Length: 13
Transfer-Encoding: chunked
Transfer-Encoding: x

0

SMUGGLED

前端可能忽略第二个 TE 头,按 chunked 处理;后端可能因第二个 TE 头非法而回退到 Content-Length,从而形成 CL.TE 或 TE.CL 的效果。TE.TE 的关键在于寻找“一方识别、另一方不识别”的混淆字符串。

六、漏洞检测与利用思路

  1. 时间延迟检测:发送构造请求后观察响应是否延迟,判断是否存在解析差异。
  2. 差异响应检测:发送两个请求,第二个请求的响应是否被第一个“污染”。
  3. 使用 Burp Suite 的 HTTP Request Smuggler 插件:自动化探测 CL.TE、TE.CL、TE.TE。
  4. 利用链:绕过认证、访问内部端点、投毒缓存、劫持其他用户请求、反射型 XSS 放大等。

七、防御措施

  • 统一解析标准:前后端使用同一 HTTP 解析库或同一厂商产品,减少差异。
  • 拒绝歧义请求:当同时出现 Content-LengthTransfer-Encoding 时,直接返回 400。
  • 规范化头部:代理应移除或重写冲突头部,避免透传。
  • 禁用不必要的 TE:若业务不需要分块传输,可在边缘直接拒绝 Transfer-Encoding
  • 及时更新组件:许多请求走私漏洞源于已知的代理/服务器解析缺陷,保持补丁更新。
  • WAF 辅助:部署能识别异常 CL/TE 组合的 WAF 规则,但不可完全依赖。

八、总结

HTTP 请求走私是一类危害大、隐蔽性强的 Web 安全漏洞,其根源在于 HTTP/1.1 规范实现的不一致。CL.TE、TE.CL 和 TE.TE 三种手法分别对应不同的解析差异场景,攻击者利用它们可以突破边界、污染缓存、劫持会话。防御的核心是消除歧义:统一解析、拒绝冲突头部、规范化代理行为。对于安全从业者而言,理解这三种攻击手法的构造与检测方法,是评估现代 Web 架构安全性的必备技能。

未经允许不得转载:任鹏个人博客 » HTTP 请求走私漏洞详解:CL.TE、TE.CL 与 TE.TE 攻击手法

赞 (0) 打赏

评论 0

取消
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏