在Next.js目标中寻找SSRF漏洞
Next.js:现代Web应用程序框架
Next.js是一个强大的基于React的开源框架,使开发人员能够构建快速、交互式且对SEO友好的Web应用程序。通过NPM每周有近1300万次下载,加上框架本身性质复杂,使其成为不友好入侵者的主要目标。
在本文中,我们将深入探讨广泛使用Next.js的目标中最常见的服务器端请求伪造漏洞。
让我们开始吧!
Next.js:现代Web应用程序框架
Next.js是一个强大的基于React的框架,为开发人员提供了多种实用程序和组件来构建交互式Web应用程序和API。此外,它还支持服务器端渲染、API、中间件逻辑、路由、图像优化等功能。
其广泛的功能为安全错误配置的出现创造了合适的环境。在以下部分中,我们将记录3种方法,这些方法允许我们诱导易受攻击的Next.js应用程序组件向任意主机发出出站HTTP请求,这种漏洞类型通常称为服务器端请求伪造。
服务器端请求伪造(SSRF)
了解更多关于在漏洞赏金目标中识别和利用服务器端请求伪造(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组件时(通常默认包含),您会暴露一个额外的API端点,位于/_next/image。下次包含图像时,该图像的位置将被转发到API端点,执行所有优化工作,最后返回优化后的图像:
Next.js Image组件API
如上图所示,url参数看起来是测试服务器端请求伪造漏洞的绝佳位置。特别是因为Next.js支持通配符范围配置选项:
/** @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挑战中的易受攻击中间件实现示例,该示例跟踪UTM参数:
Next.js中间件错误配置引入SSRF
当您仔细观察时,开发人员似乎将对象的全部内容,包括未经过滤的请求头,传递给了next()方法。这将使next()方法在返回响应之前评估所有头信息,包括检查由Location头发起的可能的内部重定向。例如,如果我们向易受攻击的应用程序发出带有任意Location头的请求,我们实际上将使Next.js加载我们在Location头中指定的请求资源。
Next.js中间件SSRF(CVE-2025-57822)概念证明
这个未记录的漏洞在被供应商确认并分配CVE-2025-57822之前被忽视了多年。感谢安全研究员Dominik Prodinger,我们通过他的研究了解到互联网上已识别出超过5,000个可能受影响的主机。在测试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及更早版本使用特定的验证过程将响应流式传输回客户端。框架首先向传入请求的主机头中指定的主机发送HEAD请求,验证响应的content-type,然后继续进行GET请求以检索实际内容:
Next.js Server Actions处理程序(v14.1.1及更早版本)
利用阶段需要配置一个自定义的OAST服务器,该服务器使用适当的content-type头进行响应,以绕过初始验证检查。
- 第一个请求将触发易受攻击的Next.js Server Action组件向我们的OAST服务器发起HEAD HTTP请求,该服务器在Host头中指定。
- 当服务器随后收到GET请求时,我们使用302 HTTP重定向进行响应,其中包含我们的目标资源(如AWS元数据端点URI)在Location头中。
- 我们的OAST服务器配置为使用支持的content-type响应头进行响应,这反过来启动GET请求。当我们收到GET请求时,我们使用302状态代码进行响应。
结论
Next.js是一个复杂的Web应用程序开发框架,简单的错误通常会引入安全缺陷,包括SSRF漏洞。在本文中,我们记录了Next.js目标中的几种服务器端请求伪造(SSRF)漏洞。
所以,您刚刚学到了一些关于在Next.js目标中利用SSRF漏洞的新知识……现在,是时候将您的技能付诸实践了!浏览我们在Intigriti上的70多个公共漏洞赏金计划,谁知道呢,也许您就是下一个今天在我们这里获得赏金的人!
立即在INTIGRITI上开始黑客攻击
您可能还喜欢
2025年9月2日
黑客攻击插件生态系统:完整指南
继续阅读
2025年8月27日
八月CTF挑战:通过NextJS中间件利用SSRF
继续阅读
2025年8月13日
黑客攻击错误配置的Firebase目标:完整指南
继续阅读
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)
公众号二维码
公众号二维码