
Mecanismo de detección de alta fidelidad para node2shell (CVE-2026-111497)
Una herramienta de línea de comandos para detectar CVE-2026-111497 en aplicaciones HTTP de Node.js.
El escáner envía cuatro controles de un byte para determinar cómo maneja el endpoint un JSON Brotli válido, un Brotli malformado, solicitudes sin un tipo de contenido JSON y codificaciones no admitidas. Luego transmite una sonda Brotli de 23.068.764 bytes y repite el control válido.
Un objetivo se reporta como vulnerable solo cuando la sonda completa alcanza la clase de respuesta de ruta válida, la clase de respuesta malformada es distinta y el control final confirma que el endpoint permaneció estable. Esto coincide con la lógica de detección interna del postmódulo de Assetnote y no ejecuta ningún comando.
La ruta de la URL se conserva y por defecto es /. No se siguen redirecciones.
Cada endpoint probado recibe cinco solicitudes de un byte y una sonda de 23.068.764 bytes. La sonda utiliza Expect: 100-continue, por lo que un proxy puede rechazar su tamaño anunciado antes de que se cargue el cuerpo.
pip install -r requirements.txt
docker build -t node2shell-scanner .
docker run --rm node2shell-scanner -u https://example.com/api
python3 scanner.py -u https://example.com/api
python3 scanner.py -l hosts.txt -t 20 -o results.json
python3 scanner.py -u https://example.com --path /api/json
python3 scanner.py -u https://example.com -H "Authorization: Bearer token"
-u, --url Single URL to check
-l, --list File containing hosts (one per line)
-t, --threads Number of concurrent threads (default: 10)
--timeout Per-request timeout in seconds (default: 60)
-o, --output Output file for results (JSON)
--all-results Save all results, not just vulnerable hosts
-k, --insecure Disable TLS certificate verification
-H, --header Custom header (can be used multiple times)
-v, --verbose Show verdict reasons and response snippets
-q, --quiet Only output vulnerable hosts
--no-color Disable colored output
--path Custom path to test (can be used multiple times)
--path-file File containing paths to test (one per line)
Los resultados se imprimen en la terminal. Con -o, los hosts vulnerables se guardan en JSON con el modo de comparación y la evidencia de solicitud/respuesta redactada. Use --all-results para guardar todos los veredictos.
Creado por el Assetnote Security Research Team utilizando la lógica de detección desarrollada para Searchlight's Exposure Platform.