GitHub Advisoryadvisory · npm

GHSA-p9j2-gv94-2wf4 Next.js: Server-Side Request Forgery in rewrites via attacker-controlled destination hostname

HIGH Published 2026-07-22 Modified 2026-07-22 Official page ↗
Aliases
CVE-2026-64645
Ecosystem
npm
Packages
next
Severity
High
CVSS vector
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:L/VA:N/SC:L/SI:L/SA:N
Weaknesses
CWE-918
Reviewed
2026-07-22

Affected packages

• npm next: >= 12.0.0, < 15.5.21 → fixed in 15.5.21 • npm next: >= 16.0.0, < 16.2.11 → fixed in 16.2.11

Description

Impact A `rewrites()` or `redirects()` rule that builds its external destination hostname from request-controlled input can be pointed at an arbitrary hostname, regardless of the rule's hostname suffix. For a rewrite, Next.js proxies the request to that arbitrary host and serves the response from the application's origin, leading to Server-Side Request forgery. A `redirects()` rule configured this way is vulnerable to an Open Redirect. This affects any destination that puts a dynamic segment in the hostname, whether from the path: ```javascript // next.config.js module.exports = { async rewrites() { return [ { source: '/:tenant', destination: 'https://:tenant.api.example.com', }, ] }, } ``` or from a `has` capture: ```javascript // next.config.js module.exports = { async rewrites() { return [ { source: '/', has: [{ type: 'query', key: 'region', value: '(?.+)' }], destination: 'https://:region.api.example.com', }, ] }, } ``` Workarounds If you cannot upgrade immediately, do not build the hostname of an external `rewrites()` or `redirects()` destination from user-controlled input. If a dynamic subdomain is required, constrain the value to hostname-safe characters: `value: '(?[a-z0-9-]+)'`.

Related

Alias · CVE (1)

  • CVE-2026-64645 Next.js is a React framework for building full-stack web applications. vulnerability

Weakness · CWE (1)

  • CWE-918 Server-Side Request Forgery weakness

References