Apache 软件基金会于 2026 年 8 月 6 日发布 Apache CXF 的两项高危漏洞公告。CVE-2026-66909 修复 JMS 传输层反序列化远程代码执行漏洞,CVSS v3.1 评分 9.8(v2 评分 10.0);CVE-2026-68079 修复 OAuth2 DefaultEncryptingCodeDataProvider 未失效授权码导致的重放漏洞,同样评分 9.8。两份公告均影响 Apache CXF 主分支与 LTS 分支,已在 3.6.12、4.1.8、4.2.3 中修复。
事件概述
CVE-2026-66909 位于 CXF 的 JMS 传输:客户端收到的任意 ObjectMessage 会被直接交给原生 Java 反序列化器解析,且没有任何类型白名单。攻击者只需能将消息写入 JMS 目标,便可投递一个精心构造的序列化对象,结合当前 ClassPath 上的 gadget 链触发反序列化 RCE。CVE-2026-68079 则位于 CXF 的 OAuth2 模块:removeCodeGrant() 实现存在缺陷,无法真正删除已使用的授权码,导致同一个被截获的授权码可以被无限次兑换。两类漏洞均无需认证、无需用户交互。
技术细节
- CVE-2026-66909:JMS ObjectMessage →
javax.jms.ObjectMessage.getObject()→ObjectInputStream.readObject();修复采用「默认禁用 ObjectMessage 反序列化」并保留显式开关给遗留业务。 - CVE-2026-68079:
DefaultEncryptingCodeDataProvider.removeCodeGrant没有真正从底层存储中删除授权码;RFC 6749 明确要求授权码「必须仅使用一次」。 - 影响范围:CXF 3.6.0 ~ 3.6.11、4.0.0 ~ 4.1.7、4.2.0 ~ 4.2.2 全部受影响。
- 修复版本:3.6.12 / 4.1.8 / 4.2.3,官方建议所有用户升级。
- 利用门槛:CVE-2026-66909 仅需消息队列可写;CVE-2026-68079 需捕获 OAuth2 授权码(典型场景是客户端日志、Referer、浏览器历史、抓包回放)。
影响评估
- CVSS 3.1:9.8(Critical),向量
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H。 - 实际危害:
① CVE-2026-66909 — 在具备 gadget 类(Apache Commons Collections/Spring 等)的部署中直接 RCE,最坏情况下整个 Java 进程被控制。
② CVE-2026-68079 — 单次授权码截获即可滥用,违反 OAuth2 单次使用原则,使授权流程整体失效。 - 影响面:CXF 是大量金融、电信、政府与 SaaS 系统中 Web 服务 / SOAP / REST / JMS 集成的承载体,CVSS 9.8 评分的 RCE 对依赖 CXF 的企业后端构成严重威胁。
- 威胁趋势:Java 反序列化漏洞长期位于 OWASP Top 10 附近,2026 上半年 Apache CXF 已多次公布类似级别漏洞(如 CVE-2026-50633 JNDI 注入)。
修复建议
- 立即升级:升级到 Apache CXF 3.6.12 / 4.1.8 / 4.2.3 三个修复版本之一,覆盖全部受支持分支。
- JMS 配置:升级后建议显式禁用自定义 ObjectMessage 反序列化,开启 JMS 端加密/签名策略,限定可信 Source。
- OAuth2 配置:核对授权码的存储后端(数据库/缓存),验证代码单次兑换后是否真正失效;启用 PKCE(
code_challenge)缓解重放。 - 纵深防御:在反代/WAF 中拦截可疑 SOAP/JMS 出站请求;为 CXF 服务配置 JVM 反序列化过滤器(JEP 290 /
-Djdk.serialFilter)阻止常见 gadget 链。 - 凭据轮换:若曾授权给受信第三方应用但不确定是否已捕获授权码,应撤销并轮换对应 OAuth2 Client 凭据。
- 检测规则:监控 CXF 服务中异常的
ObjectInputStream堆栈;监控 OAuth2 授权码使用次数(>1 即视为可疑)。