HD-2024-1408

信息披露
影响
Node.js
16.20.2 LTS
Node.js
Node.js NES
感叹号圆圈图标
补丁可用
HeroDevs 提供的 Never-Ending Support (NES) 版本已修复此漏洞。

‍ 概览

Undici 是专为 Node.js 编写的高性能 HTTP/1.1 客户端,可用于替代本地库。Fetch 标准的部分内容指出,在重定向时,禁止的请求头(如 Cookie)不应传递给目标网站。5.26.2 之前的 undici 版本未能做到这一点。(请注意,对于 Node 16 而言,只有在使用 --experimental-fetch 标志时才会出现这种情况)。

该漏洞可与开放重定向漏洞结合使用,在开放重定向漏洞中,攻击者可让服务器重定向到他们控制的网站。如果 cookie 中包含敏感数据(如授权令牌),目标网站(可能由攻击者控制)就会收到敏感数据。 

此问题会影响低于 5.26.2 的 undici 版本。

详细信息

模块信息

受影响的软件包:unidici
受影响的版本:>5.26.2
资源库 https://github.com/nodejs/undici
已发布软件包:unici
软件包管理器: npm

漏洞信息

在 5.26.2 以下版本的 undici 中发现了这个低严重性漏洞。 

undici 可以单独导入,也作为 Node.js 发行版的一部分。一般来说,最好将 Node.js 升级到包含固定版本库的版本,而不是只升级 undici 库。

复制步骤

  • 导入有漏洞的 undici 版本,或设置包含有漏洞的 undici 版本的 Node.js 实例。
  • 请使用下面的代码,该代码摘自针对该漏洞的测试,并包含在修复程序中:
'use strict'
const { test } = require('tap')
const { createServer } = require('http')
const { once } = require('events')
const { fetch } = require('../..')

test('Cross-origin redirects clear forbidden headers', async (t) => {
  t.plan(5)
  const server1 = createServer((req, res) => {
    t.equal(req.headers.cookie, undefined)
    t.equal(req.headers.authorization, undefined)
    res.end('redirected')
  }).listen(0)
  const server2 = createServer((req, res) => {
    t.equal(req.headers.authorization, 'test')
    t.equal(req.headers.cookie, 'ddd=dddd')
    res.writeHead(302, {
      ...req.headers,
      Location: `http://localhost:${server1.address().port}`
    })
    res.end()
  }).listen(0)
  t.teardown(() => {
    server1.close()
    server2.close()
  })
  await Promise.all([
    once(server1, 'listening'),
    once(server2, 'listening')
  ])
  const res = await fetch(`http://localhost:${server2.address().port}`, {
    headers: {
      Authorization: 'test',
      Cookie: 'ddd=dddd'
    }
  })
  const text = await res.text()
  t.equal(text, 'redirected')
})

  • 请注意,下面几行断言特定标头未定义:
t.equal(req.headers.cookie、 未定义)
t.equal(req.headers.authorization、 未定义)

  • 在有漏洞的系统上,这些断言会失败,因为服务器 1 会收到授权和 Cookie 标头。

没有变通办法。

缓解

undici 是 Node 16(除原生 HTTP 库外)新增的一个流行库。所有使用实验性 fetch 的用户都应立即升级。 

其他资源

漏洞详情
身份证
HD-2024-1408
受影响的项目
Node.js
受影响的版本
16.20.2 LTS
出版日期
2024 年 10 月 15 日
≈ 固定日期
2023 年 10 月 11 日
固定在
严重性
类别
信息披露