CVE-2024-9266

URL 重定向/开放重定向
影响
特快专递
>=3.4.5 <4.0.0
特快专递
未找到项目。
感叹号圆圈图标
补丁可用
HeroDevs 提供的 Never-Ending Support (NES) 版本已修复此漏洞。

概述

Express 是一个最小且灵活的 Node.js 网络应用程序框架,可为网络和移动应用程序提供一系列强大的功能。

Express 3 响应对象中发现了开放重定向漏洞(CVE-2024-9266)。 

根据OWASP 的定义,开放式重定向(也称为 URL 重定向)是一种输入验证漏洞,当应用程序接受用户控制的输入,指定指向可能是恶意的外部 URL 的链接时,就会出现这种漏洞。这种漏洞可用于完成网络钓鱼攻击或将受害者重定向到感染页面。

这影响到大于或等于 3.4.5 和小于 4.0.0 的 Express 版本。

详细信息

模块信息

漏洞信息

在 Express 软件包中的response.js中发现此中严重性漏洞。  

当出现以下情况时,Express响应对象中的location()方法容易受到开放重定向的影响:

  1. 请求路径以双斜线(//) 开头
    AND
  2. 重定向的相对路径以./开头,由用户控制的输入
  3. 位置标头由用户控制的输入设置

location()方法将提取路径//并使用 resolve()方法将其添加到相对 URL 前, resolve()方法将评估./并将其返回为 / ,因此位置重定向的结果 url 将变成类似"///example.com "的内容在大多数浏览器中,这将被评估为等同于 `//example.com`,这是一个有效的方案-相对-特殊-url,并将以 "Location.//example.com "的形式在标头中发送 :///example.com",可将用户重定向到攻击者的网站。

复制步骤

  • 在 Express 应用程序代码中,创建一个路径,将用户重定向到通过 URL 查询参数提供的位置。 
app.get(['/'], function (req, res) { 
  const pageId = req.query.pageId;
  if (pageId && pageId[0] == '.') { 
    res.status(301).location(pageId); 
  }
  res.send('OK'); 
});

  • 在浏览器中,访问 Express 应用程序路由,并进行如下查询:
http://localhost:3000//?pageId=./example.com

  • 浏览器应重定向至https://example.com。使用 Chrome DevTools 检查浏览器的头信息也可以观察到结果。

概念验证

与上述代码类似的完整重现可在此处找到:
Express 3.x 开放式重定向重现

荣誉

  • 马特维耶斯-马申科(寻找者)

缓解

Express 3 已达到生命周期终点,将不会收到任何解决此问题的更新。

受影响组件的用户应采用以下缓解措施之一:

  • 迁移到新版本的 Express
  • 打上自己的补丁
  • 利用HeroDevs这样的商业支持合作伙伴提供 EOL 后的安全支持。

漏洞详情
身份证
CVE-2024-9266
受影响的项目
特快专递
受影响的版本
>=3.4.5 <4.0.0
出版日期
2024 年 10 月 3 日
≈ 固定日期
2024 年 8 月 23 日
固定在
严重性
中型
类别
URL 重定向/开放重定向