
Procédure technique détaillée de CVE-2025-55182 (React2Shell), retraçant les internals du protocole Flight de React pour expliquer la chaîne d'exploitation, la création de payload et l'analyse du correctif.
Auteur : Kavienan J
Vulnérabilité découverte par : lachlan2k, qui l'a divulguée de manière responsable à l'équipe React.
Pour les mises à jour de cette vulnérabilité, consultez : react2shell.com
ReactFlightReplyServer.jsCVE-2025-55182 est classée 10.0/10.0 en sévérité. Si vous avez consulté les PoC publics, vous avez peut-être remarqué que, bien qu'ils montrent le fonctionnement de l'exploit, les explications sur pourquoi le payload a cette apparence peuvent sembler insuffisantes — ce qui est tout à fait compréhensible vu la complexité du protocole React Flight. Flight, la couche de sérialisation derrière les Composants Serveur React et les Actions Serveur, est une machine d'état complexe de 1 100+ lignes, et son comportement n'est pas intuitif à moins de tracer le code soi-même.
Les PoC de la communauté démontrent clairement la vulnérabilité :
…mais lorsque vous essayez de répondre à la question « Pourquoi cela fonctionne-t-il ? », vous vous retrouvez rapidement à plonger dans les profondeurs des internes de React qui n'étaient jamais destinés à être lus ligne par ligne.
Remarque : De nombreux PoC attribuent à tort le correctif à des modifications dans
requireModule. Comme nous le verrons dans Le correctif, le payload de l'exploit n'atteint jamais cette fonction — le code vulnérable réel réside entièrement dansReactFlightReplyServer.js.
Ce document est ma tentative de rétro-ingénierie de la chaîne d'exploitation en traçant pas à pas la logique de décodage et d'initialisation des chunks de React. Chaque comportement discuté ici provient directement du fonctionnement de ReactFlightReplyServer.js avant le correctif (référence : https://github.com/facebook/react/blob/v19.2.0/packages/react-server/src/ReactFlightReplyServer.js), distillé et simplifié afin qu'un développeur React/JS puisse suivre avec suffisamment de patience.
Section suivante : Contexte