Spring boot带来的信息泄露
一、什么是ActuatorSpring Boot Actuators 模块端点信息官方文档:Spring Boot Actuator Web API DocumentationSpring Boot Actuator 模块提供了健康检查,审计,指标收集,HTTP 跟踪等,是帮助我们监控和管理Spring Boot 应用的模块。这个模块采集应用的内部信息,展现给外部模块,可以查看应用配置的详细信息,
一、什么是Actuator
Spring Boot Actuators 模块端点信息官方文档:
Spring Boot Actuator Web API Documentation
Spring Boot Actuator 模块提供了健康检查,审计,指标收集,HTTP 跟踪等,是帮助我们监控和管理Spring Boot 应用的模块。这个模块采集应用的内部信息,展现给外部模块,可以查看应用配置的详细信息,例如自动化配置信息、创建的Spring beans信息、系统环境变量的配置信以及Web请求的详细信息等。
如果Actuator使用,可能造成信息泄露等严重的安全隐患(外部人员非授权访问Actuator端点)。其中heapdump作为Actuator组件最为危险的Web端点,heapdump因未授权访问被恶意人员获取后进行分析可进一步获取敏感信息。
SpringBoot 1.x 和 2.x 的 Actuator模块设置有差别,访问功能的路径也有差别,但现在多使用的SpringBoot版本为2.x,这篇文章只讲SpringBoo 2.x Actuator模块带来的信息泄露。
请求方法 | 端点 | 描述 |
GET | /actuator | 查看有哪些 Actuator端点是开放的。 |
GET | /actuator/auditevent | auditevents端点提供有关应用程序审计事件的信息。 |
GET | /actuator/beans | beans端点提供有关应用程序 bean 的信息。 |
GET | /actuator/conditions | conditions端点提供有关配置和自动配置类条件评估的信息。 |
GET | /actuator/configprops | configprops端点提供有关应用程序@ConfigurationPropertiesbean的信息。 |
GET | /actuator/env | 查看全部环境属性,可以看到 SpringBoot 载入哪些 properties,以及 properties 的值(会自动用*替换 key、password、secret 等关键字的 properties 的值)。 |
GET | /actuator/flyway | flyway端点提供有关 Flyway 执行的数据库迁移的信息。 |
GET | /actuator/health | 端点提供有关应用程序运行状况的health详细信息。 |
GET | /actuator/heapdump | heapdump端点提供来自应用程序 JVM 的堆转储。(通过分析查看/env端点被*号替换到数据的具体值。) |
GET | /actuator/httptrace | httptrace端点提供有关 HTTP 请求-响应交换的信息。(包括用户HTTP请求的Cookie数据,会造成Cookie泄露等)。 |
GET | /actuator/info | info端点提供有关应用程序的一般信息。 |
GET | /actuator/integrationgraph | integrationgraph端点公开了一个包含所有 Spring Integration 组件的图。 |
GET | /actuator/liquibase | liquibase端点提供有关 Liquibase 应用的数据库更改集的信息。 |
GET | /actuator/logfile | logfile端点提供对应用程序日志文件内容的访问。 |
GET | /actuator/loggers | loggers端点提供对应用程序记录器及其级别配置的访问。 |
GET | /actuator/mappings | mappings端点提供有关应用程序请求映射的信息。 |
GET | /actuator/metrics | metrics端点提供对应用程序指标的访问。 |
GET | /actuator/prometheus | 端点以prometheusPrometheus 服务器抓取所需的格式提供 Spring Boot 应用程序的指标。 |
GET | /actuator/quartz | quartz端点提供有关由 Quartz 调度程序管理的作业和触发器的信息。 |
GET | /actuator/scheduledtasks | scheduledtasks端点提供有关应用程序计划任务的信息。 |
GET | /actuator/sessions | sessions端点提供有关由 Spring Session 管理的应用程序 HTTP 会话的信息。 |
GET | /actuator/startup | startup端点提供有关应用程序启动顺序的信息。 |
POST | /actuator/shutdown | shutdown端点用于关闭应用程序。 |
二、漏洞利用
env包含被脱敏的数据库用户名与密码与redis数据库密码等信息。
访问/actuator/heapdump下载堆转储文件:
使用安装JDK自带的JVisualVM工具,对Heap Dump进行分析,JVisualVM位于/jdk/bin目录下
装入heapdump文件
env中信息存储在heapdump中的java.util.LinkedHashMap$Entry类中(Spring boot 2.X版本)。
根据/actuator/env页面展示的信息去heapdump文件中分析信息。(建议在/actuator/env检索“******”6个星号,去寻找password,key或者secret等信息)
env中数据库登录用户名已经暴露,我们需要去找spring.datasource.password的值。
在OQL控制台执行OQL语句:这个语句是查出key值中包含password字符的数据。
select s from java.util.LinkedHashMap$Entry s where /password/.test(s.key.toString())
逐个查看查询出的结果:找到key值为spring.datasource.password的value就是数据库的登录密码。
下一步就是寻找在哪可以登录数据库了,看看外网有没有开放数据库的管理端口等,不展示了。
select s from java.util.LinkedHashMap$Entry s where /Secret/.test(s.key.toString())
使用OSS Browser尝试登录。(OSS Browser用法请自行搜索),这样就登录上阿里云OSS了,可以删除下载文件了(不要去做!)。
三、修复方法:
在 Spring Boot 2.x 中为了安全起见,Actuator 只开放了两个端点 /actuator/health 和 /actuator/info。可以在配置文件中设置打开或关闭。
1、Actuator 默认所有的监控点路径都在/actuator/*,当然如果有需要这个路径也支持定制,通过修改配置文件改变端点名避免被扫描发现。
2、关闭不需要使用的端点并引入security依赖,打开安全限制并进行身份验证。同时设置单独的Actuator管理端口并配置不对外网开放。
四、总结
更多推荐
所有评论(0)