GHSA-673q-mjm6-r5xr: the Next.js use cache RCE, who is affected and how to fix it

GHSA-673q-mjm6-r5xr is a critical (CVSS 9.5) unauthenticated remote code execution flaw in Next.js 16.0.0 to 16.4.0, fixed in 16.4.1. It affects App Router apps with Cache Components when a use cache function returns multiple typed arrays. There is no workaround, and Vercel asks every app on those versions to upgrade. No CVE id is assigned yet.

The team behind Keybrum's attacksUpdated 8 min read
GHSA-673q-mjm6-r5xrcritical · CVSS 9.5
Component
Next.js Cache Components (use cache functions, App Router) (next)
Affected
Next.js 16.0.0 to 16.4.0, in App Router apps with Cache Components and a use cache function that returns multiple typed arrays
Fixed in
16.4.1. Next.js 15 and older are not listed as affected. Latest releases: 16.4.5 and 15.5.29
Published
October 14, 2026
Exploited in the wild
No public report

In short

  • Affected: next 16.0.0 to 16.4.0. Fixed in 16.4.1; 16.4.5 is current. No 15.x version is listed.
  • The advisory's condition: the App Router with Cache Components (cacheComponents: true) and a use cache function that returns multiple typed arrays, such as Uint8Array or Float32Array.
  • GitHub rates it 9.5 Critical (CVSS 4.0). As of 8 November 2026 it has no CVE id, it is not in CISA's KEV catalog, and we found no public report of exploitation and no public proof of concept.
  • There is no workaround. Upgrade even if your code has no matching function, as the advisory asks.
On this page

What GHSA-673q-mjm6-r5xr is

use cache is a directive that tells Next.js to store what a function, a component or a whole file returns, and reuse it across requests. It belongs to Cache Components, the caching model you switch on with cacheComponents: true in next.config. The directive arrived as an experimental feature in Next.js 15 and became stable in 16.0.0, behind that flag.

Cached results are stored in React's own serialization format, which accepts typed arrays: fixed-size arrays of binary numbers such as Uint8Array or Float32Array. The advisory says an App Router app with Cache Components is exposed when it has "a use cache function that returns multiple typed arrays", and files the flaw under CWE-502, deserialization of untrusted data. No login is needed. Remote code execution (RCE) means a stranger runs their own commands on your server, with everything the server can reach: environment variables, database credentials, internal services.

The root cause sits upstream, in the React Server Components transport. React published its own critical advisory the same day, GHSA-xqc2-xf4c-x3h3, for react-server-dom-webpack, react-server-dom-turbopack and react-server-dom-parcel. The Next.js fix, a commit titled "Improve Server Component transport protocol", updates the copies of React's server packages that ship inside next.

Severity and exploitation status

SourceRatingDetail
GitHub and Vercel (CVSS 4.0)9.5 CriticalAV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:N: over the network, no account, no user action. AT:P marks the precondition, the typed-array function.
React upstream advisory GHSA-xqc2-xf4c-x3h39.5 CriticalSame vector. Fixed in the React server packages 19.0.9, 19.1.10, 19.2.9 and 19.3.1
NVDNo recordNo CVE id assigned as of 8 November 2026
CISA KEV catalogNot listedCatalog version 2026.11.06, checked 8 November 2026. KEV only lists flaws that have a CVE id.
Public reportsNo exploitation reportedThe Cloud Security Alliance found none as of 15 October. We found none, and no public proof of concept, as of 8 November.

React and Netlify both describe the precondition as rare. React says it "only affects extremely rare cases where responses transport multiple typed arrays and an attacker-controlled value". Netlify calls it "an unusual configuration not expected in normally functioning applications". For an app that matches, the impact is still full code execution.

Who is affected

Per the advisory, your app is exposed when all three of these are true:

  1. It runs next 16.0.0 to 16.4.0.
  2. It uses the App Router with Cache Components enabled, which means cacheComponents: true in next.config. Since 16.0.0, use cache only works with that flag.
  3. At least one use cache function, component or file returns multiple typed arrays.

The advisory sets no condition on hosting or operating system, unlike the SVG flaw fixed in the same release, which needs glibc-based Linux. Cache Components requires the Node.js runtime, so the cached function runs in your server's Node.js process wherever that process lives.

