Next.js security: the CVEs, defaults and holes to check in your app

Next.js protects more than people think: React escapes rendered values, Server Actions reject cross-site POSTs, production source maps are off and only NEXT_PUBLIC_ variables reach the browser. It does not decide who may call your actions and routes, add security headers or patch itself. Run 16.4.5 or 15.5.29 (November 2026) and check authorization next to the data, not only in proxy.

The team behind Keybrum's attacksUpdated 16 min read

In short

  • The 3 November 2026 security release is Next.js 16.4.5 (Active LTS) and 15.5.29 (Maintenance LTS). Both include the fixes for every CVE on this page.
  • Every exported Server Action can be called with a direct POST request, even if no screen uses it. Check the session and the record's owner inside each one.
  • Proxy, called middleware before Next.js 16, is for optimistic redirects. CVEs in 2025 and 2026 let requests get past it, so the real check belongs where the data is read.
  • Any variable named NEXT_PUBLIC_ is written into the JavaScript at build time. A secret behind that prefix is public, and old builds keep it after you remove it.
  • Next.js adds X-Powered-By by default and leaves CSP, HSTS and frame protection to you. Add them in next.config.ts, then check what the live app sends.
On this page

Is Next.js secure? What it protects and what it leaves to you

Next.js is the React framework maintained by Vercel. One codebase holds your pages, your API routes (Route Handlers), your Server Actions and the code that talks to your database, so a Next.js app is a server, not only a website. Everything that depends on your data model stays your job: who owns which record, and which page needs a login. And the framework itself has had serious vulnerabilities, which only an upgrade fixes.

Here is the split, checked against the Next.js documentation in November 2026:

AreaWhat Next.js does for youWhat stays your job
Server ActionsAccepts only POST, compares the Origin header to the host, uses encrypted action ids and drops unused actions from the client bundleChecking the session and the record's owner inside every action, and returning only what the UI needs
Environment variablesKeeps variables on the server unless their name starts with NEXT_PUBLIC_Never putting a secret behind that prefix
Source mapsOff in production builds unless you set productionBrowserSourceMaps: trueLeaving them off
RenderingReact escapes the values you render in JSXAnything passed to dangerouslySetInnerHTML, and third-party scripts
Remote images/_next/image only fetches hosts listed in images.remotePatternsListing exact hosts and paths, without broad wildcards
AuthenticationDocuments the patterns and lets proxy redirect earlyChoosing an auth library and verifying the user where the data is read
Security headersAdds X-Powered-By by default, and documents how to set the protective onesAdding Content-Security-Policy, Strict-Transport-Security and the rest
PatchesShips security fixes for the Active LTS (16.x) and Maintenance LTS (15.x) linesUpgrading, and deploying from the lockfile

Where you host changes a few of these. On Vercel, routing runs in a separate system, which is why the 2025 middleware bypass never reached apps hosted there. For React2Shell, Vercel designed firewall rules with the React team before the CVE was announced and deployed them to all its users. Neither replaces the upgrade: Vercel's own bulletin says WAF rules cannot block every variant and tells everyone to check their versions directly.

The Next.js vulnerabilities that matter, 2024 to November 2026

Most of them hit a place where an app trusts the framework to draw a line: proxy auth, Server Actions, the image optimizer or the cache. In 2026 alone, the GitHub Advisory Database lists five critical remote code execution advisories for next, three of them in image processing. The table lists the ones to know, with the affected and fixed versions from each advisory.

