React has always marketed itself as secure by default — JSX auto-escapes output, the virtual DOM creates a layer of indirection between user data and the real DOM, and explicit APIs like dangerouslySetInnerHTML signal where developers need to be careful. For most of React's history, this held. Then December 2025 arrived. The React team disclosed CVE-2025-55182, dubbed React2Shell, a pre-authentication remote code execution vulnerability scoring CVSS 10.0 — the maximum possible severity — affecting every application that had adopted React Server Components. Over the next five months, five more CVEs followed: source code disclosure, and three separate denial-of-service vulnerabilities that can crash RSC applications with a handful of crafted HTTP requests. Cloudflare added WAF-level mitigations as recently as May 6, 2026.

React s’est toujours présenté comme sécurisé par défaut — JSX échappe automatiquement les sorties, le DOM virtuel crée une couche d’indirection entre les données utilisateur et le vrai DOM, et des APIs explicites comme dangerouslySetInnerHTML signalent aux développeurs les zones à risque. Pendant la majeure partie de l’histoire de React, cela a tenu. Puis décembre 2025 est arrivé. L’équipe React a divulgué CVE-2025-55182, surnommée React2Shell, une vulnérabilité d’exécution de code à distance pré-authentification avec un score CVSS 10.0 — la sévérité maximale — affectant toutes les applications ayant adopté React Server Components. Au cours des cinq mois suivants, cinq autres CVE ont suivi : divulgation de code source et trois vulnérabilités de déni de service. Cloudflare a ajouté des atténuations WAF aussi récemment que le 6 mai 2026.

React in 2026 — The World’s Largest Frontend Attack Surface

React en 2026 — La Plus Grande Surface d’Attaque Frontend au Monde

React is not just popular — it dominates frontend development at a scale no other framework approaches. According to the Stack Overflow Developer Survey 2025, 44.7% of all professional developers use React, more than twice the adoption of Angular (18.2%). On npm, React averages over 22 million downloads per week, and some tracking tools report peaks above 28 million. Over 11 million websites worldwide run React, representing roughly 70% of all websites using a JavaScript framework. Nearly half (48.4%) of daily React users are already on React 19. The react-server-dom-webpack package, which is the primary vector for the RSC CVEs described in this article, is pulled into every Next.js App Router, Remix (RSC mode), and Parcel RSC deployment globally.

React n’est pas seulement populaire — il domine le développement frontend à une échelle qu’aucun autre framework n’approche. Selon le Stack Overflow Developer Survey 2025, 44,7 % de tous les développeurs professionnels utilisent React, plus du double de l’adoption d’Angular (18,2 %). Sur npm, React atteint en moyenne plus de 22 millions de téléchargements par semaine. Plus de 11 millions de sites web tournent sous React, représentant environ 70 % de tous les sites utilisant un framework JavaScript. Près de la moitié (48,4 %) des utilisateurs React quotidiens sont déjà sur React 19. Le package react-server-dom-webpack, vecteur principal des CVE RSC décrites dans cet article, est inclus dans chaque déploiement Next.js App Router, Remix (mode RSC) et Parcel RSC.

44.7%
Professional developer adoption
Adoption par les développeurs professionnels
Source: Stack Overflow Developer Survey, 2025
22M+
npm downloads per week
Téléchargements npm par semaine
Source: npmjs.com stats, 2026
11M+
Websites powered by React worldwide
Sites web propulsés par React dans le monde
Source: ouranostech.com React statistics, 2026
6
CVEs disclosed in Dec 2025 – May 2026
CVE divulguées de déc. 2025 à mai 2026
Source: react.dev Security Advisories, NVD, 2025–2026

CVE-2025-55182 — React2Shell: Unauthenticated RCE via React Server Components (CVSS 10.0)

CVE-2025-55182 — React2Shell : RCE Non Authentifié via React Server Components (CVSS 10.0)

Disclosed on December 3, 2025, CVE-2025-55182 is the most severe React vulnerability ever published. It scores CVSS 10.0 — the theoretical maximum — and carries the vector AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H: network-accessible, low complexity, no privileges required, no user interaction, with critical impact on confidentiality, integrity, and availability. It was given the nickname React2Shell by Microsoft and Unit 42 researchers who discovered active exploitation within days of the advisory.

