Next.js: Middleware / Proxy redirects can be cache-poisoned
Next.js is a React framework for building full-stack web applications. From 12.2.0 to before 15.5.16 and 16.2.5, an external client could send a x-nextjs-data header on a normal request to a path handled by middleware that returns a redirect. When that happened, the middleware/proxy could treat the request as a data request and replace the standard Location redirect header with the internal x-nextjs-redirect header. Browsers do not follow x-nextjs-redirect, so the response became an unusable redirect for normal clients. If the application was deployed behind a CDN or reverse proxy that caches 3xx responses without varying on this header, a single attacker request could poison the cached redirect response for the affected path. Subsequent visitors could then receive a cached redirect response without a Location header, causing a denial of service for that redirect path until the cache entry expired or was purged. This vulnerability is fixed in 15.5.16 and 16.2.5.
Problem Types
| Type | CWE ID | Description |
|---|
| CWE | CWE-349 | CWE-349: Acceptance of Extraneous Untrusted Data With Trusted Data |
Type: CWE
Description: CWE-349: Acceptance of Extraneous Untrusted Data With Trusted Data
Metrics
| Version | Base score | Base severity | Vector |
|---|
| 3.1 | 3.7 | LOW | CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:L |
Version: 3.1
Base score: 3.7
Base severity: LOW
Vector: CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:L