Tutoriel

Next.js 16.4.1 et 15.5.28 : corriger les failles RCE

Sécurité & Monitoring9 min de lecture10 étapes

Le 14 octobre 2026, Next.js a publié une mise à jour hors cycle : 16.4.1 et 15.5.28. Elle corrige deux exécutions de code à distance critiques, exploitables sans compte, et un déni de service. Sur un VPS, aucune plateforme ne met votre application à jour : c'est à vous de relever la version, de contrôler le lockfile, de reconstruire et de redémarrer le bon processus. Un redéploiement Docker peut même rejouer une couche en cache et remettre l'ancienne version en production. Voici comment savoir en dix minutes si vous êtes exposé, mettre à jour, et prouver que le correctif tourne vraiment.

Sommaire· Ce qui a été publié le 14 octobre1/13
  1. 01Ce qui a été publié le 14 octobre
  2. 02Ce qu'il faut retenir
  3. 03Sans use cache ni SVG, pourquoi ça ne suffit pas
  4. 04Quelle version installer selon votre ligne
  5. 05Savoir ce qui tourne réellement
  6. 06Inventorier en cinq contrôles
  7. 07Mettre à jour, puis contrôler le lockfile
  8. 08Redéployer selon votre cible
  9. 09Si vous ne pouvez pas redéployer aujourd'hui
  10. 10Atténuations provisoires, pas des correctifs
  11. 11Lancez npm audit après la mise à jour
  12. 12Après le correctif : surveiller et planifier la ligne 15
  13. 13La documentation officielle

Ce qui a été publié le 14 octobre

Le 14 octobre 2026, l'équipe Next.js a publié une mise à jour de sécurité hors cycle : la version 16.4.1 pour la ligne Active LTS et la version 15.5.28 pour la ligne Maintenance LTS. Elle corrige trois failles liées à des dépendances amont : deux exécutions de code à distance critiques, sans authentification, et un déni de service de sévérité haute. Deux de ces correctifs avaient été reportés depuis la publication de septembre, en raison de retards chez les projets amont.

Sur un serveur que vous administrez, le correctif n'arrive pas tout seul. Il faut relever next, vérifier que la bibliothèque sharp suit, reconstruire l'application et redémarrer le processus qui sert réellement le trafic. Cet article suit ce chemin pour PM2, Docker et Coolify, sans refaire l'installation d'un serveur Next.js.

Ce qu'il faut retenir

  • GHSA-673q-mjm6-r5xr (critique) — exécution de code à distance sans authentification dans une application App Router avec Cache Components, lorsqu'une fonction use cache retourne plusieurs tableaux typés. Aucun contournement connu. L'avis donne la plage 16.0.0 à 16.4.0 et un score CVSS de 9.5.
  • CVE-2026-96889 / GHSA-2464-fhr4-w9xw (critique) — exécution de code à distance par une bibliothèque amont de l'API d'optimisation d'images, lorsque des fichiers SVG sont utilisés, sur un Linux à base de glibc. Score de 9.5. Parade officielle : sharp 0.35.5 ou supérieur.
  • GHSA-p3m5-59mp-jv5r (haute) — déni de service dans une application App Router qui compte au moins une Server Action : des requêtes forgées saturent le processeur et bloquent les requêtes suivantes du même processus. Score de 8.2. Le Pages Router, ou l'absence de Server Action, n'est pas concerné.
  • Versions corrigées — 16.4.1 pour la ligne 16 et 15.5.28 pour la ligne 15, avec les commandes officielles npm install [email protected] et npm install [email protected].
  • Pas de CVE pour deux avis sur trois — seul le RCE d'image porte un identifiant CVE. Les deux autres se suivent par leur identifiant GHSA : un outil qui ne cherche que des CVE les manquera.
  • Même sans usage direct — pour le RCE use cache, Vercel demande de mettre à jour même si l'application ne contient pas de fonction similaire.

Sans use cache ni SVG, pourquoi ça ne suffit pas

Trois raisons de ne pas s'arrêter à cette objection. D'abord, pour le RCE lié à use cache, l'annonce est explicite : aucun contournement n'existe, et la mise à jour est demandée même quand l'application n'a pas de fonction similaire. Ensuite, le RCE d'image dépend d'une bibliothèque amont, et vous ne savez pas toujours quels fichiers SVG atteignent l'optimiseur, notamment quand des images viennent de sources distantes. Enfin, le déni de service ne demande qu'une seule Server Action, ce que beaucoup de formulaires App Router contiennent déjà.

Le risque de casse est limité : la montée reste dans la même ligne, 16.4.x ou 15.5.x. Seule contrainte à connaître, la version 16.4.1 déclare Node 20.9 ou supérieur, alors que la 15.5.28 accepte Node 18.18 et plus. Si vous êtes sur une 16.x plus ancienne, le passage à la 16.4.1 reste dans la même majeure.