Divulguée le 3 décembre 2025, CVE-2025-55182 est la vulnérabilité React la plus grave jamais publiée. Elle obtient un score CVSS 10.0 — le maximum théorique — avec le vecteur AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H : accessible par le réseau, faible complexité, aucun privilège requis, aucune interaction utilisateur, avec un impact critique sur la confidentialité, l’intégrité et la disponibilité. Elle a été surnommée React2Shell par les chercheurs Microsoft et Unit 42.

Root Cause: Server Action Deserialization Without Origin Validation

Cause Racine : Désérialisation des Server Actions sans Validation d’Origine

React Server Components introduce a new paradigm: Server Actions — functions marked with "use server" that run on the server and can be invoked directly by the client. The vulnerability lies in how RSC handled the serialization protocol for these actions. The RSC wire protocol deserializes client-supplied payloads on the server using a custom binary format. In versions before React 19.0.2, there was no validation that the incoming request originated from the same application's client bundle. An attacker could craft arbitrary RSC wire protocol payloads that, when deserialized server-side, achieved remote code execution. No session, no CSRF token, no authentication — a single HTTP POST to the Server Action endpoint was sufficient.

React Server Components introduit un nouveau paradigme : les Server Actions — des fonctions marquées "use server" qui s’exécutent côté serveur et peuvent être invoquées directement par le client. La vulnérabilité réside dans la gestion du protocole de sérialisation de ces actions. Le protocole RSC désérialise les charges utiles envoyées par le client en utilisant un format binaire personnalisé. Dans les versions antérieures à React 19.0.2, il n’y avait aucune validation que la requête entrante provenait du bundle client de la même application. Un attaquant pouvait créer des charges utiles RSC arbitraires qui, lors de la désérialisation côté serveur, permettaient une exécution de code à distance.

CVE-2025-55182 (React2Shell) CVSS 10.0 — Critical
TypeType: Unauthenticated Remote Code Execution via RSC wire protocol deserialization
Affected packagesPackages affectés: react (19.0.0–19.0.1), react-server-dom-webpack, react-server-dom-parcel, react-server-dom-turbopack
Patched inCorrigé dans: React 19.0.2 (Dec 5, 2025), Next.js 15.1.4+
Exploitation detectedExploitation détectée: December 5, 2025 — coin miners (XMRig), cloud credential theft (AWS/GCP metadata endpoints)
Notable impactImpact notable: 766 Next.js servers confirmed compromised by April 2026 (The Hacker News / Unit 42)

Exploitation activity was detected as early as December 5, 2025 — just 48 hours after the advisory was published. Unit 42 (Palo Alto Networks) observed threat actors delivering XMRig coin miners, querying cloud instance metadata endpoints at 169.254.169.254 to steal AWS and GCP credentials, and deploying remote access tools. By April 2026, The Hacker News and Unit 42 reporting confirmed that at least 766 Next.js servers had been demonstrably compromised. This makes React2Shell one of the fastest-exploited critical web framework vulnerabilities on record.

L’exploitation active a été détectée dès le 5 décembre 2025 — seulement 48 heures après la publication de l’advisory. Unit 42 (Palo Alto Networks) a observé des acteurs malveillants déployant des mineurs XMRig, interrogeant les endpoints de métadonnées cloud à 169.254.169.254 pour voler des credentials AWS et GCP, et déployant des outils d’accès à distance. En avril 2026, The Hacker News et Unit 42 ont confirmé qu’au moins 766 serveurs Next.js avaient été démonstrément compromis. Cela fait de React2Shell l’une des vulnérabilités critiques de framework web exploitées le plus rapidement jamais enregistrées.

CVE-2025-55183 — Source Code Exposure via RSC Endpoint (CVSS 5.3)

CVE-2025-55183 — Divulgation de Code Source via l’Endpoint RSC (CVSS 5.3)

Disclosed alongside React2Shell on December 3, 2025, CVE-2025-55183 received a CVSS score of 5.3 (Medium) but represents a significant confidentiality risk for production deployments. The vulnerability allowed unauthenticated HTTP requests to specific RSC endpoints to retrieve server-side source code that should never be transmitted to the client. React Server Components serialize component trees for transmission over the wire — in vulnerable versions, this serialization process could inadvertently include source maps, internal module paths, and in some configurations, fragments of server-side business logic or configuration data.

