他们发现了新版本的 HTTP 请求走私攻击

MGI 前端通过 HTTP / 2 接受连接的 Web 系统 并通过 HTTP / 1.1 h 将它们传递给后端已暴露于新版本的“HTTP 请求走私”攻击, 它允许通过发送专门设计的客户端请求,在前端和后端之间划分在同一流中处理的其他用户的请求的内容。

攻击 可用于注入恶意 JavaScript 代码 在与合法站点的会话中,绕过访问限制系统并拦截身份验证参数。

该研究的作者 证明了攻击 Netflix、Verizon、Bitbucket、Netlify CDN 和 Atlassian 系统的可能性,并因识别漏洞而获得 56.000 美元的奖励计划。 该问题在 F5 Networks 产品中也得到了确认。

问题 部分影响 Apache http 服务器上的 mod_proxy (CVE-2021-33193),预计在 2.4.49 版本中修复(开发人员在 3 月初收到问题通知,并在 1.21.1 个月内修复它)。 在 nginx 中,同时指定“Content-Length”和“Transfer-Encoding”标头的能力在之前的版本 (XNUMX) 中被阻止。

新方法的操作原理 流量中的匹配请求 与两年前同一位研究员发现的漏洞相似,但仅限于通过 HTTP/1.1 接受请求的接口。

经典的“HTTP 请求走私”攻击基于这样一个事实,即前端和后端对 HTTP“内容长度”标头的使用有不同的解释(确定请求中数据的总大小)和“传输编码:分块”(允许您分块传输数据)...

例如,如果接口只支持“Content-Length”而忽略“Transfer-Encoding: fragmented”,攻击者可以发送一个请求,请求头包含“Content-Length”和“Transfer-Encoding: fragmented”,但大小“内容长度”与分块字符串的大小不匹配。 在这种情况下,前端将根据“内容长度”处理和重定向请求,后端将根据“传输编码:分块”等待块完成。

与文本 HTTP/1.1 协议不同,它是在行级别解析的, HTTP / 2 是一个二进制协议并操作块 预定大小的数据。 但是,HTTP/2 使用伪头 对应于普通的 HTTP 标头。 与后端交互时 使用 HTTP/1.1 协议, 前端翻译这些伪标头 在类似的 HTTP / 1.1 HTTP 标头中。 问题是后端对传输的分析做出决定 基于前端设置的 HTTP 标头, 不知道原始请求的参数。

即使以伪头的形式,值 “内容长度”和“传输编码” 它们可以流式传输,尽管它们不在 HTTP / 2 中使用,因为所有数据的大小是在单独的字段中确定的。 但是,当将 HTTP / 2 请求转换为 HTTP / 1.1 时,这些标头会通过并且可能会混淆后端。

有两种主要的攻击选项:H2.TE 和 H2.CL,其中后端被错误的传输编码或内容长度值所欺骗,该值与前端通过 HTTP/2 协议接收到的请求正文的实际大小不符。

作为 H2.CL 攻击的一个例子,伪头中指定了不正确的大小 提交请求时的内容长度 HTTP / 2 到 Netflix. 此请求导致添加标头 HTTP 内容长度 通过 HTTP / 1.1 访问后端时类似,但由于大小 内容长度 小于实际,队列中的一部分数据作为下一个请求的开始处理。

攻击工具已经添加到 Burp 的工具包中,并且可以作为 Turbo Intruder 扩展使用。 Web 代理、负载平衡器、Web 加速器、内容交付系统以及在前端-后端方案中重定向请求的其他配置都容易受到此问题的影响。

数据来源: https://portswigger.net


发表您的评论

您的电子邮件地址将不会被发表。 必填字段标有 *

*

*

  1. 负责数据:MiguelÁngelGatón
  2. 数据用途:控制垃圾邮件,注释管理。
  3. 合法性:您的同意
  4. 数据通讯:除非有法律义务,否则不会将数据传达给第三方。
  5. 数据存储:Occentus Networks(EU)托管的数据库
  6. 权利:您可以随时限制,恢复和删除您的信息。