CVE-2026-78689是 F5 于近日披露的 NGINX JavaScript(njs)模块高危漏洞:XML 模块的命名空间前缀列表解析器存在越界写入缺陷,未认证的远程攻击者可触发 NGINX worker 崩溃或内存持续增长,官方 nginx-saml 参考实现在 SAML 签名验证路径上即受影响。
事件概述
F5 已发布公告(K000162602),该漏洞存在于 njs 的 XML 模块,可通过 xml.exclusiveC14n() 方法触达。当 NGINX 配置将外部可控的 XML 命名空间前缀列表传入该方法时,攻击者即可利用,无需任何认证。njs 与 QuickJS(qjs)两种引擎均受影响,受影响版本为 0.7.10 至 1.0.1 之前的所有版本。
技术细节
构造恶意的前缀列表会导致超出堆分配末尾的越界写入(CWE-122)。在 njs 引擎(即未配置 js_engine 指令时的默认引擎)下,越界写入会破坏堆上相邻对象并导致 NGINX worker 崩溃;在 QuickJS 引擎下,同一调用还会在每次执行时泄漏前缀列表内存,造成 worker 内存随请求持续增长。
更值得关注的是,官方 nginxinc/nginx-saml 参考实现在 SAML 签名验证过程中受影响:它在签名验证完成之前,就把来自不可信 SAML 消息的 InclusiveNamespaces/@PrefixList 传入 xml.exclusiveC14n(),因此攻击者无需持有有效 SAML 签名,仅凭构造的 SAML Response、Assertion、LogoutRequest 或 LogoutResponse 即可触发。
影响评估
CVSS v3.1 评分 8.1(高危),CVSS v4.0 评分 9.2(严重),向量均为网络远程、无需权限、无需用户交互。实际危害以拒绝服务为主:攻击者可通过可复现的 worker 重启或内存增长打瘫 NGINX 服务。代码执行尚未被证实,但由于越界写入的后果部分取决于攻击者不可控的堆状态,官方明确表示无法排除所有平台上的代码执行可能。该漏洞属于数据面问题,不涉及控制面暴露。
修复建议
- 升级 njs 至 1.0.1 或更高版本(该漏洞自 0.7.10 起受影响)。
- 审计所有调用
xml.exclusiveC14n()的配置,避免将不可信来源的 XML 命名空间前缀列表传入该方法,SAML 场景务必在签名验证完成后再处理 PrefixList。 - 临时缓解:限制管理面与 SAML 端点的公网暴露,配置 worker 异常重启告警与内存增长监控。
- 检测规则:关注 worker 进程异常退出与 restart 频率、qjs 引擎实例的内存爬升曲线,以及来源异常的 SAML LogoutRequest/Response 请求。