Divulguée en même temps que React2Shell le 3 décembre 2025, CVE-2025-55183 a reçu un score CVSS de 5.3 (Medium) mais représente un risque de confidentialité significatif. La vulnérabilité permettait à des requêtes HTTP non authentifiées vers des endpoints RSC spécifiques de récupérer du code source côté serveur qui ne devrait jamais être transmis au client. Dans les versions vulnérables, ce processus de sérialisation pouvait inclure par inadvertance des source maps, des chemins de modules internes, et dans certaines configurations, des fragments de logique métier ou de données de configuration côté serveur.

CVE-2025-55183 CVSS 5.3 — Medium
TypeType: Information Disclosure — server-side source code exposure via RSC wire format
AffectedAffecté: react-server-dom-webpack, react-server-dom-parcel, react-server-dom-turbopack (all pre-19.0.2)
Patched inCorrigé dans: React 19.0.2, Next.js 15.1.4
RiskRisque: Internal architecture exposure facilitates targeted follow-on attacks

The RSC Denial-of-Service Chain: CVE-2025-55184, CVE-2025-67779, CVE-2026-23864, CVE-2026-23870

La Chaîne DoS RSC : CVE-2025-55184, CVE-2025-67779, CVE-2026-23864, CVE-2026-23870

After patching the RCE and information disclosure CVEs in December 2025, the React team and independent security researchers discovered that the RSC deserialization layer contained additional denial-of-service vulnerabilities that persisted even in the patched versions. These were disclosed in waves through January and May 2026, demonstrating a pattern of systematic under-testing of the RSC server function endpoint deserialization path.

Après avoir corrigé les CVE RCE et de divulgation en décembre 2025, l’équipe React et des chercheurs indépendants ont découvert que la couche de désérialisation RSC contenait des vulnérabilités de déni de service supplémentaires persistant même dans les versions corrigées. Ces vulnérabilités ont été divulguées en vagues jusqu’en janvier et mai 2026, démontrant un manque systématique de tests sur le chemin de désérialisation des Server Action endpoints.

CVE-2025-55184 & CVE-2025-67779 — Initial DoS (CVSS 7.5)

CVE-2025-55184 & CVE-2025-67779 — DoS Initial (CVSS 7.5)

Disclosed on December 11, 2025, CVE-2025-55184 and CVE-2025-67779 both score CVSS 7.5 (High). Specially crafted HTTP requests to Server Function endpoints trigger excessive CPU usage and/or server-side memory exhaustion. Unlike traditional volumetric DDoS, these are application-layer DoS vulnerabilities: a small number of malicious requests — potentially a single one — can cause disproportionate resource consumption, bringing down an RSC deployment even against upstream rate limiting designed for conventional traffic.

Divulguées le 11 décembre 2025, CVE-2025-55184 et CVE-2025-67779 obtiennent toutes deux un score CVSS 7.5 (High). Des requêtes HTTP spécialement créées vers les endpoints des Server Functions déclenchent une utilisation excessive du CPU et/ou un épuisement mémoire côté serveur. Contrairement au DDoS volumique traditionnel, il s’agit de vulnérabilités DoS applicatives : un petit nombre de requêtes malveillantes peut provoquer une consommation de ressources disproportionnée.

CVE-2026-23864 — Memory Exhaustion in RSC (CVSS 7.5, January 2026)

CVE-2026-23864 — Épuisement Mémoire dans RSC (CVSS 7.5, Janvier 2026)

Disclosed on January 26, 2026, CVE-2026-23864 (CVSS 7.5) addresses multiple DoS vulnerabilities in React Server Components triggered by sending specially crafted HTTP requests to Server Function endpoints. These could lead to server crashes, out-of-memory exceptions, or excessive CPU usage. Notably, this CVE existed in React versions that had already been patched for React2Shell — demonstrating that December 2025's fix was incomplete with respect to the RSC deserialization attack surface. Vercel published its own incident summary and Akamai researchers provided detailed technical analysis confirming real-world exploitability.

