0x01 组件介绍
Next.js是一个构建于Node.js之上的开源Web开发框架,支持基于React的Web应用程序功能,提供了服务器渲染、静态站点生成、路由、优化等高级功能,使得能够快速构建现代web 应用。
fofa语法:app="Next.js"
0x02 漏洞描述
2024年5月,Assetnote 的安全研究人员在 NextJS 框架中发现了一个严重的服务器端请求伪造 (SSRF) 漏洞,编号为 CVE-2024-34351。目前该漏洞已在 NextJS 版本 14.1.1 中进行了修补。当Next.js应用程序使用Server Actions执行重定向操作将用户或客户端请求重定向到以"/"开头的相对路径时,威胁者可通过指定自定义Host标头导致Next.js从该主机获取响应,从而导致SSRF,成功利用该漏洞可能导致内部网络信息泄露。
0x03 影响版本
13.4.0<= Next.js <14.1.1
0x04 环境搭建
0x01 下载
关于这个漏洞,利用条件还是有点难度的。需要满足以下几个点
1. Next.js ( 13.4.0<= Next.js <14.1.1) 以自托管* 方式运行。
2. Next.js 应用程序使用服务器操作。
3. 服务器操作执行重定向到以/.
因此我们如果要搭建这个环境的话,没有相关基础是很难做到的。但是呢好在逛了一下github,已经有大佬创建了相关漏洞环境代码了,我们拉下来直接用就可以。漏洞环境下载地址
在此之前我们需要先安装node.js才能启动该漏洞环境,安装的node.js版本需要大于v18.17.0,我们直接到官网选择目前较新的版本下载就可以了,windows的安装比较简单,我选择的是:v20.13,下载对应的的msi版本,直接安装默认安装即可 下载地址
下载安装完,验证一下是否已经安装完成,在cmd下执行,验证下对应版本是否正确
node -v
npm -v
直接下载代码压缩包,解压后进到目录内
执行以下代码就行,出现以下类似的情况即可
npm install
启动环境,出现可访问的地址时,即证明环境已启动成功
npm run dev
0x02 访问环境
按照第一步安装的的环境,在浏览器中打开访问一下显示的地址,这里我们用ip加端口访问方便后续抓包,出现以下内容即为环境启动成功
http://192.168.1.13:3000
0x05 漏洞原理
在受影响版本中,当使用 Server Actions 服务端试图执行基于相对路径的重定向时,通过指定自定义Host标头导致Next.js从该主机获取响应,从而导致SSRF。具体的细节可以参考作者的文章
挖掘过程和原理
0x06 漏洞验证
1.访问站点,点击页面上Click,抓包
发送到Repeater模块中(记得删掉请求头中的Origin,Referer,否则无法利用成功)
伪造Host头测试是否存在ssrf,这里我们用dnslog测试即可,用burp自带的dnslog模块:Burp Collaborator client
看响应头是303时则基本证明漏洞存在,看下burp dnslog模块是否有记录
至此漏洞复现完成
但看这个漏洞利用过程确实比较困难,在请求包中我们注意到请求头中有这个字段:Next-Action
做了下相关的尝试,把这个Next-Action字段删除或者改成其他数值,都无法利用成功
这个字段按照作者的解释是叫做下一步操作ID 这个在请求时是自带的,应该是每个系统的这个ID都是不一样的,还不能伪造,需要和服务器一致,因此这个漏洞根本无法批量进行利用,需要在日常的漏洞挖掘中,时刻注意到是否有这个Next-Action才可能存在漏洞的可能,才能进一步进行利用。加上刚开始这个漏洞的先前利用条件,真正利用起来还是比较困难。
2.探索一下是否能验证内网的端口开放情况
由于是在本机搭建的,内网内并没有过多端口,因此只能用python3启动一个web服务开启8000端口:
python3 -m http.server 8000
发包测试一下,把Host头改成分别改成:192.168.1.13:8000(端口开放) 和192.168.1.13:80001(端口未开放)
根据上面的结果,我们看到响应内容上基本是没有差别,因此这个可以判断是没有回显的ssrf,称作盲ssrf??但是我们注意到右下角有个响应时间,端口开放时的响应基本都是几十毫秒,端口未开放时响应的时间是到达2秒以上的,因此我们可以观测这个时间来探索内网端口的开放情况,基本也能做到探索内网端口了吧,但受网络影响的话,不能说百分之百准确。
0x07 漏洞影响
通过以上过程,我们可以看到该漏洞危害属于高危,且该漏洞利用难度也较高,成功利用该漏洞可能导致内部网络信息泄露。但是呢,慢雾首席信息安全官 23pds 指出,大量加密行业的平台都在使用 Next.js 框架进行开发,如果不及时修复,将面临严重的安全风险。所以该修还是得修一下,咱们也不知道还有没有更简单直接的利用方法。
0x08 修复建议
1.升级版本,官方已于正式分支中修复,待发布正式版本。
目前该漏洞已经修复,受影响用户可更新到Next.js 14.1.1或更高版本。
下载链接:
https://github.com/vercel/next.js/tags
2.临时措施:
暂无
0X09 参考链接
https://www.assetnote.io/resources/research/digging-for-ssrf-in-nextjs-apps
https://github.com/Voorivex/CVE-2024-34351
0x010 免责声明
本文所涉及的任何技术、信息或工具,仅供学习和参考之用。
请勿利用本文提供的信息从事任何违法活动或不当行为。任何因使用本文所提供的信息或工具而导致的损失、后果或不良影响,均由使用者个人承担责任,与本文作者无关。
作者不对任何因使用本文信息或工具而产生的损失或后果承担任何责任。使用本文所提供的信息或工具即视为同意本免责声明,并承诺遵守相关法律法规和道德规范。