Springboot之actuator配置不当的漏洞

漏洞描述

Spring Boot Actuator可以帮助你监控和管理Spring Boot应用,比如健康检查、审计、统计和HTTP追踪等。所有的这些特性可以通过JMX或者HTTP endpoints来获得。在 Actuator 启用的情况下,如果没有做好相关权限控制,非法用户可通过访问默认的执行器端点(endpoints)来获取应用系统中的监控信息。Actuator 配置不当导致应用系统监控信息泄露对应用系统及其用户的危害是巨大的Actuator使用Micrometer来整合上面提到的外部应用监控系统。这使得只要通过非常小的配置就可以集成任何应用监控系统。
在 Actuator 启用的情况下,如果没有做好相关权限控制,非法用户可通过访问默认的执行器端点(endpoints)来获取应用系统中的监控信息。Actuator 配置不当导致应用系统监控信息泄露对应用系统及其用户的危害是巨大的

actuator组件基础

actuator的部分配置介绍(基于springboot2.x下的application.properties配置文件):
不同的环境配置会有一些区别

  1. //actuator管理页面的端口指定,这里指定为8888(默认同网站的端口,即server.port配置)
  2. management.server.port=8888
  3. //actuator的前缀地址指定,指定前缀为/(默认前缀是/actuator)
  4. management.endpoints.web.exposure.base-path=/
  5. //actuator配置开放所有节点
  6. management.endpoints.web.exposure.include=*
  7. //排除actuator节点,例如排除env节点
  8. management.endpoints.web.exposure.exclude=env

actuator的部分节点介绍

| health | 显示应用的健康状态 | | —- | —- |

| env | 获取全部环境属性 |

| env/{name} | 根据名称获取特定的环境属性值 |

| heapdump | 返回一个GZip压缩的JVM堆dump |

| logfile | 返回log file中的内容(如果logging.file或者logging.path被设置) |

| httptrace | 显示HTTP足迹,最近100个HTTP request/repsponse |

| mappings | 显示所有的URL路径 |

actuator endpoints所有节点的官方介绍

https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-features.html#production-ready-endpoints

漏洞复现

漏洞复现sprintboot版本为springboot2.1.9(仅说明复现使用的版本,漏洞和具体的springboot版本关系不大)
springboot引入actuator依赖
1
springboot的配置文件中配置(springboot的配置文件有properties和yaml两种形式,以下配置是properties配置文件形式)

  1. management.endpoints.web.exposure.include=*

漏洞分析

第一步要判断是否存在actuator配置不当的问题首先要查看JAVA项目中是否引入了actuator的依赖jar(引入该jar包默认会开启ip:port/actuator/health和ip:port/actuator/info节点)
第二步从springboot的配置文件中查看关于actuator的配置,是否开启一些重要节点(重要节点env、httptrace、heapdump)
第三步判断ip:port/actuator是否可以未授权访问,白盒可通过判断是否引入spring-security依赖及/actuator路径是否配置权限校验以确认漏洞是否存在
根据漏洞复现的配置可以发现actuator的访问端口同项目端口一致,访问前缀为/actutor,开放了所有节点。
黑盒测试
访问ip:port/actuator可以看到返回了所有的actuator节点
2
通过env节点可以看到mysql数据库的密码信息,但是密码是经过过敏的。
Springboot之actuator配置不当的漏洞 - 图3

Eclipse Memory Analyzer分析heapdump

访问/actuator/heapdump下载heapdump,通过Eclipse Memory Analyzer加载,查看到后台账号信息和数据库账号信息

Eclipse Memory Analyzer下载地址:https://www.eclipse.org/mat/downloads.php

Eclipse Memory Analyzer简单使用
5
7
6
Eclipse Memory Analyzer输入查询语句快速分析:

  1. select * from java.util.Hashtable$Entry x WHERE (toString(x.key).contains("password"))

4
从图中可以看到获取到了一些密码。

visulVM分析heapdump

jdk自带visulVM工具,位置在/bin目录下

  1. //Eclipse Memory Analyzer不支持该语句,暂不清楚原因
  2. //语句命令是在所有String类中正则匹配其值包含password的类
  3. select s from java.lang.String s where /password/.test(s.value.toString())

查看可能是密码的位置
9
8
spring.datasource.password的下一个类实例就是密码
参考文章:
https://www.jianshu.com/p/d5943e303a1f
https://www.jianshu.com/p/a4e225c5964a
https://www.freebuf.com/vuls/193509.html