Next.js Cache Poisoning
Affected releases · next
- 14.x14.0.0 – 14.2.9Fixed in 14.2.10
- 13.x13.5.1 – 13.5.6Fixed in 13.5.7
On 14.x, the newest line:
npm install next@14.2.10Not affected
16.0.0 – 16.4.2
45 releases, latest
Affected
14.0.0 – 14.2.9
20 releases
Fixed
14.2.10 – 14.2.35
26 releases
Not affected
13.0.0 – 13.5.0
45 releases
Affected
13.5.1 – 13.5.6
6 releases
Fixed
13.5.7 – 13.5.11
5 releases
Is your project affected?
Paste your package.json, or type the range you declare for next. It is read in your browser and sent nowhere.
What happens
Impact
By sending a crafted HTTP request, it is possible to poison the cache of a non-dynamic server-side rendered route in the pages router (this does not affect the app router). When this crafted request is sent it could coerce Next.js to cache a route that is meant to not be cached and send a Cache-Control: s-maxage=1, stale-while-revalidate header which some upstream CDNs may cache as well.
To be potentially affected all of the following must apply:
Next.js between 13.5.1 and 14.2.9
Using pages router
Using non-dynamic server-side rendered routes e.g.
pages/dashboard.tsxnotpages/blog/[slug].tsx
The below configurations are unaffected:
Deployments using only app router
Deployments on Vercel are not affected
Patches
This vulnerability was resolved in Next.js v13.5.7, v14.2.10, and later. We recommend upgrading regardless of whether you can reproduce the issue or not.
Workarounds
There are no official or recommended workarounds for this issue, we recommend that users patch to a safe version.
Credits
Allam Rachid (zhero_)
Henry Chen