Une publication technique décrit en détail CVE-2025-55182, une faille RCE affectant les React Server Functions (utilisées notamment par Next.js) due à des références de prototype non sécurisées lors de la désérialisation du protocole React Flight.
— Contexte et cause racine —
- La désérialisation des “chunks” du protocole React Flight ne vérifiait pas, jusqu’à un commit correctif de React, si la clé demandée appartenait réellement à l’objet, permettant d’atteindre le prototype et d’obtenir le constructeur global Function.
- L’exploitation s’appuie sur des références croisées entre chunks (dont la syntaxe spéciale pour récupérer le chunk brut) et sur le fait que Next.js attend un thenable, ce qui ouvre une surface d’abus via l’attribut “then”.
— Chaîne d’exploitation (vue d’ensemble) 🚨 —
- Accès au prototype: extraction de Function via un chaînage de références vers proto/constructor.
- Thenable gadget: un objet racine est façonné pour que son “then” corresponde à celui d’un Chunk (thenable). Next.js l’attend (await) et déclenche le flux interne.
- Deuxième passe de résolution: en forçant le statut du chunk (resolved_model), le flux passe par initializeModelChunk et reviveModel, offrant un second tour de résolution avec plus de contexte.
- Appel au constructeur Function: détournement de la gestion des blobs (préfixe $B) pour faire invoquer Function avec un code contrôlé, via des champs internes (_formData.get et _prefix) manipulés dans la structure de chunk.
- Déclenchement avant toute validation: l’ensemble se produit pendant la désérialisation, avant la validation de l’action (getActionModIdOrError), et peut être amorcé par un simple en-tête Next-Action.
— Impact —
- Type: Exécution de code à distance (RCE) sur le serveur traitant les React Server Functions/Next.js.
- Portée: React Server Functions et intégrations comme Next.js utilisant la désérialisation React Flight vulnérable.
- Correctif: un commit React introduit des vérifications lors de la résolution des références (lien fourni dans la publication).
— Détails additionnels —
- La note cite une idée clé (attribuée à maple3142) pour faire du chunk racine un « fake chunk » auto-référencé et exploiter Chunk.prototype.then.
- Aucun IoC n’est fourni; l’exposé se concentre sur la mécanique interne et les gadgets d’appel.
— IOCs et TTPs —
- IOCs: aucun indiqué.
- TTPs:
- Abus de références de prototype et de la Function constructor en JavaScript.
- Désérialisation dangereuse via React Flight (chunks, références “$@”, préfixes spéciaux comme $B).
- Abus de thenables (await implicite) dans Next.js.
- Construction d’un fake chunk avec statut forcé (resolved_model) et champs internes (_response, _formData.get, _prefix) menant à un appel contrôlé de Function.
En somme, il s’agit d’une analyse technique approfondie d’une vulnérabilité menant à une RCE via la pile React Server Functions/Next.js, illustrant la chaîne d’exploitation et pointant un commit correctif.
🔗 Source originale : https://github.com/msanft/CVE-2025-55182