Next.js 最新漏洞解析及安全升级指南
最近,流行的 Next.js 框架修复了两个重要的安全漏洞,分别是 CVE-2024-34350 和 CVE-2024-34351。如果不及时升级,可能会导致数据泄露或服务器被攻击。
1. CVE-2024-34350:HTTP 请求走私漏洞
-
技术解释 :这个漏洞就像是,你的 Web 服务器对同一个 HTTP 请求理解不一致,有时认为是一个请求,有时认为是两个。攻击者可以利用这一点,构造特殊的请求,让服务器返回错误的内容,或者执行未授权的操作。主要影响使用了
rewrites
功能的路由。 -
实际例子 :假设你的网站有一个重定向规则,将
/old-path
重定向到/new-path
。攻击者可以构造一个恶意的 HTTP 请求,当服务器处理这个请求时,会将其中一部分当成是给/new-path
的请求,另一部分当成是给其他内部接口的请求,从而窃取数据或篡改信息。 -
修复方案:升级到 Next.js 13.5.1 或更高版本(包括 14.x)。
2. CVE-2024-34351:服务器端请求伪造(SSRF)风险
-
技术解释:SSRF 漏洞允许攻击者让你的服务器代表它自己去访问其他资源。在 Next.js 的 Server Actions 中,如果 Host header 被篡改,并且你的应用是自托管的,攻击者就可以让你的服务器向内部服务或外部网站发起恶意请求。 简单来说,就是黑客可以利用你的服务器作为跳板,去访问其他服务器。
-
实际例子 :假设你的 Next.js 应用运行在自己的服务器上,并且使用了 Server Actions。攻击者可以修改 HTTP 请求中的
Host
header,让你的服务器去访问内部的管理接口http://localhost:3000/admin
,如果这个接口没有做严格的权限验证,攻击者就可以控制你的服务器。bashcurl -v http://your-server.com/api/upload \ -H "Host: localhost:3000" \ --data-binary @malicious-file.txt
这个例子中,攻击者尝试将
Host
header 设置为localhost:3000
,如果服务器没有正确验证Host
header,可能会将请求发送到本地的 3000 端口,从而暴露内部服务。 -
防范方法:
- 升级 Next.js: 立即升级到 Next.js 14.1.1 或更高版本,该版本已修复此漏洞。
- 限制 URL 模式 : 强制执行特定的 URL 模式,只允许使用
HTTP
和HTTPS
协议, 避免使用file://
等潜在的危险模式。 - 使用防火墙: 部署 Web 应用防火墙(WAF), 阻止恶意请求, 创建可信域名白名单, 并拒绝可疑的 URL 或 IP 地址。
- 清理用户输入: 对所有用户输入进行清理, 确保 URL 格式正确, 不包含意外字符, 但不能仅依赖于输入清理。
-
修复方案:升级到 Next.js 14.1.1。 没有其他临时的解决方案.
总结
请所有使用 Next.js 的开发者尽快升级到最新版本,特别是自托管 Next.js 应用,以避免受到这些漏洞的影响。同时,要重视用户输入验证和服务器配置安全,防止潜在的安全风险。