AdvisoryWhat it let a stranger doWho was exposedFixed in
CVE-2024-34351, CVSS 7.5Make your server send requests to a host the attacker picks (server-side request forgery, SSRF) through a Server Action and a forged Host headerSelf-hosted apps on 13.4.0 to 14.1.0 with a Server Action that redirects to a relative path14.1.1
CVE-2025-29927, CVSS 9.1Skip middleware with one internal header, so pages protected only by middleware opened with no sessionSelf-hosted apps that checked auth in middleware; Vercel, Netlify and Cloudflare Workers were not affected15.2.3, 14.2.25, 13.5.9, 12.3.5
CVE-2025-55182 (React2Shell), CVSS 10.0Run code on the server with one request and no loginApp Router apps on Next.js 15.x and 16.x (and 14.3 canaries from canary.77), which bundle the affected React server code (19.0.0, 19.1.0, 19.1.1, 19.2.0). Exploited in the wildNext.js 15.0.5, 15.1.9, 15.2.6, 15.3.6, 15.4.8, 15.5.7, 16.0.7; React 19.0.1, 19.1.2, 19.2.1
CVE-2026-27978, mediumTrigger Server Actions from another site with the visitor's cookies, because Origin: null passed the CSRF check16.0.1 to 16.1.616.1.7
CVE-2026-44575, CVSS 7.5Reach a page protected by middleware or proxy through its .rsc and segment-prefetch URL variantsApp Router apps on 15.2.0 to 15.5.15 and 16.0.0 to 16.2.415.5.16, 16.2.5; with middleware.ts and Turbopack, 15.5.18, 16.2.6 (incomplete fix, CVE-2026-45109)
August 2026 release: CVE-2026-75604 and GHSA-2xp9-vwfh-vxw4, criticalRun code on the server through an attacker-controlled AVIF image the optimizer processes, or on Windows-hosted serversAVIF: 10.0.0 to 15.5.23 and 16.0.0 to 16.3.2. Windows: 13.4.0 to 15.5.23 and 16.0.0 to 16.3.215.5.24, 16.3.3
GHSA-vcvr-r3jv-pc5j, criticalRun code on the server through a next/og image route that puts visitor input into SVG content16.2.0 to 16.3.5, Node.js ImageResponse only16.3.6
CVE-2026-94483, CVSS 6.5Use the image optimizer to reach private IPs through an allow-listed host whose DNS the attacker controls16.0.0 to 16.3.7, only with images.remotePatterns set16.3.8
October 2026 release: GHSA-2464-fhr4-w9xw and GHSA-673q-mjm6-r5xr, criticalRun code on the server through an SVG the image optimizer processes, or through a use cache function that returns typed arrays. A third advisory, CVE-2026-94482, let crafted requests to Server Actions stall the server (13.0.0 to 15.5.27 and 16.0.0 to 16.4.0)SVG: 10.0.0 to 15.5.27 and 16.0.0 to 16.4.0 on glibc Linux. use cache: 16.0.0 to 16.4.0 with Cache Components15.5.28, 16.4.1
November 2026 releaseGet another tenant's or user's cached data with Cache Components and use cache, or read HttpOnly cookie values through the x-middleware-set-cookie header of Edge routesMostly apps with Cache Components enabled; Edge Route Handlers and Edge API routes that set cookies with NextResponse.cookies.set()16.4.5, 15.5.29
Ranges from the GitHub advisories and the Next.js security release posts. Each CVE page has the details and the follow-up fixes.

How to check which Next.js version you run

  1. 1

    Read the installed version, not the range

    package.json may say ^15.2.0; the lockfile decides what ships. Run npm ls next react react-dom (or pnpm why next, yarn why next) in the project.

  2. 2

    Compare it to the current floor

    The 3 November 2026 security release is 16.4.5 for the 16.x line (Active LTS) and 15.5.29 for 15.x (Maintenance LTS). The Next.js support policy asks you to serve production from the latest release of one of those two lines, so a 14.x or older app needs a major upgrade, not a patch. Security releases for 15.x are promised only through 31 January 2027, so plan the move to 16.

  3. 3

    Upgrade and deploy from the lockfile

    Run npm install [email protected] (or [email protected]), commit the lockfile, and make sure your host installs with npm ci or the equivalent, so the version you tested is the version that runs.

  4. 4

    Hear about the next release first

    Next.js usually announces security releases on its blog a week ahead, but it moved the August 2026 one forward for a new critical flaw. Watch the security advisories of the vercel/next.js repository on GitHub.

bash
# What is installed, including nested copies
npm ls next react react-dom

# The image library Next.js uses: 0.35.5 or later (October 2026 SVG advisory)
npm ls sharp

# Upgrade to the November 2026 security release (pick your line)
npm install [email protected]
npm install [email protected]

# Known advisories in your production dependencies
npm audit --omit=dev
Run it in your own project folder.

Next.js middleware auth: why proxy is not enough

Next.js 16 renamed middleware to proxy: the file is now proxy.ts, it exports a proxy function and it runs on the Node.js runtime by default. The middleware.ts convention is deprecated. Either way, the Next.js authentication guide calls a check there optimistic: read the session cookie and redirect, without database queries, because proxy runs on every route, prefetches included. The secure check, against your session store, belongs where the data is read.

