Payara JMX 认证绕过漏洞深度剖析:CVE-2026-90908 从主机地址伪造到 RCE 的攻击链路与生产加固实战

【Payara JMX 认证绕过】深度剖析 CVE-2026-90908:Payara Server 与 Payara Micro 的 GenericAdminAuthenticator 组件因客户端主机地址可伪造,导致远程未认证攻击者绕过 JMX/RMI 管理访问限制,CVSS 9.3 严重级...

导语:Payara JMX 认证绕过漏洞 CVE-2026-90908 以 CVSS 9.3 的严重级评分进入企业 Java 中间件安全视野——攻击者无需任何凭据,仅通过伪造客户端主机地址即可突破 GenericAdminAuthenticator 的管理访问限制,直取 MBean 服务器并走向远程代码执行。本文以架构师视角完整拆解这条从地址伪造到 RCE 的攻击链路,并给出可直接落地的生产加固方案。

🎯 核心技术Payara Server / Payara Micro · JMX/RMI · GenericAdminAuthenticator
⚡ 架构难度资深架构级 (Level 3-4)
🚀 核心收益阻断未认证管理面接管 · 消除 RCE 攻击面

一、漏洞速览:Payara JMX 认证绕过为何是 9.3 分

CVE-2026-90908 的核心问题出在 Azul Payara Server 与 Azul Payara Micro 的 GenericAdminAuthenticator 组件。该组件在 JMX/RMI 管理通道上承担“管理员身份判定”职责,但其判定逻辑依赖客户端上报的主机地址(host address)作为可信输入。由于该地址在 RMI 协议层可被攻击者伪造,认证边界被彻底击穿。

从 CVSS 9.3 的评分构成来看,这是一个典型的“网络可达 + 无需认证 + 高机密性/完整性/可用性影响”的组合。攻击者一旦绕过管理访问限制,即可对 MBean 服务器执行任意管理操作,而 JMX 生态中大量 MBean 具备调用任意方法、加载类、触发 JNDI 查找的能力,这为远程代码执行提供了天然跳板。

🚨 严重隐患告警

Payara Micro 仅在显式启用 JMX connector 时受影响;而 Payara Server 的默认管理部署形态往往暴露 JMX/RMI 端口。请立即盘点生产环境中所有开放 8686/4848 及自定义 RMI 端口的 Payara 实例,尤其是可被公网或跨网段访问的节点。

📐 Payara JMX 认证绕过攻击链路全景图
企业级架构规范

flowchart TD
    subgraph 攻击接入层 ["攻击接入层 (Attacker & Network Tier)"]
        A["远程未认证攻击者"] --> B["构造 RMI 连接并伪造客户端主机地址"]
    end
    subgraph 认证判定层 ["认证判定层 (Authentication Tier)"]
        B --> C["GenericAdminAuthenticator 接收 host address"]
        C --> D{"主机地址是否命中管理白名单"}
        D -->|"伪造命中"| E["认证通过 授予管理员上下文"]
        D -->|"未命中"| F["拒绝访问"]
    end
    subgraph 管理执行层 ["管理执行层 (JMX MBean Tier)"]
        E --> G["连接 MBean Server"]
        G --> H["调用高危 MBean 操作 (类加载/JNDI/脚本)"]
    end
    subgraph 影响层 ["影响层 (Impact Tier)"]
        H --> I["远程代码执行 RCE"]
        I --> J[("服务器完全失陷")]
    end
  
图 1: Payara JMX 认证绕过从地址伪造到 MBean 接管再到 RCE 的完整攻击链路

二、根因剖析:主机地址为何不能作为认证凭据

2.1 GenericAdminAuthenticator 的信任模型缺陷

在 JMX/RMI 的经典实现中,服务端通过 RMIServer 与 RMIConnector 建立连接,客户端在握手阶段会携带自身标识信息。GenericAdminAuthenticator 的设计假设是“客户端主机地址由底层网络栈保证真实”,但 RMI 协议本身并不对 host address 做密码学绑定或反向校验。这意味着攻击者可以在协议载荷中填入任意地址,而服务端若仅做字符串匹配或前缀匹配,就会把伪造值当作可信身份。

这与传统 Web 场景中“信任 X-Forwarded-For 头”的错误如出一辙:把可被客户端控制的元数据当作安全边界。正确的做法是基于密码学凭据(TLS 客户端证书、Kerberos、强口令 + 挑战响应)建立身份,而非基于网络位置做隐式信任。

2.2 从认证绕过到 RCE 的放大效应

JMX 管理面之所以危险,在于其设计目标就是“远程管理 Java 进程”。MBean Server 上常见的 MLet、DiagnosticCommand、JNDI 相关 MBean 都具备执行任意逻辑的能力。攻击者获得管理员上下文后,典型利用路径包括:

  • 通过 MLet MBean 从远程 URL 加载并注册恶意 MBean,直接执行任意字节码;
  • 调用 JNDI 相关操作触发反序列化或远程类加载链;
  • 利用诊断命令 MBean 执行系统命令或读写任意文件;
  • 篡改应用配置、注入 Filter/Servlet,实现持久化后门。
💡 架构核心决策