Quelle version installer selon votre ligne

Faites défiler le tableau

Votre versionStatutQue faire
16.0.0 à 16.4.0Touchée par les trois avisPasser à 16.4.1 ou à une 16.4.x plus récente
16.4.1 et suivantesCorrectif inclusContrôler sharp et le redéploiement réel
15.0.0 à 15.5.27Touchée par le RCE d'image et le DoSPasser à 15.5.28, puis planifier la migration vers 16.4.x
15.5.28Correctif inclusPlanifier la migration vers 16.4.x
13.x et 14.xTouchée, aucun correctif publié pour ces lignesMigrer vers 15.5.28 ou 16.4.1
10.0.0 à 12.xTouchée par le RCE d'image, aucun correctif publiéMigrer vers une ligne maintenue

Savoir ce qui tourne réellement

La version écrite dans votre dépôt n'est pas celle qui répond aux requêtes. Un lockfile peut dater d'avant la correction, un build Docker peut réutiliser une couche en cache, un processus PM2 peut pointer vers un ancien répertoire de release. Avec la sortie standalone, Next.js copie dans le dossier de déploiement les fichiers de node_modules dont il a besoin : le sharp embarqué est donc celui présent au moment du build, pas celui que vous avez installé ensuite. Les contrôles suivants se font sur la machine ou dans le conteneur qui sert le trafic.

Inventorier en cinq contrôles

  1. Lire les versions de Next.js et de sharp

    Depuis la racine du projet : npm ls next sharp, ou pnpm why sharp avec pnpm. Pour la version exacte de Next.js : node -p "require('next/package.json').version". Un sharp inférieur à 0.35.5 sous next est à corriger.

  2. Repérer Cache Components et use cache

    grep -rn "cacheComponents" next.config.* puis grep -rln "use cache" app src. Si cacheComponents n'apparaît pas, votre application n'emprunte pas le chemin décrit par l'avis. Mettez à jour quand même : Vercel le demande dans tous les cas.

  3. Repérer l'usage des SVG

    grep -rn "dangerouslyAllowSVG\|remotePatterns" next.config.* et find public -name "*.svg". Par défaut, la documentation indique que Next.js n'optimise pas les SVG, et que dangerouslyAllowSVG les autorise. L'absence de ce réglage est un bon signe, pas une preuve : l'avis ne détaille pas le chemin exact.

  4. Repérer les Server Actions

    grep -rln "use server" app src. Un seul fichier suffit à rendre une application App Router concernée par le déni de service.

  5. Reconnaître la bibliothèque C du système

    ldd --version affiche GNU libc sur Debian, Ubuntu, AlmaLinux ou Rocky, et musl libc sur Alpine. L'avis ne parle que de glibc et ne dit rien de musl : n'en déduisez pas que Alpine est épargné. Dans un conteneur : docker exec <conteneur> ldd --version.

Mettre à jour, puis contrôler le lockfile

Lancez la commande de votre ligne : npm install [email protected] ou npm install [email protected]. Reste un piège que l'annonce ne détaille pas. La version 16.4.1 déclare sharp en dépendance optionnelle avec la plage ^0.35.5, mais la 15.5.28 déclare ^0.34.3 || ^0.35.5. Un lockfile qui contient déjà une 0.34.x satisfait cette plage : le gestionnaire de paquets n'a aucune raison de la relever.

Contrôlez donc le résultat avec npm ls sharp. S'il affiche une version inférieure à 0.35.5, forcez la montée avec npm install sharp@^0.35.5, ou ajoutez un override dans package.json, par exemple "overrides": { "sharp": "^0.35.5" }. Avec pnpm ou yarn, l'équivalent consiste à relever sharp ou à déclarer un override. Validez le lockfile dans le dépôt : c'est lui que la CI et l'image Docker liront.

Redéployer selon votre cible

  1. Valider le build

    npm ci, puis npm run build, puis npm ls next sharp. Si le build échoue sur Node, vérifiez la version exigée par la ligne choisie.

  2. PM2

    Construisez dans le répertoire que PM2 exécute, puis pm2 reload <nom>. Contrôlez ensuite avec pm2 describe <nom> que le répertoire d'exécution est bien celui que vous venez de reconstruire : avec un schéma de releases, un lien symbolique oublié relance l'ancien code.

  3. Docker

    Reconstruisez sans cache : docker build --no-cache -t monapp:corrige ., ou invalidez au moins la couche npm ci. Relancez avec docker compose up -d --force-recreate. Comparez ensuite l'image du conteneur en cours (docker inspect -f '{{.Image}}' <conteneur>) à celle que vous venez de construire.

  4. Coolify

    Déclenchez un redéploiement qui ignore le cache de build, puis lisez le journal : l'étape d'installation des dépendances doit s'exécuter, pas être marquée comme réutilisée. Un simple redémarrage ne reconstruit rien.

  5. Prouver le correctif

    Lisez la version dans le processus en cours, pas dans le dépôt : docker exec <conteneur> node -p "require('next/package.json').version" doit afficher 16.4.1 ou 15.5.28 (ou une version plus récente de la même ligne). Contrôlez sharp avec docker exec <conteneur> grep '"version"' node_modules/sharp/package.json, qui doit afficher 0.35.5 ou supérieur.

