79% 对 51%:独立数字银行的应用安全落后。 阅读报告

深度解析

深度解析

SAP NetWeaver ICM2SHELL:认证前RCE(CVE-2026-76964)

SAP 11月补丁日修复了ICM与Web Dispatcher中的认证前RCE漏洞ICM2SHELL,以及另外三个CVSS 10.0漏洞。

TL;DR

  • ICM2SHELL 是 SAP 内核 WebSocket 处理中的一个内存破坏漏洞,该代码由 Internet Communication Manager(ICM)和 SAP Web Dispatcher 共用。一段精心构造的 WebSocket 消息会让进程崩溃,或以 <sid>adm 身份执行命令。
  • 它影响内核 7.40 及以上的 SAP NetWeaver AS ABAP,以及所有 Web Dispatcher,包括内嵌在 SAP HANA XS 中的那一个。AS Java 不直接受影响。
  • SAP 将 CVE-2026-76964、CVE-2026-89126、CVE-2026-89103 和 CVE-2026-120017 评为 CVSS v3.1 10.0 严重。目前没有已知利用,CISA 也未记录利用,截至 2026 年 11 月 14 日,四者均不在 KEV 中。
  • 为 ICM 和 Web Dispatcher 应用 SAP 注释 3778530 和 3778556,为网关应用 3798345,为 SAML2 应用 3849308。修复后的内核补丁级别见“如何修复?”。

我受影响吗?

满足以下两个条件时,你受 ICM2SHELL 影响:

  • 系统在内核 7.40 或更高版本上运行 SAP NetWeaver AS ABAP,或运行任意 SAP Web Dispatcher。
  • 攻击者能够访问 ICM 或 Web Dispatcher 提供的 HTTP 或 HTTPS 端口。

所有 Web Dispatcher 都算,包括独立部署的,以及内嵌在 SAP HANA XS Classic 或 XS Advanced 中的。SAP NetWeaver AS Java 不受 ICM2SHELL 影响。双栈系统通过其 ABAP 栈受影响。SAP Content Server 不受影响。内核 7.22 不受影响。

同一个补丁日还修复了另外三个认证前漏洞,它们的暴露条件各不相同:

  • PROXYGATE(CVE-2026-89103) 影响所有运行 SAP 网关的系统,包括 ABAP、AS Java、双栈和独立网关。网关的代理策略决定它是否可被利用。
  • SAML2 漏洞(CVE-2026-120017) 影响在 SAP 注释 3849308 所述配置下使用 SAML2 服务提供者的 NetWeaver AS ABAP 系统。
内核或组件 受影响版本 修复后补丁级别
SAP 内核与 Web Dispatcher 7.53 1616, 1617
SAP 内核与 Web Dispatcher 7.54 710
SAP 内核与 Web Dispatcher 7.77 914
SAP 内核与 Web Dispatcher 7.93 401, 420
SAP 内核与 Web Dispatcher 9.16 111
SAP 内核 9.18 37
SAP 内核 9.20 11, 13
SAP HANA 2.0 XS Classic 内嵌 Web Dispatcher 修订版 079 和 089 2.00.079.11, 2.00.089.05
SAP XS Advanced 与 XS Runtime 1 SP05 补丁 4
已停止维护的内核 7.40, 7.41, 7.42, 7.45, 7.49, 7.73, 7.81, 7.85, 7.89 无修复;升级

对于内核 7.93,补丁编号更高并不代表已修复:PL 419 仍受影响。请使用更新后的 PL 401 Stack Kernel、发布后的 PL 402 或 PL 420 及以上,并查阅 SAP 注释 3778788 的 FAQ 6 以确认正确的分支。

表中列出了九个已修复行和一个 SAP 不再维护的内核行。这些是 ICM 和 Web Dispatcher 修复的补丁级别。网关的补丁级别不同,见“如何修复?”。

SAP 11月补丁日发布了43条新增和更新的安全注释,其中12条为HotNews,13条为High Priority。其中4条为CVSS v3.1 10.0。

SAP 2026年11月补丁日发布了43条注释
图1:SAP 2026年11月补丁日发布的注释。来源:Onapsis, SAP Security Notes: November 2026 Patch Day,2026年11月14日检查

