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。
在每个应用服务器和每个 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 注释并重启,因为修复包含在内核二进制文件中。
- 为每个 AS ABAP 应用服务器应用注释 3778530,为每个 Web Dispatcher 应用注释 3778556,包括 HANA XS 和 XS Advanced 的内嵌组件。达到表中的补丁级别。
- 为每个网关应用注释 3798345,然后在内核支持的地方设置
gw/acl_mode_proxy = 1。内核 7.93 和 9.16 已支持该参数。内核 7.22、7.53、7.54、7.77 和 8.04 通过该注释获得支持。 - 为受影响的 SAP_BASIS 版本应用注释 3849308 以修复 SAML2 漏洞,然后在事务 SAML2 中检查受信任的身份提供者。
- 重启每个已修复组件并确认运行中的内核补丁号。安装支持包后不重启会让有漏洞的二进制文件留在内存中。
- 限制对 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 的暴露。两者都不能替代补丁,且都会改变行为。
- 禁用 WebSocket。在配置文件中设置
icm/HTTP/support_websocket_upgrade=FALSE,并重启 ICM 或 Web Dispatcher。这会移除有漏洞的路径,但会破坏 ABAP Push Channels 以及部分 Fiori 和集成场景。先检查 HTTP 日志中的状态码 101,因为没有 WebSocket 流量的系统损失更小。 - 用已修复的 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 提供了可用的端到端利用程序,因此以下步骤描述其公告公开的路径。
- 访问 ICM 或 Web Dispatcher 的 HTTP 或 HTTPS 端口。即使系统不使用 WebSocket,WebSocket 支持也默认启用。
- 完成 WebSocket 升级。SAP S/4HANA 中一些默认 ICF 服务接受未经身份认证的 WebSocket 连接。
- 发送一段精心构造的 WebSocket 控制帧序列,其大小或长度字段与后面的数据不匹配。
- 重新组装代码信任这些值,并越过为连接保留的缓冲区写入。格式错误的序列会让进程崩溃。
- 塑造被破坏的内存以重定向执行。Onapsis 表示其利用程序端到端地以
<sid>adm身份执行操作系统命令。
PROXYGATE 走另一条路径到达同一个账户:
- 从代理策略视为不受信任的网络访问网关端口 33NN 或 48NN。
- 发送精心构造的代理请求。错误的分类让网关把来源当作内部应用服务器。
- “允许内部”规则通过,网关以
<sid>adm的权限启动请求指定的程序。
SAML2 漏洞不需要执行命令:
- 访问 SAML2 服务提供者端点。
- 在受影响配置下提交精心构造的身份认证断言。
- 服务在没有充分验证的情况下接受它,并为它指定的用户创建会话。
攻击如何展开?
精心构造的 WebSocket 到达 ICM 或 Web Dispatcher,破坏其堆并以 <sid>adm 身份执行命令。PROXYGATE 通过另一条路径以该账户执行操作系统命令;SAML2 漏洞则冒充 SAP 应用用户,包括管理员。
(没有大小校验)"] D --> E["崩溃或堆破坏"] E --> F["以
攻击者能做什么?
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 源)