SetupWhat applies
Self-hosted: next start, Docker, a VPSAffected when the three conditions hold.
NetlifyNetlify says apps that meet the conditions are affected on its platform and that upgrading Next.js resolves it.
VercelNeither the advisory nor any Vercel statement we found says Vercel-hosted apps are shielded. Treat them as affected and upgrade.
16.x without Cache ComponentsOutside the advisory's conditions. Upgrade anyway: the same release fixes two other flaws.
Next.js 15 and olderNot listed as affected, and the 15.5.28 release notes do not include this advisory. Upgrade to 15.5.29 for the other fixes.

The advisory still asks every app on an affected version to upgrade "even if your application does not have similar functions". A typed array can hide inside a nested object or come from a library you did not write.

How to check your Next.js version

Read the version your lockfile resolves, not the range in package.json: "next": "^16.2.0" can install any 16.x from 16.2.0 up. At the root of the project:

bash
# The installed version, from the project root
npm ls next
pnpm why next
yarn why next

# Or straight from the lockfile
grep -A2 '"node_modules/next"' package-lock.json
grep -E "^  '?/?next@" pnpm-lock.yaml
16.0.0 to 16.4.0 is affected when the code conditions below hold. 16.4.1 and later are fixed.

In a monorepo, check each app. npm audit reads the GitHub Advisory Database, which only published the reviewed record on 22 October, a week after the fix, so an audit from mid-October may have missed it. Run it again.

How to find use cache functions in your code

This search tells you how urgent the upgrade is, not whether to do it. Run it in your own project:

bash
# Is Cache Components on?
grep -n "cacheComponents" next.config.*

# Every file with a use cache directive (use cache: remote and use cache: private included)
grep -rnE "^\s*['\"]use cache" . \
  --include='*.ts' --include='*.tsx' --include='*.js' --include='*.jsx' --include='*.mjs' \
  --exclude-dir=node_modules --exclude-dir=.next

# In those files, the lines that mention typed arrays, Buffers or raw bytes
grep -rlZE "^\s*['\"]use cache" . \
  --include='*.ts' --include='*.tsx' --include='*.js' --include='*.jsx' --include='*.mjs' \
  --exclude-dir=node_modules --exclude-dir=.next \
  | xargs -0 -r grep -nHE "(Big)?U?[Ii]nt(8|16|32|64)(Clamped)?Array|Float(16|32|64)Array|Buffer|arrayBuffer"
A directive at the top of a file caches every export in that file, so read them all.

For each match, read what the function returns, including values nested in objects and arrays. Look for:

  • Typed arrays by name: Uint8Array, Int32Array, Float32Array, Float64Array, BigInt64Array and their siblings. A TypeScript return type that names one is the fastest tell.
  • Node.js Buffer values. The Node.js docs describe Buffer as a subclass of Uint8Array, and fs.readFile without an encoding returns one, as does sharp(...).toBuffer().
  • Bytes read from a response, such as new Uint8Array(await res.arrayBuffer()) after a fetch.
  • Values passed through from a database driver or SDK that returns binary columns as Buffer or Uint8Array, where the name never appears in your code.

A match does not prove your app can be exploited, and no match does not clear it. If a cached function on a public server returns several typed arrays, upgrade first, then work through the checklist below.

How to fix GHSA-673q-mjm6-r5xr

  1. 1

    Upgrade Next.js

    16.4.1 is the first fixed release. Install the latest 16.x instead, 16.4.5 from the 3 November 2026 security release: npm install [email protected], pnpm add [email protected], yarn add [email protected] or bun add [email protected].

  2. 2

    Upgrade next, not only react

    The fix ships inside the next package, in its bundled copies of React's server packages. Bumping react or react-dom alone leaves those copies as they were.

  3. 3

    Commit the lockfile and redeploy

    The fix reaches production only through the lockfile. If you build a Docker image, make sure the install step does not come from a stale cache.

  4. 4

    Retire old deployments

    Deploy previews, branch deploys and staging copies keep the old version while they stay online. Netlify warns about this for its previews, and it holds on any host that keeps old builds reachable.

What to check after upgrading

  • npm ls next, or the pnpm or yarn equivalent, shows 16.4.1 or later for every app in the repository.
  • Production was rebuilt from the new lockfile, and old previews and branch deploys are deleted or rebuilt.
  • npm audit no longer lists GHSA-673q-mjm6-r5xr.
  • If a cached function returned typed arrays on a public server before the upgrade, review that server's logs for the period and rotate the secrets it held if you cannot rule out misuse.