在每个应用服务器和每个 Web Dispatcher 上检查运行中的内核,而不只是主实例:

# On every application server, including each additional one
disp+work -v

# Through sapcontrol, for each instance number
sapcontrol -nr <NR> -function GetVersionInfo | grep -Ei 'kernel|patch'

# Gateway proxy mode: 1 is restrictive, 0 or an absent parameter is the default allow-all
sapcontrol -nr <NR> -function ParameterValue gw/acl_mode_proxy

disp+work -v 打印运行中二进制文件的内核版本和补丁号。将该补丁号与你的版本所在行比较。在 Web Dispatcher 上,从其版本输出或实例工作目录中 dev_webdisp 的前几行读取相同的值。

如何修复?

为每个受影响组件应用 SAP 注释并重启,因为修复包含在内核二进制文件中。

  1. 为每个 AS ABAP 应用服务器应用注释 3778530,为每个 Web Dispatcher 应用注释 3778556,包括 HANA XS 和 XS Advanced 的内嵌组件。达到表中的补丁级别。
  2. 为每个网关应用注释 3798345,然后在内核支持的地方设置 gw/acl_mode_proxy = 1。内核 7.93 和 9.16 已支持该参数。内核 7.22、7.53、7.54、7.77 和 8.04 通过该注释获得支持。
  3. 为受影响的 SAP_BASIS 版本应用注释 3849308 以修复 SAML2 漏洞,然后在事务 SAML2 中检查受信任的身份提供者。
  4. 重启每个已修复组件并确认运行中的内核补丁号。安装支持包后不重启会让有漏洞的二进制文件留在内存中。
  5. 限制对 ICM 和 Web Dispatcher 的 HTTP/HTTPS 端口以及网关端口 33NN 和 48NN 的网络访问。

网关修复使用自己的补丁级别,因为网关代码是内核的另一部分:

内核 所需最低补丁
7.22 EXT, 7.22_EX2, 7.22_EX3 1612
7.53 1625
7.54 718
7.77 915
8.04 244
9.20 16
9.21 4

内核 7.20、7.21、7.40、7.41、7.42、7.45、7.49、7.73、7.81、7.85 和 7.89 已停止维护。请按照 SAP 注释 3810197 的说明,升级到仍受维护的向下兼容内核。

SAP 支持的两个临时措施可以降低 ICM2SHELL 的暴露。两者都不能替代补丁,且都会改变行为。

  1. 禁用 WebSocket。在配置文件中设置 icm/HTTP/support_websocket_upgrade=FALSE,并重启 ICM 或 Web Dispatcher。这会移除有漏洞的路径,但会破坏 ABAP Push Channels 以及部分 Fiori 和集成场景。先检查 HTTP 日志中的状态码 101,因为没有 WebSocket 流量的系统损失更小。
  2. 用已修复的 Web Dispatcher 保护后端。7.53 PL 1629、7.54 PL 723、7.93 PL 430、9.16 PL 200 或更高的 Web Dispatcher 只保护完全通过它访问的系统。它不能保护攻击者可直接访问的后端。当 Web Dispatcher 使用 icm/server_port_<x> = PROT=ROUTER 时也不起作用。

在网关上,限制性的 prxyinfo 文件是临时控制措施。将 P SOURCE=* DEST=* 之类的规则替换为仅限受信任主机和目标的规则。当没有 prxyinfo 文件且内核尚不支持该参数时,创建一个文件,直到应用补丁。SAP 没有列出可替代注释 3798345 的变通方法。

公开分析没有列出 SAML2 漏洞的变通方法。应用注释 3849308 就是修复。

根本原因是什么?

ICM 是 SAP 内核中接收 ABAP 系统 HTTP、HTTPS 和 WebSocket 流量的组件。每个浏览器会话、Fiori 应用、OData 调用和 Web 服务请求都经过它。SAP Web Dispatcher 是用同一内核代码构建的反向代理,它自己重新组装 WebSocket 消息,而不只是转发。

ICM2SHELL 是该 WebSocket 重新组装步骤中的一个堆内存破坏漏洞。 WebSocket 连接以请求升级的 HTTP 请求开始。随后消息可以被拆分为多个片段,接收方在把消息交给应用之前将它们拼接起来。Onapsis 发现 WebSocket 控制帧中的一些大小和长度参数没有得到正确校验。

