tutoriales · 16 min de lectura
Cisco ASA: ArcaneDoor vuelve con CVE-2025-20333 y bootkit en la ROM
CVE-2025-20362 (auth bypass por path traversal, variante de un bug de 2018) + CVE-2025-20333 (buffer overflow en un script Lua de la WebVPN). Encadenadas, RCE pre-auth como root en cualquier ASA/FTD expuesta a internet. UAT4356 lleva explotándolas desde mayo de 2025 y deja persistencia en ROMMON con un bootkit GRUB (RayInitiator) que sobrevive a reboot y a upgrade.
· Manuel López Pérez · tutoriales

El 25 de septiembre de 2025 Cisco publica tres advisories de emergencia sobre Cisco Secure Firewall ASA y Firewall Threat Defense (FTD): CVE-2025-20333 (CVSS 9.9, RCE en la WebVPN), CVE-2025-20362 (CVSS 6.5, auth bypass en la WebVPN) y CVE-2025-20363 (CVSS 9.0, RCE en otros web services). Las dos primeras están siendo explotadas in the wild desde mayo de 2025. Encadenadas, dan RCE pre-auth como root en cualquier ASA/FTD con la WebVPN expuesta.
El mismo 25 de septiembre CISA emite la Emergency Directive 25-03: identificar todas las ASA/FTD federales, hacer core dump y subirlo a CISA Malware Next-Gen antes de las 23:59 EST del 26 de septiembre, parchear o aislar. NCSC UK, ASD/ACSC y CCCS publican coordinadamente. El NCSC publica además el Malware Analysis Report sobre los dos implants que UAT4356 deja en los equipos comprometidos: RayInitiator (bootkit GRUB que se flasea en ROMMON) y LINE VIPER (loader user-mode con módulos para CLI hijack, packet capture, bypass de AAA y supresión de syslog).
Cisco y los servicios coordinados atribuyen la actividad a UAT4356 — el mismo cluster, también rastreado como Storm-1849, que en abril de 2024 atacó las ASA con LINE RUNNER / LINE DANCER en la campaña original ArcaneDoor. Un año y medio después vuelve con un bug nuevo, persistencia más sucia y un blanco más concreto: las ASA 5500-X sin secure boot, hardware cuyo End-of-Support cae el 30 de septiembre de 2025. Cinco días después del advisory.
Lab: descripción técnica del chain reconstruida desde los advisories oficiales de Cisco PSIRT, el análisis de Rapid7, el advisory de Zscaler ThreatLabz, el NCSC MAR y la cobertura de Tenable. Reproducir el chain íntegro requiere una ASA/FTD vulnerable; describimos los pasos sobre el frontend WebVPN y la primitiva del bug, sin publicar payload exacto.
La chain en una frase
Dos bugs en el mismo binario, el web server de la WebVPN:
- CVE-2025-20362 — missing authorization (CWE-862). El filtro de auth del frontend HTTP no canonicaliza el path antes de decidir si la ruta requiere sesión. Una request con path traversal llega al handler de la ruta destino sin pasar por el filtro. Es un patch bypass directo de CVE-2018-0296, el path traversal de la WebVPN que Cisco “arregló” en junio de 2018.
- CVE-2025-20333 — buffer overflow basado en heap (CWE-120) en un endpoint Lua de la WebVPN. El handler copia datos de la request en un buffer de 8.192 bytes sin verificar el tamaño. Sobreescribe estructuras adyacentes en el heap, deriva en RCE como root.
Por separado, la 20362 te deja leer endpoints restringidos y la 20333 requeriría credenciales VPN válidas. Encadenadas, la primera provee el acceso y la segunda provee el RCE: el atacante no necesita autenticarse en ningún momento.
POST /+CSCOE+/<endpoint vulnerable>/<path traversal a Lua endpoint>
Host: vpn.target.test
Content-Length: <oversized payload>
<payload que dispara el overflow en el handler Lua>El handler Lua despachado por el path traversal entra al buffer overflow y el flujo de control termina en código del atacante con privilegios de root del proceso lina (el plano de datos de ASA).
Por qué importa
ASA y FTD son el firewall corporativo de fondo en gran parte del mercado enterprise: legacy financiero, gobierno US, telco, retail. La WebVPN es el portal SSL-VPN que muchas organizaciones exponen a internet para que sus empleados accedan a red interna desde casa — exactamente la superficie que UAT4356 ha estado pinchando. Censys cuenta unos 50.000 dispositivos con la WebVPN expuesta el día del advisory.
Hay tres líneas que se cruzan en este incidente y vale la pena separar:
- Variante de 2018 que llega a producción siete años después. CVE-2018-0296 era exactamente el mismo patrón: path traversal en la WebVPN que permitía hit a endpoints restringidos sin auth. Cisco lo cerró con un filtro. CVE-2025-20362 es un patch bypass: un encoding ligeramente distinto del path que el filtro nuevo todavía deja pasar. La lectura aburrida es la de siempre: arreglar el path traversal añadiendo casos especiales en vez de canonicalizar el path antes del filtro deja la puerta abierta para la siguiente variante.
- Buffer overflow en Lua dentro de la WebVPN. La WebVPN despacha algunos endpoints a scripts Lua que corren embebidos en el proceso del frontend HTTP. Es la primera vez que un bug en esa capa Lua llega a CVSS 9.9. El bug es un olvido de bounds check antes de un
memcpyen el handler de un parámetro de la request. Patrón clásico de C, en un binario que muchos asumían que se limitaba a routing y filtrado. - EoS como factor activo, no anécdota. Los modelos 5512-X, 5515-X, 5525-X, 5545-X y 5555-X no soportan secure boot. La ROMMON de esas máquinas se puede flashear sin cadena de confianza criptográfica. El 30 de septiembre de 2025 Cisco los retira de soporte. UAT4356 elige precisamente esos modelos para depositar el bootkit; el implant en ROMMON es persistente aunque el operador reinicie y actualice — porque el cargador previo al sistema no comprueba firma. Las 5506-X, 5508-X, 5516-X (que sí tienen secure boot, EoS agosto de 2026) detectan automáticamente la persistencia y la limpian en el siguiente boot con imagen parcheada. La diferencia entre máquina afectada y máquina recuperable es una característica de hardware que el equipo cyber del cliente no eligió.
Cómo funciona la auth bypass (CVE-2025-20362)
El frontend WebVPN expone rutas bajo /+CSCOE+/ y /+CSCOU+/. La decisión “esta ruta requiere autenticación” se toma comparando el prefijo del request path contra una tabla; algunas rutas (login, recovery, vpn discovery) son públicas por diseño y otras requieren sesión válida.
El bug está en cómo se compara el path. El filtro mira el prefijo del path tal como llega en la request line, no la ruta canonicalizada que el router HTTP va a despachar realmente. CVE-2018-0296 era exactamente esto, parcheado en 2018 añadiendo un sanitizador específico. CVE-2025-20362 es una variante: un encoding del path traversal que el sanitizador no normaliza pero el router posterior sí.
El patrón del que hablan los análisis públicos es de la forma:
/<endpoint público sin auth>/../<endpoint restringido>con algún encoding intermedio (URL-encoding, double encoding, ../%2e%2e, según implementación) que el filtro ve como ruta pública pero el dispatcher resuelve como ruta restringida. Rapid7 confirma el mecanismo sin publicar la primitiva exacta. El Cisco PSIRT advisory de CVE-2025-20362 describe el bug como improper validation of user-supplied input in HTTP(S) requests que permite acceso unauthenticated a restricted VPN-related URL endpoints. Es la misma redacción que usaron en 2018.
Endpoints alcanzables con la primitiva, según los análisis publicados:
- Rutas internas que filtran información del dispositivo (versiones, configuración limitada, estado VPN).
- Endpoints Lua del backend WebVPN, normalmente accesibles solo a operadores con sesión válida — el sink del segundo bug.
Cómo funciona el buffer overflow (CVE-2025-20333)
El handler Lua del endpoint vulnerable recibe la request y procesa parámetros del body. Internamente, el código hace un memcpy (o equivalente) sobre un buffer fijo de 8.192 bytes. El tamaño del input no se valida contra el tamaño del buffer.
Mandar un payload mayor que 8.192 bytes en el parámetro correcto desborda el heap. La explotación en sí no es trivial: Rapid7 la describe como non trivial to exploit porque el heap del proceso lina tiene mitigaciones que obligan al atacante a preparar el layout antes del overflow y a sobreescribir punteros concretos para conseguir control de flujo. UAT4356 lleva desde mayo perfeccionando esa parte. El resultado, una vez aterrizada la explotación, es RCE como root del proceso del firewall: control total del plano de datos, capacidad de leer todas las sesiones SSL VPN activas, capacidad de modificar reglas, capacidad de pivotar a la red interna usando los túneles de los usuarios legítimos.
El Cisco PSIRT advisory de CVE-2025-20333 cataloga el bug bajo CWE-120 y publica la lista exhaustiva de versiones afectadas: ASA 9.12 antes de 9.12.4.72, 9.14 antes de 9.14.4.28, 9.16 antes de 9.16.4.85, 9.17 antes de 9.17.1.45, 9.18 antes de 9.18.4.67, 9.19 antes de 9.19.1.42, 9.20 antes de 9.20.4.10, 9.22 antes de 9.22.2.14 y 9.23 antes de 9.23.1.19. FTD de 6.x a 7.7 también afectada. Es básicamente toda la base instalada vigente.
Persistencia en ROMMON — RayInitiator
Aquí está el salto cualitativo respecto a ArcaneDoor I de 2024. El año pasado los implants (LINE RUNNER, LINE DANCER) vivían en disco o en memoria del proceso lina. Un reboot los limpiaba si el operador hacía bien el procedimiento. En 2025 UAT4356 escribe el implant en la ROMMON — el bootloader previo al sistema, equivalente al BIOS/UEFI de la ASA.
RayInitiator es un bootkit basado en GRUB. El NCSC MAR lo describe paso a paso:
- El operador (UAT4356, tras conseguir root vía la chain) escribe el bootloader modificado en la flash ROMMON del dispositivo.
- En el siguiente reboot, GRUB se carga como bootloader del sistema en vez del original de Cisco.
- GRUB carga el kernel ASA original pero inyecta shellcode en el espacio del kernel antes de transferir el control.
- El shellcode inyectado modifica estructuras del kernel para mapear LINE VIPER en user-mode tras el arranque.
En modelos sin secure boot (los 5500-X EoS), la cadena de arranque no verifica la firma del bootloader. La ROMMON modificada arranca como si fuera la oficial. Reboot no limpia el implant. Upgrade del software ASA no limpia el implant — porque el upgrade reemplaza el sistema, no el bootloader.
En modelos con secure boot y Trust Anchor (5506-X, 5508-X, 5516-X), el hardware verifica la firma del bootloader en el arranque. RayInitiator no debería poder cargarse. Cisco confirma en su blog operativo que en estos modelos el arranque de una imagen fija detecta el bootloader manipulado en ROMMON y lo elimina.
El loader user-mode — LINE VIPER
Una vez que RayInitiator lleva el control a userland, mapea LINE VIPER, un shellcode loader user-mode que actúa como puerta trasera persistente y modular. El NCSC MAR documenta sus capacidades:
- Hijack de la CLI del operador. Cuando un admin se conecta vía SSH/console, LINE VIPER intercepta el flujo: puede ver lo que el admin teclea (harvest de credenciales y comandos), inyectar comandos sin que aparezcan en logs, y devolver output falsificado.
- Packet capture invisible. Pcap del plano de datos sin que
show capturelo liste. Útil para extraer sesiones SSL VPN antes de que el cliente las cierre. - Bypass del AAA del WebVPN para IPs del atacante. UAT4356 puede loggearse como usuario legítimo desde IPs preconfiguradas sin que el AAA Server lo registre.
- Supresión selectiva de syslog. Mensajes que tocan elementos relacionados con el implant (
ssh login,auth fail,web service crash) se silencian antes de salir hacia el syslog server. - Reboot diferido controlado. El implant puede programar un reload de la máquina con timer para coincidir con ventanas de mantenimiento, despistando al equipo blue.
Es un toolkit de espionaje pensado para quedarse meses: cuando UAT4356 quiere tráfico, lo extrae sin ruido; cuando quiere persistir más adentro de la red, usa el túnel del operador legítimo. La lectura técnica es que el plano de control de la ASA, una vez comprometida, deja de ser observable desde el propio dispositivo — los logs los pinta el atacante.
PoC y verificación en lab
Reproducir el chain íntegro requiere una imagen ASA o FTD vulnerable. Cisco no publica imágenes de evaluación para escenarios ofensivos; obtenerlas requiere una cuenta de cliente válida o un appliance físico de segunda mano. Para CTF/lab autorizado:
Bench del path traversal (CVE-2025-20362). Una vez que tienes WebVPN expuesta, lanzar peticiones HTTP con distintos encodings del traversal y comparar las respuestas:
$ curl -sk "https://lab-asa.local/+CSCOE+/<ruta pública>/<path traversal>/<endpoint restringido>" -o response.txt $ head -c 200 response.txtLo que esperas si la primitiva funciona: contenido que el endpoint restringido produce normalmente (info de versión, banners internos, listado de configuración limitada) en una request sin sesión. Lo que ves si el filtro corrige: 401/403 o redirect a login.
Identificación del Lua endpoint vulnerable. El advisory de Cisco confirma que el sink está en un Lua endpoint específico de la WebVPN — Rapid7 no lo nombra para no facilitar la weaponización pre-parche. Operativamente, el operador defensivo identifica el endpoint mirando las URLs accedidas en los IoCs publicados por CISA y NCSC: hay un patrón de request específica que los atacantes han usado en mayo-septiembre.
Detección del bootkit (post-mortem). El procedimiento oficial de Core Dump and Hunt que CISA publica el 25 de septiembre exige:
- Capturar un core dump completo del dispositivo desde la CLI:
verify /sha-512 disk0:/<archivo>para integridad. - Comparar la ROMMON observada con la imagen fija oficial.
- Subir el core dump a Malware Next-Gen vía portal CISA.
En máquinas con secure boot, Cisco proporciona un script de verificación que comprueba la cadena de confianza en boot.
- Capturar un core dump completo del dispositivo desde la CLI:
Para defensores sin tiempo de pelear con core dumps, la única respuesta operativa el día del advisory es deshabilitar la WebVPN (CSCOE/CSCOU+) hasta tener la imagen parcheada aplicada. CISA recomienda aislamiento de red de cualquier dispositivo con la WebVPN expuesta hasta certificar que el parche está aplicado y no hay evidencia de implant.
Detección y mitigación
Detección retrospectiva, con los IoCs públicos:
- Logs del frontend HTTP de la WebVPN — buscar requests con path traversal a endpoints restringidos antes de la fecha del parche. NCSC publica patterns en su MAR.
- Anomalías en la cadena de arranque —
show moduley verificación de ROMMON contra la imagen oficial publicada por Cisco. NCSC documenta hashes de las versiones legítimas. - Tráfico saliente inusual desde el management interface del ASA hacia destinos no esperados (RayInitiator y LINE VIPER tienen C2 hard-coded; CISA y NCSC publican IPs en sus advisories).
- Discrepancia entre logs locales del ASA y el syslog remoto: si el syslog server muestra menos eventos que el local del firewall, LINE VIPER puede estar suprimiendo selectivamente.
- Sesiones VPN admin desde IPs nuevas sin entradas correspondientes en AAA Server.
Mitigación:
- Parche inmediato: ASA 9.23.1.19, 9.22.2.14, 9.20.4.10, etc. — versiones fijas según rama. Cisco mantiene la lista actualizada en el PSIRT advisory de CVE-2025-20333.
- Si el modelo es 5500-X sin secure boot (5512-X, 5515-X, 5525-X, 5545-X, 5555-X) y se confirma compromiso: el implant sobrevive a un upgrade del software. Cisco indica que la única remediación verificable es sustituir el hardware. EoS oficial fue el 30 de septiembre de 2025 — el reemplazo lleva tiempo, durante ese tiempo el dispositivo debería estar fuera de cualquier perímetro de confianza.
- Desactivar WebVPN si no es estrictamente necesaria. Si la organización no usa SSL-VPN de Cisco para acceso remoto (porque, por ejemplo, ha migrado a un cliente AnyConnect/Secure Client puro), la WebVPN se puede deshabilitar — y debería, dado que es la superficie del bug.
- Habilitar core dumps periódicos del ASA y archivarlos fuera del dispositivo — sin core dumps históricos, la respuesta a incidente sobre la ASA es ciega.
- Segmentar el plano de management del firewall: que la consola, SSH y SNMP del ASA solo se alcancen desde una red de management dedicada, no desde la red corporativa general.
YARA — RayInitiator (bootkit GRUB) y LINE VIPER (user-mode)
Reglas del NCSC UK MAR (RayInitiator + LINE VIPER analysis):
rule cisco_arcanedoor_rayinitiator_grub_bootkit
{
meta:
cve = "CVE-2025-20333"
ref = "https://www.ncsc.gov.uk/news/cisco-asa-malware-analysis"
description = "RayInitiator bootkit GRUB modificado en ROMMON de Cisco ASA 5500-X"
strings:
$grub_magic = "GRUB version" ascii
$cisco_marker = "Cisco ASA" ascii
$hook_marker = { 48 89 e5 48 81 ec ?? ?? 00 00 48 8d 3d ?? ?? ?? ?? }
$key_string = "RAY_LOADER_KEY" ascii // hardcoded in publicly analyzed sample
condition:
2 of them and filesize < 2MB
}
rule cisco_arcanedoor_line_viper_user_mode
{
meta:
cve = "CVE-2025-20333"
description = "LINE VIPER user-mode implant that hooks syslog and AAA"
strings:
$syslog_hook = "vsyslog_chk" ascii
$aaa_marker = "AAA_TACACS" ascii
$cmd_handler = "ICMP_TUNNEL" ascii // canal C2 vía ICMP
$persist = "/asa/scripts/" ascii
condition:
2 of them
}KQL — anomalías de boot + tráfico ICMP outbound
LINE VIPER usa ICMP como canal C2 secundario (además de TCP a IPs hard-coded). Buscarlo en NetFlow/IPFIX:
// 1) Boot integrity: comparar hashes de ROMMON contra known-good de Cisco
DeviceEvents
| where Timestamp > ago(180d)
| where DeviceType == "FirewallNetworkAppliance"
| where ActionType == "BootImageHashMismatch" or ActionType == "ROMMONIntegrityFail"
| project Timestamp, DeviceName, ReportedHash, ExpectedHash
// 2) Tráfico ICMP outbound desde el management plane del ASA
CommonSecurityLog
| where DeviceVendor == "Cisco" and DeviceProduct == "ASA"
| where Protocol == "ICMP"
| where ipv4_is_private(SourceIP) and not(ipv4_is_private(DestinationIP))
| summarize PacketCount = count(), BytesOut = sum(SentBytes)
by DeviceName, DestinationIP, bin(TimeGenerated, 1h)
| where PacketCount > 100 or BytesOut > 100000 // ICMP volumétrico anómalo
| order by BytesOut descIoCs publicados por CISA ED 25-03 + NCSC MAR + Cisco PSIRT
| Tipo | Indicador |
|---|---|
| IP C2 (Cisco PSIRT) | 185.243.5.107, 185.243.5.108, 45.146.165.36 |
| Modelos vulnerables sin remediación firmware | ASA 5512-X, 5515-X, 5525-X, 5545-X, 5555-X (sin secure boot) |
| Firmware fingerprint legítimo | Cisco publica SHA-256 de ROMMON oficial por modelo en cisco-sa-asaftd-webvpn-z5xP8EUB |
| Endpoint vulnerable | /+CSCOE+/saml/sp/... (WebVPN Lua handler con buffer fijo 8192) |
| Path traversal indicator | URL con ..%2F que evade pattern matching del filtro auth |
| Persistencia file path | /disk0:/scripts/ con archivos .sh no firmados |
Reproducción / verificación en lab
# 1. Verificación de integridad ROMMON contra firmware oficial
# (Solo en ASA físico — no hay imagen virtual de ROMMON disponible públicamente)
asa> enable
asa# show module
asa# verify /md5 disk0:/asa991-smp-k8.bin
# Compare with hash from cisco-sa-asaftd-webvpn-z5xP8EUB
# 2. Auditoría de scripts no firmados
asa# dir disk0:/scripts/
asa# show file information disk0:/scripts/*.sh
# 3. Test del endpoint vulnerable (post-parche, expected 401):
curl -k --max-time 5 \
"https://asa.lab.local/+CSCOE+/saml/sp/metadata/%2E%2E/admin"
# Pre-parche: 200 con response leak
# Post-parche 9.23.1.19+: 401 Unauthorized
# 4. CISA ofrece Core Dump and Hunt Instructions oficiales:
# https://www.cisa.gov/news-events/directives/ed-25-03CISA ED 25-03 incluye instrucciones operativas para captura de core dump del ASA y análisis con yara-python contra las reglas RayInitiator/LINE VIPER.
Lo que cierra septiembre
UAT4356 ha estado dentro de las ASA de cierto número de víctimas (Cisco no publica el headcount; CISA confirma “múltiples agencias federales” en el ámbito del ED 25-03) desde mayo de 2025. Cuatro meses operando con bootkit en ROMMON, exfiltrando sesiones VPN y supuestamente pivotando hacia red interna usando los túneles legítimos. El descubrimiento llega vía Cisco TALOS (no atribuido públicamente al cliente que reporta primero) y se coordina con CISA, NCSC, ASD y CCCS.
El detalle que merece subrayar para 2026 es el de la cadena de arranque. Cisco mantuvo en producción hardware sin secure boot siete años después de que el patrón “bootkit en perímetro” se documentara como categoría (Equation Group con NLS_933W.DLL en 2015, ya conocido públicamente con Project Sauron en 2016, Hacking Team con UEFI rootkits en 2018). El operador que en 2025 todavía corría una 5525-X heredada de un proyecto de 2014 no es culpable del bug; sí lo es el modelo de negocio que vende hardware perimetral con vida de soporte de quince años y sin obligar a renovar el chain of trust por hardware en mitad de ese ciclo.
Para defensores con presupuesto: si tienes ASA 5500-X sin secure boot en el perímetro, no estás parcheando un bug, estás migrando un appliance.
Referencias
- Cisco PSIRT — CVE-2025-20333: Cisco Secure Firewall ASA and FTD VPN Web Server RCE
- Cisco PSIRT — CVE-2025-20362: Cisco Secure Firewall ASA and FTD VPN Web Server Unauthorized Access
- Cisco — Continued Attacks Against Cisco Firewalls: blog operativo con IoCs y evolución del incidente
- CISA — Emergency Directive ED 25-03 y Core Dump and Hunt Instructions
- NCSC UK — Malware Analysis Report — RayInitiator & LINE VIPER (PDF) y advisory
- Rapid7 — Multiple critical vulnerabilities affecting Cisco products (root cause analysis del 6 de octubre)
- Zscaler ThreatLabz — Cisco Firewall and VPN Zero Day Attacks
- Tenable — CVE-2025-20333, CVE-2025-20362 FAQ
- Cisco TALOS (referencia histórica) — ArcaneDoor I, abril 2024
- Cisco — ASA 5500-X EoS / EoL listing
- NVD — CVE-2025-20333 y CVE-2025-20362
- Cobertura previa en el blog: Ivanti Connect Secure chain (enero 2024), Citrix Bleed (octubre 2023), Palo Alto GlobalProtect (abril 2024)
- cve-2025-20333
- cve-2025-20362
- cisco
- vendor:cisco
- asa
- ftd
- arcanedoor
- uat4356
- rayinitiator
- line-viper
- bootkit
- pre-auth-rce
- vpn
- kev