The November release that brought 16.4.5 also fixed advisories where Cache Components served one tenant's cached content to another. The Next.js security guide covers keeping per-user data out of shared caches.

  • GHSA-2464-fhr4-w9xw: the other critical fix in 16.4.1, code execution through SVG images in the image optimizer, also patched in 15.5.28.
  • CVE-2026-94482: the Server Actions denial of service fixed in the same release.
  • CVE-2025-55182, React2Shell: an earlier code execution flaw in how React Server Components decode requests, listed in CISA's KEV catalog.
  • CVE-2026-94483: the image optimizer SSRF fixed in 16.3.8.

Timeline

DateEvent
8 October 2026Next.js announces an out-of-band security update for 14 October: two critical and one high severity fix in upstream dependencies.
14 October 2026React publishes GHSA-xqc2-xf4c-x3h3. Vercel publishes GHSA-673q-mjm6-r5xr in the Next.js repository, crediting the researcher evolutionstorm, and ships the fix in 16.4.1. 15.5.28 ships the same day for the other two flaws.
16 October 2026The Cloud Security Alliance reports no public exploitation as of 15 October and notes the advisory was not yet in npm's advisory feed.
22 October 2026The GitHub Advisory Database publishes the reviewed record, which npm audit and Dependabot read.
3 November 2026The November security release ships 16.4.5 and 15.5.29.
8 November 2026Still no CVE id. Not in CISA's KEV catalog (version of 6 November).

Questions

Is Next.js 15 affected by GHSA-673q-mjm6-r5xr?

Not according to the advisory, which lists only next 16.0.0 to 16.4.0, and the 15.5.28 release notes do not include it. Next.js 15 is affected by the SVG image optimizer flaw fixed the same day, so upgrade to the latest 15.5 release, 15.5.29 today.

What is the Next.js use cache RCE?

It is a remote code execution flaw in Next.js 16 that affects App Router apps with Cache Components when a use cache function returns multiple typed arrays. No login is needed. GitHub rates it 9.5 Critical, and Next.js 16.4.1 fixes it.

Does it affect apps hosted on Vercel?

The advisory makes no hosting exception, and we found no Vercel statement that its platform blocks it. The fix is a dependency upgrade, so upgrade and redeploy wherever you host.

Is there a CVE for GHSA-673q-mjm6-r5xr?

Not as of 8 November 2026: the GitHub record lists no CVE id and NVD has no entry. Search for it by its GHSA id, which npm audit and Dependabot use.

Am I affected if Cache Components is off?

Not under the advisory's conditions: in Next.js 16, use cache needs cacheComponents: true. Upgrade anyway, because 16.4.1 also fixes the SVG code execution flaw and the Server Actions denial of service.

Is there a workaround for the Next.js use cache vulnerability?

No. The advisory says there is no known workaround for apps with such functions, and asks every app on an affected version to upgrade, even without similar functions.

Does Keybrum test for GHSA-673q-mjm6-r5xr?

No. Proving it would mean running code on your server, and Keybrum never runs remote code execution payloads.

Sources

  1. 1.GHSA-673q-mjm6-r5xr: Unauthenticated Remote Code Execution in use cache functions returning typed arrays, Vercel, GitHub Security Advisory
  2. 2.GHSA-673q-mjm6-r5xr, GitHub Advisory Database
  3. 3.GHSA-xqc2-xf4c-x3h3: Unauthenticated Remote Code Execution in React Server Components, React, GitHub Security Advisory
  4. 4.Next.js v16.4.1 release notes, vercel/next.js on GitHub
  5. 5.Improve Server Component transport protocol, vercel/next.js on GitHub
  6. 6.Next.js Security Update for Upstream Vulnerabilities, Next.js Blog
  7. 7.Upcoming Next.js Security Update for Upstream Vulnerabilities, Next.js Blog
  8. 8.November 2026 Security Release, Next.js Blog
  9. 9.use cache, Next.js Docs
  10. 10.cacheComponents, Next.js Docs
  11. 11.Next.js and React security release (Oct 2026): what to know, Netlify
  12. 12.Next.js out-of-band patch: critical RCE in use cache and librsvg, Cloud Security Alliance
  13. 13.Known Exploited Vulnerabilities Catalog, CISA
  14. 14.Reducing the significant risk of known exploited vulnerabilities (KEV criteria), CISA
  15. 15.Buffer, Node.js Docs
  16. 16.next: versions, npm

Your app is public. So are its mistakes.

Check what any attacker can already see in it, free, in ten seconds. The full attack, with proof and fixes: €49 once, or €29 a month on a plan.

or continue with Google or GitHub