一段精心构造的帧序列会让 ICM 或 Web Dispatcher 越过为连接保留的内存写入攻击者控制的数据。结果是立即崩溃或受控的堆破坏。SAP 内核是闭源的,因此没有公开的漏洞函数;Onapsis 在其公告中描述了这一机制。

PROXYGATE 是网关应用其代理访问控制列表方式中的一个独立内核漏洞。 SAP 网关启动辅助程序并中继 RFC 连接。它的 prxyinfo 文件列出哪些来源可以打开代理连接以及这些连接可以到哪里。当文件缺失时,配置文件参数 gw/acl_mode_proxy 决定默认行为。它默认是 0,即允许所有代理连接。

SAP 的默认访问控制列表还会把外部攻击者归类为内部应用服务器。因此,一段精心构造的请求会通过“允许内部”规则,网关会启动攻击者要求的程序。

SAML2 漏洞是断言验证缺口。 SAP 表示,SAML2 服务提供者在某些配置下没有充分验证传入的身份认证断言。未认证的攻击者可以提交精心构造的断言,并以任意用户(包括特权用户)的身份获得会话。

如何被利用?

ICM2SHELL 没有公开的验证代码。Onapsis 隐去了技术利用细节,并向 SAP 提供了可用的端到端利用程序,因此以下步骤描述其公告公开的路径。

  1. 访问 ICM 或 Web Dispatcher 的 HTTP 或 HTTPS 端口。即使系统不使用 WebSocket,WebSocket 支持也默认启用。
  2. 完成 WebSocket 升级。SAP S/4HANA 中一些默认 ICF 服务接受未经身份认证的 WebSocket 连接。
  3. 发送一段精心构造的 WebSocket 控制帧序列,其大小或长度字段与后面的数据不匹配。
  4. 重新组装代码信任这些值,并越过为连接保留的缓冲区写入。格式错误的序列会让进程崩溃。
  5. 塑造被破坏的内存以重定向执行。Onapsis 表示其利用程序端到端地以 <sid>adm 身份执行操作系统命令。

PROXYGATE 走另一条路径到达同一个账户:

  1. 从代理策略视为不受信任的网络访问网关端口 33NN 或 48NN。
  2. 发送精心构造的代理请求。错误的分类让网关把来源当作内部应用服务器。
  3. “允许内部”规则通过,网关以 <sid>adm 的权限启动请求指定的程序。

SAML2 漏洞不需要执行命令:

  1. 访问 SAML2 服务提供者端点。
  2. 在受影响配置下提交精心构造的身份认证断言。
  3. 服务在没有充分验证的情况下接受它,并为它指定的用户创建会话。

攻击如何展开?

精心构造的 WebSocket 到达 ICM 或 Web Dispatcher,破坏其堆并以 <sid>adm 身份执行命令。PROXYGATE 通过另一条路径以该账户执行操作系统命令;SAML2 漏洞则冒充 SAP 应用用户,包括管理员。