Two CVEs show why. CVE-2025-29927 let a request skip middleware with one header. CVE-2026-44575 let App Router requests reach a protected page through URL variants the matcher did not cover, and its advisory gives the lesson as a workaround: enforce authorization in the route or page itself instead of relying on middleware alone. They were not the only ones: in May and July 2026, GitHub published four more middleware or proxy bypass advisories for next, through i18n, dynamic route parameters, Turbopack with a single locale, and the incomplete first fix of CVE-2026-44575. Apps that already checked the user next to the data had nothing behind any of these bypasses.

ts
// proxy.ts: fine as a first filter, wrong as the only one
import { NextResponse, type NextRequest } from 'next/server'

export function proxy(request: NextRequest) {
  if (!request.cookies.get('session')) {
    return NextResponse.redirect(new URL('/login', request.url))
  }
}

export const config = { matcher: ['/dashboard/:path*'] }
This only proves a cookie named session exists. It says nothing about whose invoices the page then loads.
tsx
// lib/dal.ts: the check that counts, next to the data
import 'server-only'
import { cache } from 'react'
import { redirect } from 'next/navigation'
import { getSession } from '@/lib/session' // your auth library

export const requireUser = cache(async () => {
  const session = await getSession() // verified against your session store
  if (!session) redirect('/login')
  return session
})

// app/dashboard/invoices/page.tsx
import { requireUser } from '@/lib/dal'
import { db } from '@/lib/db'
import { InvoiceList } from './invoice-list'

export default async function InvoicesPage() {
  const { userId } = await requireUser()
  const invoices = await db.invoice.findMany({ where: { ownerId: userId } })
  return <InvoiceList invoices={invoices} />
}
Call requireUser() in every page, Route Handler and Server Action that reads private data. import 'server-only' turns an accidental import from a Client Component into a build error.

Server Actions are public endpoints

A Server Action looks like a function call in your component. On the network it is a POST to your app that anyone can send. The Next.js data security guide says it plainly: an exported Server Action is reachable by a direct POST request, even if no screen of your app uses it, and a login check on a page does not extend to the actions defined in it. Next.js encrypts action ids and removes unused actions from the client bundle, which helps when a check is missing, but the ids of the actions your pages call ship in the JavaScript every visitor downloads.

So every action needs two checks: authentication (is someone signed in?) and authorization (may this user touch this record?). Skipping the second is an IDOR: change the id in the request, get or delete someone else's data.

ts
'use server'
import { z } from 'zod'
import { requireUser } from '@/lib/dal'
import { db } from '@/lib/db'

// Bad: anyone who sends this action an id deletes that invoice
export async function deleteInvoiceUnsafe(id: string) {
  await db.invoice.delete({ where: { id } })
}

// Good: validate the input, check the caller, scope the query to their rows
export async function deleteInvoice(input: unknown) {
  const id = z.string().uuid().parse(input)
  const { userId } = await requireUser()
  const { count } = await db.invoice.deleteMany({ where: { id, ownerId: userId } })
  if (count === 0) throw new Error('Not found')
  return { ok: true } // return what the UI needs, never the raw row
}

Against cross-site requests the defaults are good: actions only accept POST, and Next.js aborts the request when the Origin header does not match the host (or X-Forwarded-Host). CVE-2026-27978 was the gap: Next.js treated Origin: null, which sandboxed iframes send, as a missing origin and let it through until 16.1.7. Never add 'null' to experimental.serverActions.allowedOrigins, list only your own domains there if you run behind a reverse proxy, and set SameSite=Strict on sensitive auth cookies, as the advisory suggests.

Secrets: NEXT_PUBLIC_, source maps and server-only code

Next.js copies the value of every variable whose name starts with NEXT_PUBLIC_ into the JavaScript at build time. The name is the only switch. When a Client Component cannot read a variable, adding the prefix makes the error go away, and that is how secret keys end up in bundles. Public is fine for keys designed to be public. Anything else is readable by every visitor from the first deploy, see API keys exposed in the frontend.

Fine behind NEXT_PUBLIC_Never behind NEXT_PUBLIC_
Supabase URL and anon or publishable key (sb_publishable_...)Supabase service role key or secret key (sb_secret_...), see the service role guide
Stripe publishable key (pk_live_...)Stripe secret key (sk_live_...) and webhook secret (whsec_...)
Firebase web config, analytics idsOpenAI, Anthropic or other AI provider keys
Your public site URLDatabase URLs, session or JWT secrets, private keys

