分析


目录

1. Springboot信息泄露
   1.1 可能泄露路由列表
   1.2 heapdump
2 实际环境
   2.1 Springboot信息泄露测试
   2.2 heapdump读取
   2.2 heapdump分析


1. Springboot信息泄露

1.1 可能泄露路由列表

/api-docs
/v2/api-docs
/swagger-ui.html
/api.html
/sw/swagger-ui.html
/api/swagger-ui.html
/template/swagger-ui.html
/spring-security-rest/api/swagger-ui.html
/spring-security-oauth-resource/swagger-ui.html
/mappings
/actuator/mappings
/metrics
/actuator/metrics
/beans
/actuator/beans
/configprops
/actuator/configprops
/actuator
/auditevents
/autoconfig
/caches
/conditions
/docs
/dump
/env
/flyway
/health
/heapdump
/httptrace
/info
/intergrationgraph
/jolokia
/logfile
/loggers
/liquibase
/prometheus
/refresh
/scheduledtasks
/sessions
/shutdown
/trace
/threaddump
/actuator/auditevents
/actuator/health
/actuator/conditions
/actuator/env
/actuator/info
/actuator/loggers
/actuator/heapdump
/actuator/threaddump
/actuator/scheduledtasks
/actuator/httptrace
/actuator/jolokia
/actuator/hystrix.stream

/trace:显示最近的http包信息,可能泄露当前系统存活的Cookie信息。
  /env:应用的环境信息,包含Profile、系统环境变量和应用的properties信息,可能泄露明文密码与接口信息。
  /jolokia:RCE漏洞
  /heapdump:JVM内存信息,分析出明文密码

1.2 heapdump

  Heap Dump也叫堆转储文件,是一个Java进程在某个时间点上的内存快照。

可以使用   JVisualVM:JDK自带工具,供开发者用于监视,故障排除。

Spring heapdump漏洞修复建议 springboot heapdump_java

2 实际环境

2.1 Springboot信息泄露测试

  Burpsuite Intruder模块扫描

Spring heapdump漏洞修复建议 springboot heapdump_spring_02

2.2 heapdump读取

Spring heapdump漏洞修复建议 springboot heapdump_java_03

Spring heapdump漏洞修复建议 springboot heapdump_spring boot_04

2.2 heapdump分析

因为堆转储文件里面含有大量信息,要准确找到我们想要的信息需要借助一些工具和一些查询技巧。

       Springboot OQL 对象查询语言是一种结构化查询语言,将类当作表、对象当作记录行、成员变量当作表中的字段。通过OQL可以方便快捷的查询一些需要的信息,加快检出需要的属性值。

版本差异

       Spring boot 1.x 版本 heapdump 查询结果存储在 java.util.Hashtable$Entry 实例键值对中:

       Spring boot 2.x 版本 heapdump 查询结果存储在 java.util.LinkedHashMap$Entry 实例键值对中:

       利用password关键字检索,对应的 oql 查询语句

 

Spring heapdump漏洞修复建议 springboot heapdump_html_05

此次使用JDK自带JVisualVM工具,对Heap Dump进行分析,该工具位于<JDK_HOME>/bin/目录。

JDK自带工具,如下图所示:

Spring heapdump漏洞修复建议 springboot heapdump_spring boot_06

双击打开JVisualVM工具。

其主界面,如下图所示:

       通过JVisualVM加载heapdump文件,在概要栏目系统属性处,可看到部分敏感信息泄露。

部分敏感信息泄露,如下图所示:

Spring heapdump漏洞修复建议 springboot heapdump_java_07

切换至OQL控制台标签,在输入框输入如下语句,点击执行进行查询。

select s.value.toString() from java.util.Hashtable$Entry s where /password/.test(s.key.toString())

查询结果,如下图所示:

 

Spring heapdump漏洞修复建议 springboot heapdump_MySQL_08

切换至类标签,在下方输入框限制检索条件java.util.Hashtable,点击结果中第一项java.util.Hashtable$Entry

查询结果,如下图所示:

Spring heapdump漏洞修复建议 springboot heapdump_spring boot_09

切换不同的实例进行观察,在第411项实例发现后台管理员密码明文。

管理员密码明文,效果如下图所示:

Spring heapdump漏洞修复建议 springboot heapdump_MySQL_10

在第409项实例中进一步可看到 MySQL数据库密码。

查看MySQL数据库密码,效果如下图所示:

Spring heapdump漏洞修复建议 springboot heapdump_html_11

在查找密码上,可结合网站 /env 或 /Actuator/env 接口,检索 关键词,使用被星号 遮掩对应的属性名作为OQL过滤条件。

查看遮挡属性值,效果如下图所示:

Spring heapdump漏洞修复建议 springboot heapdump_MySQL_12

shiroKey

       如目标网站使用Shiro安全框架,在过滤规则输⼊org.apache.shiro.web.mgt.CookieRememberMeManager 寻找 decryptionCipherKey字段,可获取key,进而rememberMe反序列化利用。

结尾:防控措施

在代码白盒审计时,对Springboot项目重点检测Actuator依赖,对安全依赖及配置进行复查,建议作为漏洞检出规则加入代码扫描器。

       在网络安全风险自查中,将/heapdump 等敏感路径加入扫描器字典。

 

Spring heapdump漏洞修复建议 springboot heapdump_java_13

 在使用Actuator时,不正确的使用或不经意的疏忽,都会造成严重的信息泄露等安全隐患。安全的做法是引入security依赖,打开安全限制并进行身份验证。同时设置单独的Actuator管理端口并配置不对外网开放。

Spring heapdump漏洞修复建议 springboot heapdump_html_14

引入 security 依赖,打开安全限制,或禁用不需要接口,endpoints.env.enabled= false

Spring heapdump漏洞修复建议 springboot heapdump_html_15