flowchart LR A["攻击者访问HTTP或HTTPS端口"] --> B["WebSocket升级被接受"] B --> C["格式错误的控制帧"] C --> D["重新组装越过缓冲区写入
(没有大小校验)"] D --> E["崩溃或堆破坏"] E --> F["以adm身份执行操作系统命令"]

攻击者能做什么?

ICM2SHELL 让拥有网络访问权限的未认证攻击者获得与拥有 SAP 安装的 <sid>adm 账户相同的控制权。

  • 从安全存储和实例配置文件中读取数据库凭据和其他机密,然后直接在数据库中读取或修改业务数据。
  • 收集 RFC 目标和技术凭据,然后转向已连接的 SAP 和非 SAP 系统。
  • 修改配置或二进制文件并保持持久访问。
  • 停止系统或破坏数据,使其运行业务流程离线。

单个格式错误的连接也可能让 ICM 或 Web Dispatcher 崩溃。进程重启期间,它提供的每个 Fiori 应用、API 和 Web 服务都不可用,反复尝试会让它持续停机。

PROXYGATE 在未经身份认证的情况下提供与 <sid>adm 相同的命令执行,但仅在网关代理策略宽松或缺失时成立。限制性的 prxyinfo 会阻断来自不受信任网络的路径。

SAML2 漏洞提供任意 SAP 用户(包括管理员)的会话。它取决于 SAP 描述的 SAML2 配置,并可能通过被冒充用户的授权扩展到已连接系统。

为什么修复有效?

内核补丁弥补了 Onapsis 所描述的 WebSocket 重新组装步骤中的校验缺口。

注释 3778530 和注释 3778556 在表中的补丁级别提供修正后的内核代码。由于 ICM 和 Web Dispatcher 共用代码,修复同时覆盖两者。

注释 3798345 改变网关的默认代理行为并添加 gw/acl_mode_proxy。应用注释后,运维人员必须把参数设为 1,这样缺少 prxyinfo 时默认是限制性的,而不是全部允许。注释 3849308 添加缺失的传入 SAML2 断言验证。

SAP 没有为这些闭源组件发布补丁差异,因此无法逐行检查修复。Onapsis 指出漏洞位于重新组装步骤,SAP 注释列出了修复后的补丁级别。两家厂商都没有公开修改后的代码。

如何检查是否已遭入侵?

SAP 和 Onapsis 都没有发布 ICM2SHELL 的入侵指标。以下检查寻找一次尝试留下的崩溃和重启模式,以及其他漏洞会产生的网关和 SAML2 活动。

  • 在每个应用服务器和 Web Dispatcher 上,检查 /usr/sap/<SID>/<INSTANCE>/work/ 中的 dev_icm 和 dev_webdisp,寻找维护窗口之外的意外终止、崩溃或重启记录。
  • 将 icman 和 sapwebdisp 的进程 ID 与上一次计划重启比较。没有补丁或重启却发生变化,是一条线索。
  • 在 ICM 或 Web Dispatcher 的 HTTP 日志中搜索状态码 101,即 WebSocket 升级。如果没有应用使用 WebSocket,任何此类请求都值得检查。
  • 在网关上,检查 dev_gwrd 和安全审计日志,寻找来自 SAP 服务器网络之外的入站代理连接,以及已知任务之外启动的辅助程序。
  • 对于 SAML2,检查没有对应身份提供者认证事件的登录,以及 2026 年 11 月 10 日以来新增或变更的特权用户。

失败的尝试除了崩溃之外可能不留痕迹,而崩溃也可能有其他原因。请把这些结果当作线索,而不是证据。

时间线

  • 2026-11-10:SAP 发布 11 月安全注释,包括 3778530、3778556、3798345 和 3849308,以及四个漏洞的 CVE 记录。Onapsis 发布 ICM2SHELL 和 PROXYGATE 分析及其补丁日综述。
  • 2026-11-12:Onapsis 更新 ICM2SHELL 和 PROXYGATE 公告。
  • 2026-11-14:没有报告利用,CISA 的 SSVC 记录仍为无,四个 CVE 均不在 CISA KEV 目录中。

常见问题

ICM2SHELL 是否已在真实环境中被利用?

没有。Onapsis 在 11 月 10 日表示未观察到利用,CISA 的 SSVC 记录为无,截至 2026 年 11 月 14 日四个 CVE 均不在 KEV 中。Onapsis 交给 SAP 的可用利用程序是演示,不是公开工具。

身份认证能保护 SAP 系统免受 ICM2SHELL 影响吗?

不能。该漏洞可在身份认证之前到达,因此只要能访问 HTTP 或 HTTPS 端口就足够。SAP S/4HANA 的一些默认 ICF 服务接受未经身份认证的 WebSocket 连接。

SAP NetWeaver AS Java 受影响吗?

就 ICM2SHELL 而言不受影响。漏洞位于 ABAP 栈的内核代码中,双栈系统通过该栈受影响。网关漏洞确实影响 AS Java 系统和独立网关。

SAP HANA 数据库受影响吗?

内嵌在 HANA XS Classic 和 XS Advanced 中的 Web Dispatcher 受影响,修复后的修订版是 2.00.079.11 和 2.00.089.05。Onapsis 没有把 HANA 数据库引擎本身列为受影响。

我可以禁用 WebSocket 而不打补丁吗?

如果没有应用使用它,可以。设置 icm/HTTP/support_websocket_upgrade=FALSE 并重启组件。这会移除 ICM2SHELL 路径,但会破坏 ABAP Push Channels 和部分 Fiori 场景,因此先检查 HTTP 日志中的状态码 101。

应用注释后还需要设置什么吗?

网关需要。应用注释 3798345 后,在支持的内核上设置 gw/acl_mode_proxy = 1,并保留限制性的 prxyinfo 文件。对于 ICM2SHELL,内核补丁就是修复,必须重启组件才能加载修复后的二进制文件。

用Ostorlab盘点暴露的SAP系统

用 Ostorlab 攻击面发现盘点网络中可访问的 SAP 应用服务器和 Web Dispatcher。Basis 团队因此知道应先修复和重启哪些主机。

参考文献

  • Onapsis Research Labs, "ICM2SHELL (CVE-2026-76964 and CVE-2026-89126): A Critical Pre-Authentication Vulnerability in SAP NetWeaver's ICM and Web Dispatcher", 2026 年 11 月 10 日,2026 年 11 月 12 日更新: https://onapsis.com/blog/icm2shell-cve-2026-76964-cve-2026-89126-sap-netweaver-web-dispatcher-threat-advisory/ (2026 年 11 月 14 日检查)
  • Onapsis Research Labs, "PROXYGATE (CVE-2026-89103): A Critical Pre-Authentication Vulnerability in SAP NetWeaver's Gateway", 2026 年 11 月 10 日,2026 年 11 月 12 日更新: https://onapsis.com/blog/proxygate-cve-2026-89103-sap-netweaver-gateway-threat-advisory/ (2026 年 11 月 14 日检查)
  • Onapsis Research Labs, "SAP Security Notes: November 2026 Patch Day", 2026 年 11 月 10 日,2026 年 11 月 12 日更新: https://onapsis.com/blog/sap-security-patch-day-nov-2026/ (2026 年 11 月 14 日检查)
  • SAP 安全注释 3778530,CVE-2026-76964 的 ICM 修复: https://me.sap.com/notes/3778530 (2026 年 11 月 14 日检查)
  • SAP 安全注释 3778556,CVE-2026-89126 的 Web Dispatcher 修复: https://me.sap.com/notes/3778556 (2026 年 11 月 14 日检查)
  • SAP FAQ 注释 3778788,ICM2SHELL 的变通方法: https://me.sap.com/notes/3778788 (2026 年 11 月 14 日检查)
  • SAP 安全注释 3798345,CVE-2026-89103 的网关修复: https://me.sap.com/notes/3798345 (2026 年 11 月 14 日检查)
  • SAP 安全注释 3849308,CVE-2026-120017 的 SAML2 修复: https://me.sap.com/notes/3849308 (2026 年 11 月 14 日检查)
  • SAP 注释 3810197,停止维护内核的向下兼容升级路径: https://me.sap.com/notes/3810197 (2026 年 11 月 14 日检查)
  • CVE-2026-76964 记录,CVSS v3.1 10.0,2026 年 11 月 10 日发布: https://www.cve.org/CVERecord?id=CVE-2026-76964 (2026 年 11 月 14 日检查)
  • CVE-2026-89126 记录,CVSS v3.1 10.0,2026 年 11 月 10 日发布: https://www.cve.org/CVERecord?id=CVE-2026-89126 (2026 年 11 月 14 日检查)
  • CVE-2026-89103 记录,CVSS v3.1 10.0,2026 年 11 月 10 日发布: https://www.cve.org/CVERecord?id=CVE-2026-89103 (2026 年 11 月 14 日检查)
  • CVE-2026-120017 记录,CVSS v3.1 10.0,2026 年 11 月 10 日发布: https://www.cve.org/CVERecord?id=CVE-2026-120017 (2026 年 11 月 14 日检查)
  • CISA 已知被利用漏洞目录,四个 CVE 均未列入: https://www.cisa.gov/known-exploited-vulnerabilities-catalog (2026 年 11 月 14 日检查,通过目录的 JSON 源)