To check, build the app and search what the browser receives, not your source:

bash
npm run build

# Every public variable your code references
grep -rhoE "NEXT_PUBLIC_[A-Z0-9_]+" app src lib components 2>/dev/null | sort -u

# Secret key formats in the files sent to browsers
grep -rlE "sk_live_|sk-proj-|sk-ant-|sb_secret_|whsec_|PRIVATE KEY" .next/static
A match in .next/static is a key every visitor can read. Move it to a server-only variable, call the provider from a Route Handler or Server Action, and rotate the key: removing it from the next build does not take it back from the old one.

Two related leaks. Production source maps are off by default, and productionBrowserSourceMaps: true makes Next.js serve your original source next to each JavaScript file, comments and internal routes included. And everything in the public/ folder is served at your site's root, so a .env file or a database export copied there is one URL away, see exposed .env files. Mark the modules that hold secrets or database access with import 'server-only', so importing one from a Client Component fails the build instead of shipping the code.

Next.js security headers

Out of the box, Next.js adds an X-Powered-By header that tells everyone what you run; poweredByHeader: false removes it. The protective headers are left to you, and the Next.js docs show how to set them. The simplest place is headers() in next.config.ts:

ts
// next.config.ts
import type { NextConfig } from 'next'

const securityHeaders = [
  { key: 'Strict-Transport-Security', value: 'max-age=63072000; includeSubDomains; preload' },
  { key: 'X-Content-Type-Options', value: 'nosniff' },
  { key: 'Referrer-Policy', value: 'strict-origin-when-cross-origin' },
  { key: 'Content-Security-Policy', value: "frame-ancestors 'self'; base-uri 'self'; object-src 'none'" },
]

const nextConfig: NextConfig = {
  poweredByHeader: false,
  async headers() {
    return [{ source: '/:path*', headers: securityHeaders }]
  },
}

export default nextConfig
The Strict-Transport-Security value is the one in the Next.js docs. Keep includeSubDomains only if every subdomain serves HTTPS, and read the HSTS preload trap before you keep preload: once a domain is on the preload list, removing it takes months. This CSP covers framing, plugins and base URLs, not scripts.

A strict Content-Security-Policy for scripts needs a nonce: a random value, new on every request, that marks your own inline scripts as allowed. Next.js can generate it in proxy, but its docs say a page must be rendered dynamically to get a nonce, so the pages that use one cannot be static. If that cost is too high, ship the partial policy above first, and try a script policy in Content-Security-Policy-Report-Only before you enforce it. The security headers guide has the full nonce setup and the report-only rollout, with config for Vercel, Netlify and Cloudflare.

The image optimizer and the cache: quieter leaks

/_next/image fetches remote images from your server. Next.js only lets it fetch hosts that match images.remotePatterns and answers 400 to the rest, and since version 16 it refuses addresses on your local network unless you set dangerouslyAllowLocalIP: true. Three things weaken it: broad wildcards; redirects, which the optimizer follows up to 3 times by default without checking the new location against your patterns; and allowed hosts whose DNS someone else controls, the case behind CVE-2026-94483. Pin the list:

ts
// next.config.ts, inside nextConfig
images: {
  remotePatterns: [new URL('https://YOUR_PROJECT.supabase.co/storage/v1/object/public/avatars/**')],
  maximumRedirects: 0,
},
One exact host and path per image source. maximumRedirects exists since Next.js 16.

The optimizer also decodes whatever image it is given, and decoders are written in C. In August 2026 a flaw in libheif, which sharp uses for AVIF, allowed code execution through an attacker-controlled AVIF image, so the patched releases turned AVIF optimization off. In October 2026 a memory flaw in an upstream image library did the same with SVG files on glibc-based Linux. The fix for both is the upgrade, and for the SVG flaw on 15.x it is not enough on its own: 15.5.28 still accepts sharp 0.34, so run npm ls sharp and make sure it shows 0.35.5 or later. The GHSA-2464-fhr4-w9xw page has the commands.

Caching is the other quiet one. A page or Route Handler that returns one user's data must never be stored where the next visitor gets it, whether by use cache, unstable_cache or a CDN in front of the app. Three advisories in the November 2026 release were exactly this: with Cache Components, a result computed for one tenant or user could be served to another. After upgrading, keep per-user data out of shared caches and send Cache-Control: private, no-store on authenticated responses.