Divulguée le 26 janvier 2026, CVE-2026-23864 (CVSS 7.5) couvre plusieurs vulnérabilités DoS dans React Server Components déclenchées par des requêtes HTTP spécialement créées vers les endpoints des Server Functions. Elles peuvent entraîner des crashs serveur, des exceptions out-of-memory, ou une utilisation CPU excessive. Cette CVE existait dans des versions React déjà corrigées pour React2Shell — démontrant que le correctif de décembre 2025 était incomplet sur la surface d’attaque de désérialisation RSC.

CVE-2026-23864 CVSS 7.5 — High
TypeType: Denial of Service — server crash / out-of-memory / CPU exhaustion via RSC deserialization
Affected versionsVersions affectées: React 19.0.x, 19.1.x, 19.2.x — Next.js 13.x, 14.x, 15.x, 16.x
Patched inCorrigé dans: React 19.0.6, 19.1.7, 19.2.6 — Next.js 15.5.16, 16.2.5
DisclosedDivulguée: January 26, 2026

CVE-2026-23870 — CPU Exhaustion via Crafted HTTP Requests (CVSS 7.5, 2026)

CVE-2026-23870 — Épuisement CPU via Requêtes HTTP Craftées (CVSS 7.5, 2026)

The most recent RSC DoS vulnerability, CVE-2026-23870 (CVSS 7.5), targets the server function endpoint handling in three React Server Components packages: react-server-dom-webpack, react-server-dom-parcel, and react-server-dom-turbopack. It enables low-bandwidth, application-layer denial of service by forcing disproportionate server-side computation during request deserialization. Imperva and ZeroPath published analyses confirming that relatively small numbers of malicious requests can create significant backend resource exhaustion, making conventional rate limiting insufficient as a standalone defense. Cloudflare added WAF-level mitigations on May 6, 2026 — the most recent public response to this vulnerability.

La plus récente vulnérabilité DoS RSC, CVE-2026-23870 (CVSS 7.5), cible la gestion des endpoints de fonctions serveur dans trois packages React Server Components : react-server-dom-webpack, react-server-dom-parcel et react-server-dom-turbopack. Elle permet un déni de service applicatif à faible bande passante en forçant un calcul côté serveur disproportionné lors de la désérialisation des requêtes. Imperva et ZeroPath ont publié des analyses confirmant qu’un faible nombre de requêtes malveillantes peut créer une épuisement significatif des ressources backend. Cloudflare a ajouté des atténuations WAF le 6 mai 2026.

CVE-2026-23870 CVSS 7.5 — High
TypeType: Denial of Service — CPU exhaustion via application-layer HTTP request deserialization
Affected packagesPackages affectés: react-server-dom-webpack, react-server-dom-parcel, react-server-dom-turbopack
Affected frameworksFrameworks affectés: All Next.js App Router deployments versions 13.x – 16.x
WAF mitigationAtténuation WAF: Cloudflare added mitigations May 6, 2026

Client-Side Risks: dangerouslySetInnerHTML and Beyond

Risques Côté Client : dangerouslySetInnerHTML et Au-Delà

Separate from the RSC vulnerabilities, React codebases face persistent client-side security risks that are architectural rather than CVE-based. React's JSX auto-escaping protects developers from most XSS vectors — but several APIs and patterns deliberately bypass those protections, and their misuse is extremely common.

Indépendamment des vulnérabilités RSC, les codebases React font face à des risques de sécurité côté client persistants de nature architecturale plutôt que basés sur des CVE. L’échappement automatique JSX protège les développeurs contre la plupart des vecteurs XSS — mais plusieurs APIs et patterns contournent délibérément ces protections, et leur mauvaise utilisation est extrêmement courante.

dangerouslySetInnerHTML — The Persistent XSS Sink

dangerouslySetInnerHTML — Le Sink XSS Persistant

dangerouslySetInnerHTML is React’s escape hatch for injecting raw HTML directly into the DOM, bypassing JSX sanitization entirely. A 2024 GitGuardian analysis of public repositories found that dangerouslySetInnerHTML appears in over 28% of React codebases handling user-generated content, and fewer than 10% of those usages included a sanitization step. The correct pattern requires sanitizing with a library like DOMPurify before passing content to the prop:

dangerouslySetInnerHTML est l’échappatoire React pour injecter du HTML brut directement dans le DOM, contournant entièrement la protection JSX. Une analyse GitGuardian 2024 de dépôts publics a constaté que dangerouslySetInnerHTML apparaît dans plus de 28 % des codebases React gérant du contenu utilisateur, et moins de 10 % de ces utilisations incluaient une étape de désinfection. Le pattern correct exige de désinfecter avec une bibliothèque comme DOMPurify avant de passer le contenu à la prop :

// ❌ VULNERABLE — Never do this
function UserPost({ content }) {
  return <div dangerouslySetInnerHTML={{ __html: content }{"}"}} />;
}

// ✅ SAFE — Always sanitize first
import DOMPurify from 'dompurify';

function UserPost({ content }) {
  const clean = DOMPurify.sanitize(content, {
    ALLOWED_TAGS: ['b', 'i', 'em', 'strong', 'a', 'p'],
    ALLOWED_ATTR: ['href', 'title'],
    ALLOW_DATA_ATTR: false
  });
  return <div dangerouslySetInnerHTML={{ __html: clean }{"}"}} />;
}

Insecure Token Storage — localStorage vs. httpOnly Cookies

Stockage Insécurisé des Tokens — localStorage vs. Cookies httpOnly

A common React architecture pattern stores JWTs or session tokens in localStorage. This is a critical security mistake: any JavaScript running on the page — including injected XSS payloads, compromised third-party scripts, or npm package supply chain attacks — can read localStorage. A single XSS vulnerability in a React app with tokens in localStorage becomes an instant credential theft incident. The correct approach is server-set httpOnly; Secure; SameSite=Strict cookies, which are inaccessible to JavaScript:

Un pattern d’architecture React courant stocke les JWTs ou tokens de session dans localStorage. C’est une erreur de sécurité critique : tout JavaScript exécuté sur la page — y compris les payloads XSS injectés, les scripts tiers compromis, ou les attaques de supply chain npm — peut lire localStorage. La bonne approche est les cookies httpOnly; Secure; SameSite=Strict posés par le serveur, inaccessibles au JavaScript :

// ❌ VULNERABLE — Token accessible to any script
localStorage.setItem('token', jwtToken);

// ✅ SAFE — Set from the server side (Node.js/Express example)
res.cookie('session', token, {
  httpOnly: true,    // Not accessible via document.cookie
  secure: true,      // HTTPS only
  sameSite: 'Strict' // No cross-site requests
});

React Server Components: The New Trusted Boundary

React Server Components : La Nouvelle Frontière de Confiance

RSC introduce a server/client boundary that is conceptually similar to a traditional API layer but with important security differences. Server Components can access databases, file systems, and environment variables directly — they never run in the browser. However, any data passed from a Server Component to a Client Component via props becomes part of the RSC wire payload that is transmitted to the browser. This means developers must be careful not to accidentally include sensitive fields:

Les RSC introduisent une frontière serveur/client conceptuellement similaire à une couche API traditionnelle mais avec des différences de sécurité importantes. Les Server Components peuvent accéder directement aux bases de données, systèmes de fichiers et variables d’environnement — ils ne s’exécutent jamais dans le navigateur. Cependant, toute donnée passée d’un Server Component à un Client Component via les props devient partie de la charge utile RSC transmise au navigateur :

// ❌ VULNERABLE — Entire user object passed to client (exposes passwordHash, etc.)
// Server Component
async function UserProfile({ userId }) {
  const user = await db.users.findById(userId); // Full DB row
  return <ClientProfile user={user} />;          // ALL fields sent to browser
}

// ✅ SAFE — Only expose fields the UI actually needs
async function UserProfile({ userId }) {
  const user = await db.users.findById(userId);
  return <ClientProfile user={{ name: user.name, avatar: user.avatarUrl }{"}"}} />;
}

React Dependency Supply Chain Risk

Risque Supply Chain des Dépendances React

