Changelog
-
The React Router team has disclosed five security vulnerabilities affecting React Router. These issues are patched in React Router 7.18.0 (one issue was patched earlier, in 7.13.0). Here’s what Netlify customers need to know.
Vulnerabilities
Vulnerability CVE Severity Affected versions Patched in Open redirect leading to XSS CVE-2026-53668 Medium ≥6.30.2 ≤6.30.4, ≥7.9.6 <7.13.0 7.13.0 Unauthenticated Denial of Service in React Router __manifest endpoint CVE-2026-55685 High ≥7.0.0 <7.18.0 7.18.0 RSCErrorHandler Missing Protocol Validation (XSS) CVE-2026-53667 Medium ≥7.11.0 <7.18.0 7.18.0 Arbitrary client-side constructor injection via React Router SSR Hydration CVE-2026-53666 Medium ≥6.4.0 <7.18.0 7.18.0 Unexpected external redirect via untrusted paths CVE-2026-53669 Medium ≥6.0.0 <7.18 7.18.0 Impact on Netlify
Open redirect leading to XSS
Attacker-controlled redirect targets combined with path concatenation and
useNavigatecan escape the intended app path, resulting in open redirects or XSS viajavascript:URLs. This affects Declarative, Data, and Framework mode apps that pass user-controlled values into navigation APIs.Regardless of hosting provider, all apps passing untrusted data into navigation APIs may be vulnerable.
Unauthenticated Denial of Service in React Router __manifest endpoint
Deep, attacker-controlled paths can trigger expensive synchronous route matching, blocking the Node.js event loop with a single unauthenticated request to manifest endpoints (
__manifest, and*.manifestin unstable RSC mode). This affects Framework mode with SSR only, including unstable RSC framework mode.This is a server-side denial-of-service (DoS) vulnerability. On Netlify, this has minimal impact: our autoscaling serverless architecture means that a malicious request resulting in a crashed or hung function does not affect other requests. However, active exploitation could increase your function costs.
RSCErrorHandler Missing Protocol Validation (XSS)
One RSC redirect handling path was missing protocol validation. Apps that redirect to attacker-controlled values may execute dangerous schemes such as
javascript:. This only affects apps using unstable RSC Data or RSC Framework mode.Regardless of hosting provider, all RSC apps redirecting to untrusted values may be vulnerable. Note that this affects an experimental feature only.
Arbitrary client-side constructor injection via React Router SSR Hydration
Serialized server errors can carry a subtype that’s resolved against
windowduring hydration. Apps that set user-controlled input intoerror.namecould have this instantiate browser constructors such asEventSource,WebSocket,Worker, orImage. This affects Data and Framework mode SSR hydration.Regardless of hosting provider, apps setting user-controlled values into
error.namemay be vulnerable. This requires an unusual application code path, so real-world impact is expected to be low.Unexpected external redirect via untrusted paths
Backslash-based URL forms such as
\\evil.com,/\evil.com, or\/evil.comcan be interpreted by browsers as cross-origin navigations, bypassing protections that only account for//. This affects<Link>,useNavigate, and redirects across Declarative, Data, Framework, and RSC modes.Regardless of hosting provider, all apps passing untrusted destinations to
<Link>,useNavigate, or redirects may be vulnerable.What should I do?
We strongly recommend upgrading as soon as possible to patched releases:
react-router7.18.0 or later (all five issues)react-router7.13.0 or later addresses the open redirect leading to XSS issue only — upgrade to 7.18.0 for full coverage
Note that any publicly available deploy previews and branch deploys may remain vulnerable until they are automatically deleted. Consider deleting these deploys manually.
Resources
- Open redirect leading to XSS (CVE-2026-53668)
- Unauthenticated Denial of Service in React Router __manifest endpoint (CVE-2026-55685)
- RSCErrorHandler Missing Protocol Validation (XSS) (CVE-2026-53667)
- Arbitrary client-side constructor injection via React Router SSR Hydration (CVE-2026-53666)
- Unexpected external redirect via untrusted paths (CVE-2026-53669)
-
The Next.js team has disclosed nine security vulnerabilities, all patched in 15.5.21 and 16.2.11. The issues span server-side request forgery (SSRF), a middleware authorization bypass, denial of service (DoS), and cache/identifier disclosure. Here’s what Netlify customers need to know.
Summary
If you run Next.js on Netlify, upgrade
nextto 15.5.21 or 16.2.11 and redeploy. Netlify-hosted sites are not affected by three of these (Server ActionHostforwarding, the Image Optimizer DoS, and the Edge-runtime OOM). The rest affect only apps using a specific pattern or configuration, and are resolved by upgrading — see Impact on Netlify for the per-issue verdict.Vulnerabilities
All issues are patched in 15.5.21 and 16.2.11. Earlier minors of 15.x and 16.x will not be patched; affected projects must upgrade to a patched minor. Follow the GHSA links for full details.
Vulnerability Severity Affected versions CVE-2026-64645 / GHSA-p9j2-gv94-2wf4 — Server-Side Request Forgery in rewrites via attacker-controlled destination hostname High ≥12.0.0 <15.5.21, ≥16.0.0 <16.2.11 CVE-2026-64649 / GHSA-89xv-2m56-2m9x — Server-Side Request Forgery in Server Actions on custom servers High ≥14.1.1 <15.5.21, ≥16.0.0 <16.2.11 CVE-2026-64642 / GHSA-6gpp-xcg3-4w24 — Middleware / Proxy bypass in App Router applications using Turbopack and single locale High ≥16.0.0 <16.2.11 CVE-2026-64641 / GHSA-m99w-x7hq-7vfj — Denial of Service in App Router using Server Actions High ≥13.0.0 <15.5.21, ≥16.0.0 <16.2.11 CVE-2026-64644 / GHSA-q8wf-6r8g-63ch — Denial of Service in the Image Optimization API using SVGs Medium ≥15.5.0 <15.5.21, ≥16.0.0 <16.2.11 CVE-2026-64646 / GHSA-4c39-4ccg-62r3 — Unbounded Server Action payload in Edge runtime Medium ≥13.0.0 <15.5.21, ≥16.0.0 <16.2.11 CVE-2026-64648 / GHSA-68g3-v927-f742 — Cache confusion of response bodies for requests with bodies Medium ≥13.0.0 <15.5.21, ≥16.0.0 <16.2.11 CVE-2026-64647 / GHSA-4633-3j49-mh5q — Cache confusion of response bodies for requests with bodies containing invalid UTF-8 byte sequences Medium ≥13.0.0 <15.5.21, ≥16.0.0 <16.2.11 CVE-2026-64643 / GHSA-955p-x3mx-jcvp — Unauthenticated disclosure of internal Server Function endpoints Medium ≥13.0.0 <15.5.21, ≥16.0.0 <16.2.11 Impact on Netlify
Server-side request forgery
CVE-2026-64645 / GHSA-p9j2-gv94-2wf4 (Server-Side Request Forgery in rewrites via attacker-controlled destination hostname): Netlify sites are affected if a
rewrites()orredirects()rule builds the destination hostname from request input (static destinations are not). Upgrading Next.js resolves it.CVE-2026-64649 / GHSA-89xv-2m56-2m9x (Server-Side Request Forgery in Server Actions on custom servers): Netlify sites are not affected — our edge overwrites inbound
X-Forwarded-Hostwith the real host, so an attacker cannot redirect the Server Action’s outbound request to a host they control.Middleware authorization bypass
CVE-2026-64642 / GHSA-6gpp-xcg3-4w24 (Middleware / Proxy bypass in App Router applications using Turbopack and single locale): Netlify sites are affected if they build with Turbopack and use the legacy
middleware.tsconvention with single-locale i18n. Webpack builds and the newerproxy.tsconvention are not affected. Upgrading Next.js resolves it.Denial of service
CVE-2026-64641 / GHSA-m99w-x7hq-7vfj (Denial of Service in App Router using Server Actions) and CVE-2026-64646 / GHSA-4c39-4ccg-62r3 (Unbounded Server Action payload in Edge runtime) are server-side DoS. On Netlify these have minimal impact: our autoscaling architecture means a hung or crashed function does not affect other requests, though active exploitation could increase your function costs. The Edge-runtime OOM specifically cannot exhaust memory on Netlify — request bodies are capped and each request runs in an isolated invocation. Upgrading Next.js resolves both.
CVE-2026-64644 / GHSA-q8wf-6r8g-63ch (Denial of Service in the Image Optimization API using SVGs): Netlify sites are not affected —
/_next/imageis served by Netlify Image CDN, so the vulnerable Next.js code path is not used.Cache disclosure / confusion
CVE-2026-64648 / GHSA-68g3-v927-f742 (Cache confusion of response bodies for requests with bodies) and CVE-2026-64647 / GHSA-4633-3j49-mh5q (Cache confusion of response bodies for requests with bodies containing invalid UTF-8 byte sequences): Netlify sites are affected if they use the specific cached-fetch patterns — a cached
fetch(new Request(url), init), or a cached binary-body POSTfetch().fetch(url, init)andcache: 'no-store'are not affected. Upgrading Next.js resolves both.Information disclosure
CVE-2026-64643 / GHSA-955p-x3mx-jcvp (Unauthenticated disclosure of internal Server Function endpoints): Netlify sites are affected (low impact) if they use Cache Components with a reflective Server Action co-bundled alongside a
use cachefunction. The leak is limited to opaque internal function identifiers — no credentials or PII. Upgrading Next.js resolves it.What should I do?
We strongly recommend upgrading as soon as possible:
- Upgrade
nextto 15.5.21 or 16.2.11, then redeploy.
For Next.js 13.x and 14.x: patches target 15.x / 16.x — upgrade to a patched minor.
Note that any publicly available deploy previews and branch deploys may remain vulnerable until they are automatically deleted. Consider deleting these deploys manually.
Resources
- Upgrade
-
Google’s Gemini 3.6 Flash and Gemini 3.5 Flash-Lite models are now available through Netlify’s AI Gateway and Agent Runners with zero configuration required.
Use the Google GenAI SDK directly in your Netlify Functions without managing API keys or authentication. The AI Gateway handles everything automatically. Here’s an example using the Gemini 3.6 Flash model:
import { GoogleGenAI } from '@google/genai';export default async () => {const ai = new GoogleGenAI({});const response = await ai.models.generateContent({model: 'gemini-3.6-flash',contents: 'How can AI improve my coding?',});return Response.json(response);};Gemini 3.6 Flash and Gemini 3.5 Flash-Lite are available for all Function types and Agent Runners. You get automatic access to Netlify’s caching, rate limiting, and authentication infrastructure.
Learn more in the AI Gateway documentation and Agent Runners documentation.
-
You can now invite a Developer or Internal Builder to your team without assigning them to an existing project.
Previously, the UI required every new Developer or Internal Builder to be given access to at least one existing project before you could add them. That got in the way of a common workflow: bringing someone on specifically to spin up new work, without handing them the keys to projects they don’t need to touch.
Because both roles can create their own projects directly, this is often exactly what teams want. Invite a new teammate, let them start building right away, and keep your existing projects untouched. When they create a project, they’re automatically assigned the Developer role on it, so they own the work they start without gaining access to everything else.
The result is cleaner, least-privilege onboarding: people get exactly the access they need to begin, and nothing more.
To try it, head to your team’s Members page and invite a Developer or Internal Builder without selecting any existing projects. Learn more about managing project access in our project access docs.
-
Team Owners on Pro plans can now limit Agent Runners spend for individual members in your team, giving you finer control over how AI credits are used across your team.
Set a single credit limit that applies to every member, then customize it with overrides for specific people who need more (or less) room to work. This makes it easy to give power users a higher ceiling while keeping predictable, budget-friendly defaults for everyone else.
You’ll find these controls in Team Settings under General > AI Enablement.
This builds on our existing team-wide AI usage limits, so you can now manage AI spend both for an entire team and down to each individual member.
We’ve also updated how AI inference credit usage is displayed in your dashboard, making it easier to monitor AI usage and manage your AI spend.
Learn more about AI inference usage and how credits work.
-
Team Owners on the credit-based Pro plan can now choose how many monthly credits come with their plan, instead of a single fixed amount. Pick the tier that fits your usage, and change it whenever your needs shift.
The new credit tiers, with rollover on higher tiers, can be especially helpful for teams with seasonal surges and teams with consistently high-credit usage and come with some per-credit cost savings.
What’s changing
Previously, every Pro plan included a fixed 3,000 monthly credits for $20/month.
New amounts for monthly credits
Now you can choose from five tiers:
Monthly credits Price Rollover 3,000 $20/mo No 5,000 $33/mo Yes 10,000 $63/mo Yes 15,000 $95/mo Yes 20,000 $126/mo Yes All tiers include the same Pro plan features: unlimited seats, password protection, and everything else that comes with Pro.
Rollover credits on higher tiers
Choose 5,000 monthly credits or higher and unused credits rollover an additional billing cycle so you get an extra month to use them. The base 3,000-credit tier doesn’t roll over.
Change your tier anytime
Team Owners can switch tiers without limits to how many times they switch. Upgrades take effect immediately with a prorated refund; downgrades take effect next billing cycle. Learn more about switching between Pro tiers.
Learn more
-
OpenAI’s GPT-5.6 Sol, Luna, and Terra models are now available through Netlify’s AI Gateway and Agent Runners with zero configuration required.
Use the OpenAI SDK directly in your Netlify Functions without managing API keys or authentication. The AI Gateway handles everything automatically. Here’s an example using the GPT-5.6 Sol model:
import OpenAI from 'openai';export default async () => {const openai = new OpenAI();const response = await openai.responses.create({model: 'gpt-5.6-sol',input: 'Give a concise explanation of how AI works.',});return Response.json(response);};GPT-5.6 Sol, Luna, and Terra are available for all Function types and Agent Runners. You get automatic access to Netlify’s caching, rate limiting, and authentication infrastructure.
Learn more in the AI Gateway documentation and Agent Runners documentation.
-
New sites created on Netlify now use Node.js 24 by default for both builds and Netlify Functions.
Existing sites aren’t affected — they keep using whatever Node.js version they’re currently pinned to, whether that’s set via a
NODE_VERSIONenvironment variable, an.nvmrc/.node-versionfile, or theengines.nodefield inpackage.json.If you want to move an existing site to Node.js 24, follow the Node.js version configuration guide for builds, and the functions runtime version guide for Netlify Functions.
-
Anthropic’s Claude Fable 5 model is once again available through Netlify’s AI Gateway with zero configuration required.
Use the Anthropic SDK directly in your Netlify Functions without managing API keys or authentication. The AI Gateway handles everything automatically. Here’s an example using the Claude Fable 5 model:
import Anthropic from '@anthropic-ai/sdk';export default async () => {const anthropic = new Anthropic();const response = await anthropic.messages.create({model: 'claude-fable-5',max_tokens: 4096,messages: [{role: 'user',content: 'How can AI improve my coding?'}]});return new Response(JSON.stringify(response), {headers: { 'Content-Type': 'application/json' }});};Claude Fable 5 is available for all Function types. You get automatic access to Netlify’s caching, rate limiting, and authentication infrastructure.
Learn more in the AI Gateway documentation.