深入探索Next.js中的SSRF漏洞挖掘

本文详细分析了Next.js框架中三种常见的服务器端请求伪造漏洞,包括Image组件、中间件和Server Actions的安全隐患,并提供了具体的漏洞利用方法和防护建议。

在Next.js目标中寻找SSRF漏洞

目录

  • Next.js:现代Web应用程序框架
  • Next.js Image组件中的SSRF
  • Next.js中间件中的SSRF(CVE-2025-57822)
  • 通过Next.js Server Actions实现SSRF(CVE-2024-34351)
  • 结论

Next.js是一个强大的开源React框架,使开发人员能够构建快速、交互式且对SEO友好的Web应用程序。通过NPM每周下载量近1300万次,加上框架本身复杂性,使其成为不友好入侵者的主要目标。

在本文中,我们将深入探讨广泛使用Next.js的目标中最常见的服务器端请求伪造漏洞。

让我们开始吧!

Next.js:现代Web应用程序框架

Next.js是一个强大的基于React的框架,为开发人员提供了多种实用工具和组件来构建交互式Web应用程序和API。此外,它还支持服务器端渲染、API、中间件逻辑、路由、图像优化等功能。

其广泛的功能为安全配置错误的出现创造了合适的环境。在以下部分中,我们将记录3种方法,这些方法允许我们诱导易受攻击的Next.js应用程序组件向任意主机发出出站HTTP请求,这种漏洞类型通常称为服务器端请求伪造。

服务器端请求伪造(SSRF) 了解更多关于在漏洞赏金目标中识别和利用服务器端请求伪造漏洞的信息: https://www.intigriti.com/researchers/blog/hacking-tools/ssrf-a-complete-guide-to-exploiting-advanced-ssrf-vulnerabilities

Next.js Image组件中的SSRF

图像优化在Web应用程序开发中是必须的。在网站任何位置加载大型未优化的图像资源通常会对SEO产生负面影响。这就是为什么Next.js推荐使用Next.js Image组件,这是一个服务器端组件,可以为您完成所有优化和缓存工作。

为了使此组件工作,所有优化和图像处理都必须在服务器端完成。当您在Next.js项目中包含Image组件时(通常是默认完成的),您会暴露一个位于/_next/image的额外API端点。下次包含图像时,该图像的位置将被转发到API端点,执行所有优化工作,最后返回优化后的图像:

Next.js Image组件API

如上图所示,url参数看起来是测试服务器端请求伪造漏洞的完美位置。特别是因为Next.js支持通配符范围配置选项:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
/** @type {import('next').NextConfig} */
const nextConfig = {
  images: {
    remotePatterns: [
      {
        protocol: 'https',
        hostname: '**',
      },
      {
        protocol: 'http',
        hostname: '**',
      }
    ],
  },
}

module.exports = nextConfig

开发人员这样做是为了允许从任何主机加载图像,却在不知不觉中引入了新的攻击向量。由于此安全配置错误允许我们代表易受攻击的服务器发出HTTP请求,这是一个典型的(盲)服务器端请求伪造漏洞。

即使未指定通配符,您仍应尝试探测潜在的允许列表主机(如CDN),因为负责拉取图像初始版本的基础Image组件默认遵循重定向。实际上,简单的开放URL重定向漏洞可能为访问任意主机开辟途径。

武器化SSRF漏洞 服务器端请求伪造漏洞通常可以进一步武器化,以访问受保护的组件或网络、泄露敏感信息,甚至实现远程代码执行。在我们的综合文章中了解更多关于武器化(盲)SSRF漏洞的信息: https://www.intigriti.com/researchers/blog/hacking-tools/ssrf-a-complete-guide-to-exploiting-advanced-ssrf-vulnerabilities

Next.js中间件中的SSRF(CVE-2025-57822)