React itself is secure, but a typical React application has hundreds of transitive npm dependencies. According to Synopsys’ 2025 Open Source Security and Risk Analysis, 96% of commercial codebases contain open-source components, and 84% contain at least one known vulnerability. The npm registry surpassed 2.5 million packages in 2025, and every package added to a React project expands the attack surface. The RSC vulnerabilities described above were not in user code — they were in react itself. Your monitoring strategy must therefore cover not only your direct dependencies but also React’s own packages.

React lui-même est sécurisé, mais une application React typique compte des centaines de dépendances npm transitives. Selon l’analyse Open Source Security and Risk Analysis de Synopsys 2025, 96 % des codebases commerciales contiennent des composants open source, et 84 % en contiennent au moins un avec une vulnérabilité connue. Le registre npm a dépassé 2,5 millions de packages en 2025, et chaque package ajouté à un projet React étend la surface d’attaque. Les vulnérabilités RSC décrites ci-dessus n’étaient pas dans le code utilisateur — elles étaient dans react lui-même.

React Security Hardening Guide 2026

Guide de Durcissement React 2026

1 — Upgrade React and Next.js Immediately

1 — Mettre à Jour React et Next.js Immédiatement

If you are running any React 19.x version below 19.0.6 / 19.1.7 / 19.2.6, or any Next.js App Router version below 15.5.16 / 16.2.5, you are exposed to CVE-2026-23864. React 18.x and earlier are not affected by the RSC CVEs (RSC is only in React 19+), but you should still be on a supported version for general security patches.

Si vous utilisez une version React 19.x inférieure à 19.0.6 / 19.1.7 / 19.2.6, ou une version Next.js App Router inférieure à 15.5.16 / 16.2.5, vous êtes exposé à CVE-2026-23864. React 18.x et antérieur ne sont pas affectés par les CVE RSC (RSC n’est disponible que dans React 19+), mais vous devriez quand même être sur une version supportée.

# Check your current React version
cat package.json | grep '"react"'
cat package-lock.json | grep '"react"' | head -5

# Upgrade React and Next.js
npm install react@latest react-dom@latest next@latest

# Verify the installed version
node -e "console.log(require('react/package.json').version)"

2 — Rate-Limit Server Action Endpoints

2 — Limiter le Débit des Endpoints Server Action

CVE-2026-23870 demonstrates that even patched RSC versions can be targeted by low-bandwidth DoS attacks at the application layer. Conventional volumetric rate limiting is insufficient — you need to rate limit specifically on the Server Action endpoint pattern. In Next.js, Server Actions are sent as POST requests with the header Next-Action: <action-id>. Configure your WAF or reverse proxy to enforce strict limits on these requests:

CVE-2026-23870 démontre que même les versions RSC patchées peuvent être ciblées par des attaques DoS applicatives à faible bande passante. La limitation de débit volumique conventionnelle est insuffisante — vous devez limiter spécifiquement l’endpoint Server Action. Dans Next.js, les Server Actions sont envoyées en tant que requêtes POST avec l’en-tête Next-Action: <action-id>. Configurez votre WAF ou reverse proxy pour imposer des limites strictes :

# Nginx — Rate limit Server Action requests
# Add to nginx.conf http block:
limit_req_zone $binary_remote_addr zone=react_actions:10m rate=10r/m;

# Add to your server/location block:
location / {
    # Apply stricter limit to Server Action POSTs
    if ($http_next_action) {
        limit_req zone=react_actions burst=5 nodelay;
    }
    proxy_pass http://localhost:3000;
}

3 — Audit All dangerouslySetInnerHTML Usage

3 — Auditer Toutes les Utilisations de dangerouslySetInnerHTML

Scan your codebase for dangerouslySetInnerHTML usages and verify that each one sanitizes its input before rendering:

Analysez votre codebase pour les utilisations de dangerouslySetInnerHTML et vérifiez que chacune désinfecte son entrée avant le rendu :

# Find all dangerouslySetInnerHTML in your codebase
grep -r "dangerouslySetInnerHTML" src/ --include="*.tsx" --include="*.ts" --include="*.jsx" --include="*.js" -l

# For each file found, verify DOMPurify.sanitize() is called before the prop
# Install DOMPurify if you don't have it:
npm install dompurify @types/dompurify

4 — Never Store Tokens in localStorage

4 — Ne Jamais Stocker de Tokens dans localStorage