JMX 管理面必须被视为“最高权限平面”,其网络暴露面应遵循最小化原则:默认仅监听回环地址或独立管理网段,且必须叠加 TLS 双向认证。任何基于 IP/主机名的白名单都只能作为纵深防御的附加层,绝不能作为唯一认证手段。

三、影响面评估:哪些 Payara 部署真正暴露

并非所有 Payara 实例都处于同等风险。需要结合部署形态、网络拓扑与 JMX 配置综合判断。下表给出典型场景的风险矩阵,便于架构师快速定位高优先级资产。

部署形态 JMX 状态 网络暴露 风险等级 处置优先级
Payara Server 独立域 默认启用 公网/跨网段可达 严重 P0 立即处置
Payara Server 集群节点 默认启用 内网可达 高 P1 本周内
Payara Micro 未启用 connector — 不受影响 保持监控
Payara Micro 显式启用 connector 任意可达 严重 P0 立即处置
容器化 Payara 默认启用 仅 Pod 内回环 中 随镜像升级

特别提醒:在 Kubernetes 环境中,若 Service 类型误配为 LoadBalancer 或 NodePort 且指向管理端口,风险会瞬间从“内网”升级为“公网”。请优先核查 Service 与 NetworkPolicy 的端口放行规则。

四、生产加固与补丁落地:从检测到修复的完整路径

4.1 第一步:资产与暴露面排查

在打补丁之前,先确认“谁在监听、谁可达”。以下命令可快速定位 Payara 进程及其 JMX/RMI 监听端口。

# 定位 Payara 进程
ps -ef | grep -Ei 'payara|glassfish' | grep -v grep

# 查看监听端口(重点关注 8686/4848 及动态 RMI 端口)
ss -lntp | grep -Ei 'java|8686|4848'

# 检查 JMX connector 是否启用
grep -RniE 'jmx|rmi|connector' 
  $PAYARA_HOME/glassfish/domains/*/config/ 2>/dev/null | head -50

4.2 第二步:临时缓解(无法立即升级时)

若生产环境暂时无法停机升级,应立即收缩管理面暴露范围。核心思路是“网络层隔离 + 认证层加固”双管齐下。

  • 将 JMX/RMI 端口绑定到回环地址或独立管理网卡,禁止业务网段访问;
  • 通过防火墙/安全组仅放行运维跳板机 IP,并启用连接审计;
  • 为 JMX 通道启用 TLS 双向认证,使身份判定不再依赖主机地址;
  • 关闭不必要的 MLet 与诊断命令 MBean,削减 RCE 利用面。
jmx.remote.x.password.file = /etc/payara/jmxremote.passwordPROP
com.sun.management.jmxremote.ssl.need.client.auth = truePROP
⚠️ 生产避坑风险

仅修改 jmxremote.access 或调整白名单 IP 并不能修复本漏洞——因为攻击者伪造的正是主机地址本身。临时缓解必须落到“网络不可达”或“密码学认证”两个层面,否则只是心理安慰。

4.3 第三步:升级补丁与验证

官方修复版本已针对 GenericAdminAuthenticator 的地址信任逻辑进行重构。升级后需验证:JMX 连接在伪造 host address 时被正确拒绝,且合法管理员凭据仍可正常管理。

点击展开:升级与验证执行命令
# 1. 备份域配置
cp -a $PAYARA_HOME/glassfish/domains/$DOMAIN/config 
      /backup/payara-config-$(date +%F)

# 2. 停止域并升级到修复版本
$PAYARA_HOME/bin/asadmin stop-domain $DOMAIN
# 按官方发布说明替换发行包后重启
$PAYARA_HOME/bin/asadmin start-domain $DOMAIN

# 3. 验证 JMX 端口与认证行为
ss -lntp | grep -E '8686|4848'
# 使用伪造 host address 的客户端尝试连接,应被拒绝
# 使用合法凭据 + TLS 客户端证书连接,应成功

五、架构级反思:管理面安全的长期主义

CVE-2026-90908 再次印证了一个反复出现的模式:把“网络位置”当作“身份”。从早期的 rlogin/rsh 信任主机,到 X-Forwarded-For 伪造,再到今天的 Payara JMX 认证绕过,本质都是同一类信任模型错误。对于架构师而言,这提示我们在设计任何管理面时都应遵循三条铁律:

  • 身份必须来自密码学凭据,而非 IP、主机名、请求头等可被客户端控制的元数据;
  • 管理面与业务面物理/逻辑隔离,默认拒绝一切非必要访问;
  • 高危 MBean 默认关闭,按需开启并全程审计,把 RCE 利用链在源头切断。

对于仍在使用 Payara 的团队,建议把本次处置沉淀为常态化的“中间件管理面基线”:定期扫描 JMX/RMI 暴露面、强制 TLS 双向认证、将管理端口纳入 SOC 监控。唯有把 Payara JMX 认证绕过这类漏洞的修复动作转化为架构约束,才能避免下一次同类 CVE 再次击穿生产环境。

原文出处与权威溯源声明:
本文核心技术背景源自 GitHub Security Advisory 官方通告:
GHSA-qcx2-v78c-8gq4 (CVE-2026-90908 · Azul Payara Server / Payara Micro)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注