Next.js中间件允许开发人员在响应返回给客户端之前运行代码。这在基于应用程序逻辑实现服务器端重定向、身份验证和授权检查时非常有用。然而,在某些情况下,开发人员可能会无意中通过将未清理的用户输入传递给中间件方法进行评估而引入服务器端请求伪造漏洞。

为了进一步理解根本问题并解释为什么这也是一个常见问题,我们必须查看一个易受攻击实现的简单示例。以下是我们之前举办的Intigriti CTF挑战中的一个易受攻击的Next.js中间件实现示例,该实现跟踪UTM参数:

Next.js中间件配置错误引入SSRF

仔细观察,开发人员似乎将整个对象(包括未清理的请求头)传递给了next()方法。这将使next()方法在返回响应之前评估所有头信息,包括检查由Location头发起的可能内部重定向。例如,如果我们向易受攻击的应用程序发出带有任意Location头的请求,实际上将使Next.js加载我们在Location头中指定的请求资源。

Next.js中间件SSRF(CVE-2025-57822)概念验证

这个未记录的漏洞在被供应商确认并分配CVE-2025-57822之前被忽视了多年。感谢安全研究员Dominik Prodinger,我们通过他的研究了解到互联网上已识别出5000多个可能受影响的主机。在测试Next.js应用程序时,建议包含对此特定CVE的检查。

CTF:通过Next.JS中间件利用SSRF Intigriti 0825 CTF挑战赛以CVE-2025-57822为特色。阅读我们的官方解析,了解进一步利用如何甚至导致远程代码执行: https://www.intigriti.com/researchers/blog/hacking-tools/catflix-ctf-ssrf-nextjs-middleware

通过Next.js Server Actions实现SSRF(CVE-2024-34351)

Next.js Server Actions允许开发人员定义在服务器端运行的异步函数,可以直接从React组件调用,实现无缝的服务器端数据获取、变更和表单处理,无需自定义API路由或额外的后端样板代码。

最初由Assetnote的研究人员发现,Server Actions的不正确实现可能导致服务器端请求伪造。要使您的目标易受攻击,必须满足以下条件:

  • Next.js(14.1.1或更早版本)必须在自托管环境中运行
  • 您的Next.js目标需要使用Server Actions
  • Server Action必须执行到相对路径的重定向

最后一个要求至关重要,因为Next.js v14.1.1及更早版本使用特定的验证过程将响应流式传输回客户端。框架首先向传入请求的host头中指定的主机发送HEAD请求,验证响应的content-type,然后继续进行GET请求以检索实际内容:

Next.js Server Actions处理程序(v14.1.1及更早版本)

利用阶段需要配置一个自定义的OAST服务器,该服务器使用适当的content-type头进行响应以绕过初始验证检查。

  1. 第一个请求将触发易受攻击的Next.js Server Action组件向我们在Host头中指定的OAST服务器发起HEAD HTTP请求。
  2. 当服务器随后收到GET请求时,我们使用包含Location头中目标资源(如AWS元数据端点URI)的302 HTTP重定向进行响应。
  3. 我们的OAST服务器配置为使用支持的content-type响应头进行响应,这反过来会启动GET请求。当我们收到GET请求时,我们使用302状态代码进行响应。

结论

Next.js是一个复杂的Web应用程序开发框架,简单的错误通常会引入安全缺陷,包括SSRF漏洞。在本文中,我们记录了Next.js目标中的几个服务器端请求伪造漏洞。

所以,您刚刚学到了关于在Next.js目标中利用SSRF漏洞的新知识……现在是时候测试您的技能了!浏览我们在Intigriti上的70多个公共漏洞赏金计划,谁知道呢,也许您就是下一个今天在我们这里获得赏金的人!

立即开始在INTIGRITI上进行黑客攻击

您可能还喜欢:

  • 黑客攻击插件生态系统:完整指南(2025年9月2日)
  • 八月CTF挑战:通过NextJS中间件利用SSRF(2025年8月27日)
  • 黑客攻击配置错误的Firebase目标:完整指南(2025年8月13日)
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计