CVE-2026-27978Next.js是一个用于构建全栈Web应用程序的React框架。该漏洞存在于Next.js 16.0.1至16.1.7版本中,Server Action的CSRF验证机制存在缺陷。漏洞的根本原因在于当请求的origin值为null时(如来自沙盒iframe等不透明上下文),验证逻辑错误地将其视为"缺失"的origin而非有效的"null"字符串。这导致来自沙盒上下文的请求能够绕过origin验证,成功通过CSRF检查。攻击者可以利用此漏洞构造恶意页面,诱导已登录用户从沙盒iframe中发起Server Action请求,从而以受害者的身份执行状态变更操作,如修改账户信息、提交表单等。漏洞影响所有使用受影响版本Next.js且启用了Server Actions功能的Web应用程序。
漏洞原理:Next.js的Server Action机制在处理CSRF验证时,使用origin请求头进行来源校验。正常情况下,浏览器会自动设置origin头为当前页面的完整origin(如https://example.com)。然而,当页面位于沙盒iframe(sandbox属性不包含allow-same-origin)或其他不透明上下文时,浏览器会将origin设置为null字符串。问题出在Next.js的验证代码中,null被当作"未设置origin"处理,导致验证逻辑认为这是同源请求而非跨域请求,从而跳过了CSRF保护检查。攻击者利用方式:首先搭建包含恶意Server Action调用的页面,然后将该页面嵌入到带有sandbox属性的iframe中(不含allow-same-origin和allow-scripts),当受害者在其他已登录Next.js站点访问此页面时,iframe内的脚本可以绕过CSRF检查,以受害者身份向目标Server Action发起请求。修复方案:在16.1.7版本中,代码被修改为将'null'字符串作为明确的origin值处理,并强制执行host/origin检查,除非在experimental.serverActions.allowedOrigins配置中显式允许'null'。