Si vous ne pouvez pas redéployer aujourd'hui

Pour le RCE lié à use cache, il n'existe aucune parade : seule la mise à jour corrige. Pour les deux autres failles, quelques atténuations réduisent le risque en attendant. Elles ne remplacent pas le correctif, et il faut les noter comme provisoires dans votre suivi d'exploitation.

Atténuations provisoires, pas des correctifs

  • Relever sharp seul — c'est la parade officielle du RCE d'image : sharp 0.35.5 ou supérieur. Contrôlez que le build passe et que l'optimisation d'images fonctionne.
  • Ne pas servir de SVG par l'optimiseur — laissez dangerouslyAllowSVG désactivé et ne l'activez pas sans besoin avéré.
  • Restreindre images.remotePatterns — limitez les sources distantes que l'optimiseur accepte aux hôtes que vous maîtrisez.
  • Node en exécutable PIE — l'avis de sharp cite ce mode pour réduire le risque d'exécution de code, en précisant que les binaires officiels de Node.js ne sont pas PIE.
  • Réduire les dégâts possibles — processus sans droits root, conteneur en lecture seule (docker run --read-only), aucun secret inutile dans l'environnement.
  • Limiter le débit devant Next.js — une règle limit_req dans nginx et une alerte sur le processeur ralentissent un déni de service, sans l'empêcher.

Lancez npm audit après la mise à jour

npm audit s'appuie sur la base d'avis de GitHub : il couvre donc les identifiants GHSA, y compris ceux qui n'ont pas de CVE. Lancez-le après la montée de version, et ajoutez-le à votre CI pour que le prochain avis ne dépende pas d'une veille manuelle.

Après le correctif : surveiller et planifier la ligne 15

Les avis ne publient pas d'indicateur de compromission : il n'y a donc pas de signature précise à rechercher. Surveillez les signes généraux. Un processus Node dont le processeur reste saturé évoque le déni de service. Des redémarrages inattendus, des processus enfants que l'application ne lance jamais, ou des connexions sortantes depuis l'utilisateur de l'application justifient une enquête. Dans les journaux nginx, grep "_next/image" access.log | grep -i svg montre les demandes d'optimisation qui visent des SVG.

Sur la ligne 15, soyez prudent avec le calendrier. D'après endoflife.date, le support de sécurité de la ligne 15 s'est terminé le 21 octobre 2026, alors que la page de politique de Next.js ne donne pas de date et fixe deux ans de Maintenance LTS. La 15.5.28 peut donc être le dernier correctif de cette ligne : planifiez la migration vers la 16.4.x. La 16.4.2, publiée le lendemain de la 16.4.1, ne contient d'après ses notes que des rétroportages sans lien avec ces avis.

La documentation officielle

Annonce Next.js du 14 octobre 2026 : https://nextjs.org/blog/nextjs-security-update-october-14-2026

Avis GitHub : https://github.com/vercel/next.js/security/advisories/GHSA-673q-mjm6-r5xr, https://github.com/vercel/next.js/security/advisories/GHSA-2464-fhr4-w9xw et https://github.com/vercel/next.js/security/advisories/GHSA-p3m5-59mp-jv5r

Avis sharp : https://github.com/lovell/sharp/security/advisories/GHSA-wq5f-xc86-pv6w

Note de Netlify : https://www.netlify.com/changelog/2026-10-14-nextjs-react-security-vulnerabilities/

Politique de support : https://nextjs.org/support-policy et https://endoflife.date/nextjs

Gardez la main sur vos redéploiements

Sur un VPS ServOrbit.com, vous avez l'accès root, une IPv4 dédiée et le choix de l'OS : Node, Docker et le moment du redéploiement restent entre vos mains. Une option d'administration VPS existe aussi ; ses contours sont décrits sur la page de l'offre.

Besoin d'aide ?

Parcourez notre centre d'aide et notre FAQ, ou contactez notre équipe — rappel, WhatsApp ou e-mail. Support en français, anglais et arabe.

Écrire sur WhatsApps'ouvre dans un nouvel onglet