Migrate any authentication state stored in localStorage or sessionStorage to server-set httpOnly cookies. If you use a third-party auth library like NextAuth.js (Auth.js), verify its cookie configuration:

Migrez tout état d’authentification stocké dans localStorage ou sessionStorage vers des cookies httpOnly posés par le serveur. Si vous utilisez une bibliothèque d’auth tierce comme NextAuth.js (Auth.js), vérifiez sa configuration des cookies :

# Scan for token storage in localStorage (security audit)
grep -r "localStorage.setItem" src/ --include="*.tsx" --include="*.ts" | grep -i "token\|jwt\|auth\|session"

# Auth.js / NextAuth.js — ensure cookies are httpOnly (default in v5)
# In auth.ts, verify:
export const { handlers, auth } = NextAuth({
  // Cookies are httpOnly + Secure by default in Auth.js v5
  trustHost: false, // Never set to true in production without proper proxy config
});

5 — Apply Content Security Policy

5 — Appliquer une Content Security Policy

A strict CSP limits the impact of XSS even when a vulnerability exists. In Next.js, apply CSP via next.config.js headers or your reverse proxy:

Une CSP stricte limite l’impact d’un XSS même si une vulnérabilité existe. Dans Next.js, appliquez la CSP via les headers next.config.js ou votre reverse proxy :

// next.config.js — add CSP headers
const securityHeaders = [
  {
    key: 'Content-Security-Policy',
    value: [
      "default-src 'self'",
      "script-src 'self' 'nonce-REPLACE_WITH_NONCE'",
      "style-src 'self' 'unsafe-inline'",
      "img-src 'self' data: https:",
      "object-src 'none'",
      "base-uri 'self'",
      "frame-ancestors 'none'",
    ].join('; ')
  },
];

module.exports = {
  async headers() {
    return [{ source: '/(.*)', headers: securityHeaders }];
  },
};

6 — Monitor Your React Dependencies Continuously

6 — Surveiller Vos Dépendances React en Continu

The six CVEs published in five months (December 2025 to May 2026) illustrate that React itself is now an active security target. Running npm audit once per deploy is insufficient — new CVEs are published daily, and the average time from CVE publication to active exploitation has dropped to under 5 days (Security Boulevard, 2026). You need continuous, automated monitoring of your lockfile against CVE databases, with immediate alerting when a new high or critical vulnerability affects a direct or transitive dependency.

Les six CVE publiées en cinq mois (décembre 2025 à mai 2026) illustrent que React lui-même est désormais une cible de sécurité active. Exécuter npm audit une fois par déploiement est insuffisant — de nouvelles CVE sont publiées chaque jour, et le délai moyen entre la publication d’une CVE et son exploitation active est tombé à moins de 5 jours (Security Boulevard, 2026). Vous avez besoin d’une surveillance automatique continue de votre lockfile.

Frequently Asked Questions

Questions Fréquentes

Am I affected by the RSC CVEs if I use React 18 or Create React App?

Suis-je affecté par les CVE RSC si j’utilise React 18 ou Create React App ?

No. The RSC CVEs (CVE-2025-55182 through CVE-2026-23870) only affect React 19 and deployments that use React Server Components — specifically the react-server-dom-webpack, react-server-dom-parcel, or react-server-dom-turbopack packages. Create React App, Vite-based SPAs, and all React 18 applications use neither RSC nor these packages. However, you should still upgrade React 18 dependencies regularly, as ecosystem packages (Next.js pages router, Redux, React Router) receive their own CVEs.

Non. Les CVE RSC (CVE-2025-55182 à CVE-2026-23870) n’affectent que React 19 et les déploiements utilisant React Server Components — spécifiquement les packages react-server-dom-webpack, react-server-dom-parcel ou react-server-dom-turbopack. Create React App, les SPA basées sur Vite et toutes les applications React 18 n’utilisent ni RSC ni ces packages. Vous devriez quand même mettre à jour vos dépendances React 18 régulièrement.

Is Next.js Pages Router affected by these CVEs?

Le Pages Router de Next.js est-il affecté par ces CVE ?

