Contexte de la vulnérabilité
Le 22 septembre 2026, Vercel a publié un correctif (version 16.3.6) pour une faille classée critique (CVSS 9.5) et identifiée sous le numéro CVE‑2026‑94545. La vulnérabilité affecte les versions Next.js 16.2.0 à 16.3.5 lorsqu’ImageResponse s’exécute sur le runtime Node.js, qui est le comportement par défaut de Next.js. Les versions antérieures de la branche 15, ainsi que l’implémentation Edge d’ImageResponse, ne sont pas concernées.
Le composant ImageResponse, fourni via le module next/og, génère les images Open Graph et autres aperçus sociaux. Il s’appuie sur la bibliothèque interne Satori pour transformer une description d’image en code SVG avant de rasteriser le résultat en PNG.
Mécanisme de l’exploitation
Selon l’avis de sécurité, le problème provient d’une mauvaise échappement des valeurs contrôlées par l’attaquant lorsqu’elles sont insérées dans le contenu, les attributs ou les styles du SVG produit par Satori. Un texte injecté dans un élément <title> du SVG, par exemple à partir de l’URL de la requête, n’est pas correctement encodé et est interprété comme du code SVG valide. Ce code peut alors exploiter des vulnérabilités dans d’autres bibliothèques dépendantes de Next.js, aboutissant à une exécution de code arbitraire sur le serveur Node.js.
import { ImageResponse } from 'next/og';
export async function GET(request) {
const { searchParams } = new URL(request.url);
const title = searchParams.get('title'); // valeur contrôlée par l'attaquant
return new ImageResponse(
`${title}`,
{ width: 1200, height: 630 }
);
}
Dans cet exemple, le paramètre title est injecté sans échappement, illustrant le vecteur d’injection décrit dans l’avis.
Analyse de l’impact et des correctifs
Le risque d’exécution de code serveur rend la faille particulièrement dangereuse pour les sites qui exposent des points d’entrée dynamiques (routes API, fichiers opengraph-image) et qui utilisent ImageResponse avec des données non‑sanitisées. Aucun incident public ni code d’exploitation n’a été signalé au moment de la rédaction, mais la gravité du CVSS (9.5) reflète le potentiel d’escalade complète.
Le correctif consiste à mettre à jour Next.js vers la version 16.3.6 (commande npm install next@16.3.6). La branche 16.2 ne propose aucun correctif, obligeant les utilisateurs de cette version à migrer directement vers 16.3.6. Pour les projets qui ne peuvent pas mettre à jour immédiatement, la recommandation est d’éliminer toute donnée non fiable des champs SVG, attributs et styles avant de les passer à ImageResponse. Par ailleurs, les développeurs qui utilisent Satori en dehors de Next.js doivent mettre à jour la bibliothèque vers la version 0.33.5, qui corrige le même problème avec un score CVSS modéré (5.3).
Enfin, Vercel n’a pas précisé si les applications hébergées sur sa plateforme bénéficient d’une protection automatique, contrairement à deux précédentes failles corrigées en août 2026. Les équipes de sécurité doivent donc vérifier les journaux d’accès et les versions de leurs dépendances pour détecter d’éventuelles exploitations antérieures.