HD-2024-1407

HTTP 请求走私
影响
Node.js
4.21.3 LTS
Node.js
Node.js NES
感叹号圆圈图标
补丁可用
HeroDevs 提供的 Never-Ending Support (NES) 版本已修复此漏洞。

‍ 概览

多个 Node.js 版本的 http 模块中的 llhttp 解析器没有严格使用 CRLF 序列来分隔 HTTP 请求,这可能导致 HTTP 请求走私 (HRS)。 

HTTP 请求走私干扰了 HTTP 服务器对请求的正常执行。该漏洞可能造成的后果包括允许未经授权访问系统、允许攻击者修改数据(数据库、用户账户和其他记录)、会话劫持、信息泄露、缓存中毒和拒绝服务。

此问题会影响以下版本的 Node.js:16.0.0 至(但不包括)16.20.1、18.0.0 至(但不包括)18.16.1 和 20.0.0 至(但不包括)20.3.1

 

详细信息

模块信息

受影响软件包: llhttp

受影响的 Node.js 版本: 14 LTS

存储库: https://github.com/nodejs/node

已发布软件包:节点

软件包管理器:npm

漏洞信息

在许多版本的 llhttp 库中都发现了这个高严重性漏洞。尽管 RFC7230 第 3 节指出,每个报头字段只能用 CRLF 序列定界,但该库的易受攻击版本只允许用 CR 字符(不含 LF)来定界 HTTP 报头字段。 

由于该库与 Node.js 捆绑在一起,因此 v16、v18 和 v20 分支中的许多 Node.js 版本都会受到影响。

没有解决方法。

复制步骤

  • 在服务器上安装有漏洞的 Node 版本。
  • 制作一个 HTTP 请求,它不使用 \r\n (CRLF),而只使用 \r (CR) 来结束头部字段。在下面的示例中,第一个请求仅以 \r 结尾,这可能会导致第二个请求被走私(隐藏到网络服务器的某些层,或被某些层误解)。第二个请求是正确形成的,因为它正确地以 \r\n 结尾。
POST / HTTP/1.1
主机:example.com
Content-Type: application/x-www-form-urlencoded
Content-Length:  11\r
Cookie: session=abc123\r
\r
data=payload1
POST /secret HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 11
\r\n
data=payload2

没有变通办法。

缓解

所有用户都应升级到无此漏洞的 Node 版本。

其他资源

漏洞详情
身份证
HD-2024-1407
受影响的项目
Node.js
受影响的版本
4.21.3 LTS
出版日期
2024 年 10 月 16 日
≈ 固定日期
2024 年 6 月 30 日
固定在
严重性
类别
HTTP 请求走私