What Keybrum tests on a live Next.js app

The checks above read your code. Keybrum reads your deployed app from the outside, the way a stranger would, and keeps a finding only when the behavior is proven: a CVE is never reported from a version number alone. It only attacks apps whose owner proved ownership.

AttackWhat a finding proves
web.nextjs-middleware-bypassA protected page answers with no session when the internal middleware header is sent (CVE-2025-29927) or when it is requested as a router prefetch
web.middleware-path-bypassA page that redirects to login opens through a path variant the matcher misses: double slash, encoded character, case change
web.nextjs-action-csrfServer Actions reject a foreign Origin but accept Origin: null (CVE-2026-27978)
web.nextjs-action-ssrfA Server Action made your server call Keybrum's callback through a forged Host header (CVE-2024-34351)
web.nextjs-image-ssrf/_next/image fetched a unique Keybrum callback URL, so the optimizer reaches hosts it should refuse (the CVE-2026-94483 family)
web.rsc-surfaceYour app answers the React Server Components protocol and ships Server Action ids, so the React2Shell surface is live and the version must be patched. No exploit is sent
web.source-maps, web.env-file, web.security-headersOriginal source or .env files served to anyone, or protective headers missing
web.cache-private-data, web.api-idorA signed-in user's data served to a visitor with no session, or to a second account

Each finding comes with the request that worked and a fix your coding agent reads through Keybrum's MCP server. After the fix, the same attack runs again.

Prompts to give your coding agent

If Cursor, Claude Code or another agent wrote your app, give it these one at a time and read the diff before you merge:

text
1. Upgrade next to 16.4.5 (or 15.5.29 if we stay on 15), update react and react-dom to the versions it expects, run the build and the tests, and commit the lockfile.

2. List every exported Server Action and Route Handler. For each one, show where it checks the session and where it checks that the record belongs to the caller. Add both where missing, through one requireUser() helper in lib/dal.ts marked with import 'server-only'.

3. Keep proxy.ts as an optimistic redirect only. Every page that reads private data must call requireUser() itself.

4. List every NEXT_PUBLIC_ variable and say whether its value is meant to be public. Move any secret to a server-only variable and call the provider from the server.

5. Add security headers in next.config.ts (Strict-Transport-Security, X-Content-Type-Options, Referrer-Policy, a CSP with frame-ancestors), set poweredByHeader: false, and confirm productionBrowserSourceMaps is not enabled.

6. Restrict images.remotePatterns to exact hosts and paths, and set images.maximumRedirects to 0.

Next.js security checklist

  • Next.js 16.4.5 or 15.5.29 or later, confirmed with npm ls next and in the deployed build, and sharp 0.35.5 or later
  • Every Server Action and Route Handler checks the session and the record's owner
  • Proxy (or middleware) only does optimistic redirects; pages check the user themselves
  • No secret behind NEXT_PUBLIC_, and no secret key format in .next/static
  • productionBrowserSourceMaps off, nothing private in public/
  • Strict-Transport-Security, X-Content-Type-Options, Referrer-Policy and a CSP with frame-ancestors sent; X-Powered-By removed
  • images.remotePatterns lists exact hosts, maximumRedirects set
  • Per-user responses never stored in a shared cache
  • experimental.serverActions.allowedOrigins lists only your domains, never 'null'
  • Security advisories of vercel/next.js watched on GitHub
  • On Supabase: RLS on every table, see the Supabase RLS guide

For the parts outside Next.js, the vibe coding security checklist covers the database, payments and AI endpoints, and vibe coding security risks explains where generated apps usually break.

Questions

Is Next.js secure by default?

The framework layer has good defaults: escaped rendering, origin checks on Server Actions, no production source maps, and environment variables that stay on the server unless prefixed. It does not know your data model, so authorization, security headers and secret handling are yours. Like any framework it also has CVEs, so staying on a patched version is part of the job.

What are the most serious Next.js vulnerabilities?

React2Shell (CVE-2025-55182), a CVSS 10.0 remote code execution flaw in React Server Components that was exploited in the wild, and the CVE-2025-29927 middleware bypass, rated 9.1. In 2026, five critical advisories allowed code execution: through AVIF and SVG images in the optimizer, next/og, use cache and Windows hosts. Next.js 16.4.5 and 15.5.29 include the fixes for all of them.