No. The Next.js Pages Router does not use React Server Components. The RSC CVEs only affect the App Router, which is the newer routing architecture introduced in Next.js 13. If your project still uses the Pages Router (pages/ directory without app/), you are not vulnerable to these specific CVEs. The Cloudflare and Vercel mitigations similarly only apply to App Router deployments.

Non. Le Pages Router Next.js n’utilise pas React Server Components. Les CVE RSC n’affectent que l’App Router, la nouvelle architecture de routage introduite dans Next.js 13. Si votre projet utilise encore le Pages Router (répertoire pages/ sans app/), vous n’êtes pas vulnérable à ces CVE spécifiques.

How do I know if my app has dangerouslySetInnerHTML vulnerabilities?

Comment savoir si mon app a des vulnérabilités dangerouslySetInnerHTML ?

Run a grep across your source code: grep -r "dangerouslySetInnerHTML" src/ --include="*.tsx" --include="*.jsx". For each result, verify that the value passed to __html is sanitized with DOMPurify or equivalent before rendering. Pay special attention to any component that accepts content from a CMS, user input, API response, or database field. If unsanitized user-controlled content reaches dangerouslySetInnerHTML.__html, you have an exploitable XSS sink.

Lancez un grep sur votre code source : grep -r "dangerouslySetInnerHTML" src/ --include="*.tsx" --include="*.jsx". Pour chaque résultat, vérifiez que la valeur passée à __html est désinfectée avec DOMPurify avant le rendu. Portez une attention particulière aux composants acceptant du contenu provenant d’un CMS, d’une entrée utilisateur, d’une réponse API ou d’un champ de base de données.

Should I disable Server Actions to protect against DoS?

Devrais-je désactiver les Server Actions pour me protéger contre le DoS ?

Disabling Server Actions is not a recommended or practical mitigation — they are a core architectural feature if your app uses the App Router. The correct approach is: (1) upgrade to the latest patched React and Next.js versions, (2) implement WAF-level rate limiting on the Next-Action header pattern, and (3) use Cloudflare’s WAF mitigation rules if you use Cloudflare as your CDN/proxy. Cloudflare added explicit rules for CVE-2026-23870 on May 6, 2026.

Désactiver les Server Actions n’est pas une atténuation recommandée ou pratique. L’approche correcte est : (1) mettre à jour vers les dernières versions patchées de React et Next.js, (2) implémenter une limitation de débit WAF sur le pattern de l’en-tête Next-Action, et (3) utiliser les règles d’atténuation WAF de Cloudflare si vous l’utilisez comme CDN/proxy.

Is React more vulnerable than other frameworks after these CVEs?

React est-il plus vulnérable que les autres frameworks après ces CVE ?

React’s CVE history remains shorter than many comparable frameworks. The 2025–2026 cluster is significant because it targets a genuinely new attack surface — React Server Components — that was introduced without sufficient adversarial security review of the deserialization layer. This is a pattern seen with every major architectural shift in web frameworks. The key lesson is not that React is uniquely vulnerable, but that any major new paradigm (SSR, RSC, Server Actions) requires dedicated security review before reaching production scale.

L’historique CVE de React reste plus court que celui de nombreux frameworks comparables. Le cluster 2025–2026 est significatif car il cible une nouvelle surface d’attaque — React Server Components — introduite sans revue de sécurité adversariale suffisante de la couche de désérialisation. La leçon clé n’est pas que React est uniquement vulnérable, mais que tout changement architectural majeur (SSR, RSC, Server Actions) exige une revue de sécurité dédiée avant d’atteindre l’échelle de production.

Monitor Your React Dependencies Automatically

Surveillez Vos Dépendances React Automatiquement

React published 6 CVEs in 5 months. CVE-2025-55182 was exploited within 48 hours of disclosure. CVE OptiBot scans your package-lock.json and yarn.lock daily against live CVE databases and alerts you the moment a new vulnerability affects your stack — before attackers do.

React a publié 6 CVE en 5 mois. CVE-2025-55182 a été exploitée dans les 48h suivant sa divulgation. CVE OptiBot analyse votre package-lock.json et yarn.lock quotidiennement contre les bases CVE en direct et vous alerte dès qu’une nouvelle vulnérabilité affecte votre stack — avant les attaquants.

Start free monitoring Démarrer le monitoring gratuit