Test d'intrusion Next.js : Middleware-Bypass, Server Actions et sécurité ISR
Next.js est le framework React full-stack le plus utilisé au monde et constitue la base de nombreuses applications web critiques en production. L'introduction de l'App Router, des Server Components et des Server Actions a créé de nouvelles surfaces d'attaque fondamentalement différentes des modèles de sécurité classiques des SPA. CVE-2024-43481 (CVSS 9.1) a démontré qu'une seule faille dans le middleware pouvait contourner l'intégralité du contrôle d'accès d'une application Next.js. Matproof examine votre application Next.js pour toutes les vulnérabilités connues et émergentes propres à cette architecture.
Pourquoi les applications Next.js nécessitent des tests de sécurité spécialisés
Next.js réunit dans un seul framework le rendu côté client, le Server-Side Rendering (SSR), la Static Site Generation (SSG) et l'Incremental Static Regeneration (ISR) — chaque stratégie de rendu introduit ses propres implications de sécurité. Les Server Components et les Server Actions, introduits avec Next.js 13 et l'App Router, déplacent la logique vers le serveur sans que les développeurs n'en mesurent toujours pleinement les conséquences en matière de sécurité. Le middleware s'exécute dans l'Edge Runtime et contrôle le routage et les vérifications d'authentification pour l'ensemble de l'application — une erreur à ce niveau compromet toutes les routes en aval. Le modèle de sécurité de Next.js est complexe, bien documenté mais fréquemment mal implémenté en pratique. CVE-2024-43481, CVE-2024-46982 et CVE-2024-34351 prouvent que même les versions récentes de Next.js contenaient des failles critiques permettant à des attaquants de contourner intégralement l'autorisation ou d'effectuer des requêtes côté serveur falsifiées.
- CVE-2024-43481 (CVSS 9.1, contournement du middleware Next.js) : dans les versions de Next.js antérieures à 14.2.25 et 15.x antérieures à 15.2.3, un attaquant pouvait manipuler l'en-tête x-middleware-subrequest pour ignorer entièrement la chaîne de traitement du middleware, contournant ainsi toutes les vérifications d'authentification et d'autorisation. Cette vulnérabilité concerne toutes les applications utilisant le middleware pour le contrôle d'accès — l'un des schémas les plus courants dans les systèmes Next.js en production.
- CVE-2024-46982 (cache poisoning dans Next.js ISR) : via des en-têtes HTTP manipulés, un attaquant pouvait empoisonner les pages ISR mises en cache avec un contenu malveillant, ensuite distribué à tous les utilisateurs. Les versions de Next.js antérieures à 14.2.10 dans le Pages Router étaient affectées. Les attaques de cache poisoning sur ISR sont particulièrement insidieuses car le cache empoisonné peut persister longtemps.
- CVE-2024-34351 (SSRF via l'en-tête Host dans les Server Actions) : les versions Next.js 13.4 à 14.x transmettaient les requêtes Server Action basées sur l'en-tête Host sans validation suffisante. Les attaquants pouvaient ainsi cibler des services internes via le serveur Next.js (Server-Side Request Forgery), permettant dans les environnements cloud d'accéder aux endpoints de métadonnées (AWS IMDSv1, Azure IMDS).
- Server Actions comme nouveau vecteur d'attaque : les Server Actions dans Next.js 13+ sont des fonctions côté serveur appelées directement depuis les composants client. Sans vérifications d'autorisation explicites dans chaque action, elles sont accessibles par des requêtes arbitraires non authentifiées — une erreur d'implémentation fréquente menant à une escalade de privilèges ou des fuites de données.
- React Server Components et fuites de données : la sérialisation RSC transmet l'état serveur au client. Si des données sensibles (résultats de base de données, clés API, configuration interne) ne sont pas explicitement filtrées, elles se retrouvent dans le bundle client ou dans les réponses réseau — souvent invisibles dans la vue normale de l'application, mais visibles dans le trafic réseau.
- Rewrites et redirects Next.js mal configurés comme source d'Open Redirect : les rewrites dans next.config.js peuvent, lorsqu'ils sont mal configurés, ouvrir des chemins d'attaque Open Redirect ou SSRF si des URL externes sont configurées comme destinations de rewrite.
- Risques de la chaîne d'approvisionnement dans l'écosystème Next.js : les projets Next.js utilisent typiquement des dizaines de dépendances npm ; les attaques connues sur la chaîne d'approvisionnement (ex. event-stream 2018, ua-parser-js 2021) démontrent le risque de dépendances transitives compromises en environnement de production.
Ce qui est examiné lors d'un test d'intrusion Next.js
- Sécurité du middleware et logique d'autorisation : analyse complète de la configuration middleware.ts sur la manipulation d'en-têtes, les schémas de contournement (cf. CVE-2024-43481), la configuration incorrecte des matchers et les conditions de concurrence dans l'exécution Edge Runtime.
- Autorisation et validation des entrées dans les Server Actions : chaque Server Action exportée est examinée pour les vérifications d'authentification manquantes, la protection CSRF (vérification d'origine native Next.js vs implémentations personnalisées), les accès excessifs à la base de données et les vulnérabilités d'injection.
- Cache poisoning ISR et gestion des clés de cache : test de la possibilité d'empoisonner les pages mises en cache via des requêtes manipulées ; analyse de la configuration des clés de cache sur les variations par en-têtes, cookies ou paramètres de requête.
- SSRF via l'en-tête Host et logique de redirection : tests systématiques pour déterminer si les redirections côté serveur, les proxies API ou les règles de rewrite peuvent être dirigés vers l'infrastructure interne via des en-têtes Host ou des paramètres de chemin manipulés (cf. CVE-2024-34351).
- Analyse des fuites de données dans les React Server Components : examen de la payload RSC pour les données sensibles contenues, les ID internes, les résultats de base de données non filtrés ou les valeurs de configuration ; analyse de la payload __NEXT_DATA__ pour les secrets exposés.
- Sécurité des routes API selon l'OWASP API Top 10 (2023) : authentification, rate-limiting, validation des entrées, mass-assignment dans tous les handlers route.ts ; test sur BOLA (Broken Object Level Authorization) pour les endpoints spécifiques aux ressources.
- Configuration Next.js et en-têtes de sécurité : audit de next.config.js pour les configurations d'en-têtes non sécurisées, l'absence de Content Security Policy, la suppression X-Powered-By désactivée, la configuration CORS non sécurisée.
- Audit des dépendances et analyse de la chaîne d'approvisionnement : scan de toutes les dépendances npm (y compris transitives) contre la base de données NVD/OSV ; identification des paquets critiques avec des CVE connus dans la version utilisée.
- Intégration de l'authentification (NextAuth.js / Auth.js) : audit de configuration pour les callbacks OAuth, les secrets JWT, la gestion des sessions, la validation des tokens CSRF et les flags de cookies sécurisés.
- Différences de sécurité Edge Runtime vs Node.js Runtime : analyse pour déterminer si la logique critique de sécurité est correctement placée dans l'environnement d'exécution correspondant et si les limitations de l'Edge Runtime entraînent des dégradations de sécurité.
Exemple de finding
Contournement du middleware via l'en-tête x-middleware-subrequest (CVE-2024-43481)
L'application Next.js en production (version 14.1.4) utilise le middleware pour vérifier l'authentification sur toutes les routes protégées sous /app/*. En ajoutant l'en-tête x-middleware-subrequest: middleware avec une valeur arbitraire, toutes les exécutions du middleware pour cette requête sont ignorées. Lors du test, il a été possible d'accéder à /app/dashboard, /app/admin et /app/api/internal-data sans cookie d'authentification valide et de récupérer des données sensibles d'utilisateurs et de configuration. La vulnérabilité (CVE-2024-43481, CVSS 9.1) est présente dans les versions Next.js antérieures à 14.2.25 et 15.x antérieures à 15.2.3.
Correction : Mise à jour immédiate vers Next.js 14.2.25 (LTS) ou 15.2.3+. En défense en profondeur : implémenter les vérifications d'autorisation dans chaque Server Component et Server Action, sans jamais se fier uniquement au niveau middleware. Bloquer l'en-tête x-middleware-subrequest dans sa propre infrastructure (reverse proxy / CDN) lorsqu'il provient de sources externes. Référence : Next.js Security Advisory GHSA-f82v-jwr5-mffw.
Référence : CVE-2024-43481 (CVSS 9.1) · GHSA-f82v-jwr5-mffw · OWASP A01:2021 Broken Access Control · NVD next.js
Pentest Next.js : comparaison des options
| — | Scan gratuit | Matproof Sentinel | Consultance classique |
|---|---|---|---|
| Moteur de scan automatisé | ✓ (aperçu 3 min) | ✓ Scan complet | ✗ Manuel uniquement |
| Couverture OWASP Top 10 | Partielle | ✓ Complète | ✓ Complète |
| Preuve d'exploitation | ✗ | ✓ Par finding | ✓ Par finding |
| Mapping réglementaire (DORA/NIS2/ISO 27001) | ✗ | ✓ Automatisé | ✓ Manuel |
| Rapport PDF prêt pour l'audit | ✗ | ✓ Instantané | ✓ Livraison 2–4 semaines |
| Scans continus / récurrents | ✗ | ✓ Par déploiement | ✗ Engagement annuel |
| Délai avant premier résultat | ~3 min | ~30 min scan complet | 2–4 semaines |
| Prix | €0 | À partir de €149 | €8 000–€25 000 |
| Revue de code source (SAST) | ✗ | ✓ Plan Growth | ✓ Périmètre défini |
| Tests API (REST/GraphQL) | ✗ | ✓ Automatisé | ✓ Manuel |
Offres de pentest Next.js
- 1 scan pentest complet
- Résultats priorisés par IA avec CVSS 3.1
- Proof-of-exploit pour chaque finding
- Rapport PDF (prêt pour l'audit)
- Mapping réglementaire (DORA, NIS2, ISO 27001)
- Scans illimités (jusqu'à 3 domaines)
- Surveillance continue
- Intégration CI/CD (GitHub, GitLab)
- Tous les mappings réglementaires
- Support prioritaire
- Scans + domaines illimités
- Tests authentifiés / White-Box
- Tests d'API et d'infrastructure cloud
- Account manager sécurité dédié
- SLA réponse 24h
Questions fréquentes sur le test d'intrusion Next.js
Quelles versions de Next.js sont affectées par CVE-2024-43481 et comment savoir si votre application est vulnérable ?
CVE-2024-43481 affecte les versions de Next.js de 11.1.4 jusqu'à avant 14.2.25 ainsi que 15.x avant 15.2.3. Vous pouvez vérifier votre version avec « npx next --version ». Pour une vérification manuelle rapide : envoyez une requête vers une route protégée avec l'en-tête supplémentaire « x-middleware-subrequest: middleware » et observez si la vérification du middleware est ignorée. La mise à jour immédiate vers la version patchée est recommandée. Matproof Sentinel vérifie cela automatiquement à chaque scan.
Les Server Actions dans Next.js doivent-elles être explicitement sécurisées ou l'authentification via le middleware suffit-elle ?
Les Server Actions doivent toujours être explicitement sécurisées. La documentation Next.js précise que les Server Actions doivent être traitées comme des endpoints API accessibles publiquement. L'authentification via le middleware protège uniquement le routage, pas l'appel de l'action lui-même. Bonne pratique : insérer auth() ou une vérification de session équivalente comme première instruction dans chaque Server Action, avant toute opération de base de données. Des bibliothèques comme next-safe-action proposent un middleware d'autorisation structuré pour les Server Actions.
Comment fonctionne le cache poisoning ISR dans Next.js et quelles pages sont particulièrement exposées ?
ISR (Incremental Static Regeneration) génère des pages statiques côté serveur et les met en cache. CVE-2024-46982 a montré que des en-têtes manipulés (ex. Accept-Encoding ou X-Forwarded-For) pouvaient générer des clés de cache différentes, permettant à un attaquant d'injecter une version empoisonnée d'une page dans le cache. Les pages ISR accessibles au public avec des éléments personnalisés ou du contenu critique sont particulièrement exposées. La mise à jour vers Next.js 14.2.10+ corrige la vulnérabilité signalée.
Comment prévenir le SSRF dans les Server Actions et routes API Next.js ?
La prévention du SSRF dans Next.js requiert : (1) la validation de l'en-tête Host dans le reverse proxy et le rejet des hôtes inconnus ; (2) la mise en liste blanche des URL externes autorisées pour les redirections et les appels fetch depuis le contexte serveur ; (3) le blocage des requêtes vers les plages d'adresses réservées par l'IANA (127.0.0.0/8, 10.0.0.0/8, 169.254.0.0/16 pour les métadonnées cloud) ; (4) l'utilisation de « images.remotePatterns » dans next.config.js et de listes blanches similaires pour les ressources externes. CVE-2024-34351 a démontré comment la manipulation de l'en-tête Host dans les Server Actions pouvait mener au SSRF.
Quelle configuration Content Security Policy (CSP) est recommandée pour les applications Next.js ?
Pour Next.js 13+ avec App Router, une CSP basée sur des nonces est recommandée, configurée via les Headers de next.config.js ou le middleware. CSP minimale : default-src 'self'; script-src 'self' 'nonce-{nonce}'; style-src 'self' 'nonce-{nonce}'; img-src 'self' data: https:; connect-src 'self'; frame-ancestors 'none'. Le script inline Next.js pour l'hydratation RSC doit être accessible via le nonce. Les directives 'unsafe-inline' et 'unsafe-eval' doivent être évitées. Matproof vérifie la configuration CSP pour les contournements courants.
Dans quelle mesure NextAuth.js (Auth.js) est-il sécurisé et qu'est-ce qui est vérifié lors d'un pentest ?
NextAuth.js (désormais Auth.js) est une bibliothèque d'authentification très répandue pour Next.js. Lors du pentest, nous vérifions : la configuration correcte de AUTH_SECRET (minimum 32 octets, non commité dans .env.production), la validation des tokens CSRF pour tous les endpoints POST, la configuration sécurisée des fournisseurs OAuth (validation des URI de redirection, paramètre state), l'algorithme JWT et la rotation des clés, les flags des cookies de session (HttpOnly, Secure, SameSite=Lax), ainsi que l'intégration du middleware pour la protection des routes.
Quelle est la différence entre un pentest Next.js spécialisé et un pentest d'application web générique ?
Un pentest d'application web générique suit l'OWASP Testing Guide et couvre les classes de vulnérabilités générales. Un pentest Next.js spécialisé adresse en plus les surfaces d'attaque spécifiques au framework : logique de routage App Router, frontières de données entre Server et Client Components, énumération des endpoints Server Action, mécanismes de revalidation ISR, limitations de l'Edge Runtime, analyse de la payload __NEXT_DATA__ et le cycle de vie de requête propre à Next.js. Ce niveau d'analyse requiert une connaissance approfondie du framework que les outils génériques ne couvrent pas.
À quelle fréquence une application Next.js doit-elle être soumise à un test d'intrusion ?
Recommandation : pentest complet à chaque version majeure (ex. migration du Pages Router vers l'App Router, mise à jour de version Next.js), ainsi qu'au minimum annuellement pour les applications en production gérant des données sensibles. Pour une sécurité continue, Matproof Sentinel complète le pentest annuel par des scans automatisés après chaque déploiement, détectant les nouveaux CVE et les dérives de configuration.
Approfondir — articles de blog associés
Démarrez votre test d'intrusion Next.js maintenant
Déterminez en quelques minutes si votre application Next.js est exposée au contournement de middleware, aux vulnérabilités des Server Actions ou au cache poisoning ISR. Rapport audit-ready en français, aucune installation requise.
Démarrer le pentest Next.js