Is middleware auth enough in Next.js?

No. The Next.js docs present proxy (middleware before Next.js 16) as a place for optimistic checks that read the session cookie and redirect. CVEs in 2025 and 2026 let requests get past it, so verify the session and the record's owner in each page, Route Handler and Server Action as well.

How do I add security headers in Next.js?

Return them from the headers() function in next.config.ts for the source /:path*, or set them in proxy when you need a per-request nonce for a Content-Security-Policy. Set poweredByHeader: false to drop X-Powered-By. Then check the live response, since a CDN or host can add or strip headers.

Are NEXT_PUBLIC_ environment variables safe?

They are public by definition: Next.js writes their values into the JavaScript at build time. That is fine for a Supabase publishable key or a Stripe publishable key, and a leak for any secret key. If a secret was ever behind the prefix, rotate it, because old builds still contain it.

Can anyone call my Server Actions?

Yes. Next.js documents that an exported Server Action is reachable by a direct POST request, even if your UI never calls it. The built-in Origin check stops other websites from acting through a visitor's browser; it does not stop someone sending the request from a script. Check authentication and authorization inside every action.

Does hosting on Vercel protect my Next.js app?

Against some framework bugs, partly: Vercel's routing design kept apps hosted there out of reach of CVE-2025-29927, and it deployed firewall rules for React2Shell. It does nothing for a Server Action without an ownership check or a secret behind NEXT_PUBLIC_, and Vercel itself tells users to upgrade.

Sources

  1. 1.November 2026 Security Release, Next.js Blog
  2. 2.How to think about data security in Next.js, Next.js Docs
  3. 3.How to implement authentication in Next.js, Next.js Docs
  4. 4.proxy.js file convention, Next.js Docs
  5. 5.Environment variables, Next.js Docs
  6. 6.productionBrowserSourceMaps, Next.js Docs
  7. 7.headers, Next.js Docs
  8. 8.poweredByHeader, Next.js Docs
  9. 9.How to set a Content Security Policy (CSP), Next.js Docs
  10. 10.Image component (remotePatterns, maximumRedirects), Next.js Docs
  11. 11.Support policy, Next.js
  12. 12.August 2026 Security Release, Next.js Blog
  13. 13.Upcoming Next.js September Security Release, Next.js Blog
  14. 14.Authorization Bypass in Next.js Middleware (GHSA-f82v-jwr5-mffw), GitHub Security Advisory
  15. 15.React Server Components are vulnerable to RCE (GHSA-fv66-9v8q-g76r), GitHub Advisory Database
  16. 16.Next.js is vulnerable to RCE in React flight protocol (GHSA-9qr9-h5gf-34mp), GitHub Advisory Database
  17. 17.CVE-2025-55182, NIST National Vulnerability Database
  18. 18.Next.js Server-Side Request Forgery in Server Actions (GHSA-fr5h-rqp8-mj6g), GitHub Advisory Database
  19. 19.Null origin can bypass Server Actions CSRF checks (GHSA-mq59-m269-xvcx), GitHub Advisory Database
  20. 20.Middleware / Proxy bypass via segment-prefetch routes (GHSA-267c-6grr-h53f), GitHub Advisory Database
  21. 21.Server-Side Request Forgery in Image Optimization (GHSA-cjq9-62q9-8jv4), GitHub Advisory Database
  22. 22.Unauthenticated RCE in Image Optimization API when AVIF files are used (GHSA-2xp9-vwfh-vxw4), GitHub Advisory Database
  23. 23.Unauthenticated RCE on Windows-hosted servers (GHSA-p293-qw3h-jr36), GitHub Advisory Database
  24. 24.Remote Code Execution in next/og ImageResponse (GHSA-vcvr-r3jv-pc5j), GitHub Advisory Database
  25. 25.Unauthenticated RCE in Image Optimization API when SVG files are used (GHSA-2464-fhr4-w9xw), GitHub Advisory Database
  26. 26.Unauthenticated RCE in use cache functions returning typed arrays (GHSA-673q-mjm6-r5xr), GitHub Advisory Database
  27. 27.Denial of Service in App Router using Server Actions (GHSA-p3m5-59mp-jv5r), GitHub Advisory Database
  28. 28.Postmortem on Next.js Middleware bypass, Vercel
  29. 29.React2Shell security bulletin, Vercel

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