Springboot之actuator配置不当的漏洞利用

综合技术 2019-01-13 阅读原文

*本文原创作者:T-T,本文属FreeBuf原创奖励计划,未经许可禁止转载

前言

Actuator 是 springboot 提供的用来对应用系统进行自省和监控的功能模块,借助于 Actuator 开发者可以很方便地对应用系统某些监控指标进行查看、统计等。在 Actuator 启用的情况下,如果没有做好相关权限控制,非法用户可通过访问默认的执行器端点(endpoints)来获取应用系统中的监控信息。Actuator 配置不当导致应用系统监控信息泄露对应用系统及其用户的危害是巨大的,然而关于 springboot 框架下 actuator 配置不当的漏洞利用分析文章很少,目前笔者只在先知社区看到有一篇介绍 actuator 的安全文章,于是想在这里,分享下笔者在渗透测试过程中遇到的 actuator 配置不当的发现及利用过程,如有分析不正确的地方,还请各位大佬轻喷~

Actuator 简介

如上所言,actuator 是 springboot 提供的用来对应用系统进行自省和监控的功能模块。其提供的执行器端点分为两类:原生端点和用户自定义扩展端点,原生端点主要有:

Http 方法路径描述
get/autoconfig提供了一份自动配置报告,记录哪些自动配置条件通过了,哪些没通过
get/configprops描述配置属性(包含默认值)如何注入 Bean
get/beans描述应用程序上下文里全部的 Bean,以及它们的关系
get/dump获取线程活动的快照
get/env获取全部环境属性
get/env/{name}根据名称获取特定的环境属性值
get/health报告应用程序的健康指标,这些值由 HealthIndicator 的实现类提供
get/info获取应用程序的定制信息,这些信息由 info 打头的属性提供
get/mappings描述全部的 URI 路径,以及它们和控制器(包含 Actuator 端点)的映射关系
get/metrics报告各种应用程序度量信息,比如内存用量和 HTTP 请求计数
get/metrics/{name}报告指定名称的应用程序度量值
post/shutdown关闭应用程序,要求 endpoints.shutdown.enabled 设置为 true(默认为 false)
get/trace提供基本的 HTTP 请求跟踪信息(时间戳、HTTP 头等)

漏洞发现

一般来说,笔者挖掘 actuator 配置不当的漏洞分如下两步:1. 识别当前 web 应用使用的框架为 springboot 框架;2. 枚举执行器端点路径;下面针对这两步结合笔者漏洞挖掘中遇到的实例具体来说说。

1. 识别当前 web 应用使用的框架为 springboot 框架。主要有两个方法判断:

①通过 web 应用程序网页标签的图标(favicon.ico);如果 web 应用开发者没有修改 springboot web 应用的默认图标,那么进入应用首页后可以看到如下默认的绿色小图标:

该绿色小图标是 spring 框架下的一个默认图标,尽管不能百分百就此图标确认当前 web 应用使用的是 springboot 框架,但是基本上也能百分之八十确认该 web 应用是使用 springboot 框架开发的了(毕竟 springboot 框架确实是太流行了)。

②通过 springboot 框架默认报错页面;如果 web 应用开发者没有修改 springboot web 应用的默认 4xx、5xx 报错页面,那么当 web 应用程序出现 4xx、5xx 错误时,会报错如下(此处仅以 404 报错页面为例):

当出现如上报错页面,就能确定当前 web 应用是使用了 springboot 框架的。

那么综合以上两个途径来判断当前 web 应用是否是 springboot 框架,就是通过访问不同的目录,看是否有小绿叶图标,然后就是想办法在不同目录下触发应用程序的 4xx 或 5xx 错误,看是否有 Whitelabel Error Page 报错。

2. 枚举执行器端点路径。这个其实很简单,在确认当前 web 站点是 springboot 框架后,枚举当前站点的所有一级、二级甚至三级目录,然后写脚本对每个目录进行探测,查看目录下是否存在 actuator 执行端点路径即可。(本来想写个比较通用的探测脚本的,现在只有延期了.. 写完之后放出来)

漏洞利用

通过如上步骤,如果你发现了 actuator 的配置不当漏洞,那就要恭喜你啦。不过,尽管这些监控信息的泄露已经足够高危了,有时候碰到一些比较严格的厂商,需要你证明一下这些监控信息的具体危害,或者你想要将危害等级提升到严重,或者想要通过这些监控信息进一步挖掘其他漏洞,该怎么利用呢?笔者通过自身的踩坑经历,总结了如下几个点来尽可能最大化的利用该漏洞:

①认证字段的获取以证明可影响其他用户;这个主要通过访问/trace 路径获取用户认证字段信息,比如如下站点存在 actuator 配置不当漏洞,在其 trace 路径下,除了记录有基本的 HTTP 请求信息(时间戳、HTTP 头等),还有用户 token、cookie 字段:

trace 路径:

用户认证字段泄露:

通过替换 token 字段可获取其他用户的信息:

②数据库账户密码泄露; 由于 actuator 会监控站点 mysql、mangodb 之类的数据库服务,所以通过监控信息有时可以拿下 mysql、mangodb 数据库;这个主要通过/env 路径获取这些服务的配置信息,比如如下站点存在 actuator 配置不当漏洞,通过其/env 路径,可获得 mysql、mangodb 的用户名及密码:

mangodb 及 mysql 都可直连,此处以 mysql 为例:

该漏洞详情请见 https://dvpnet.io/info/detail/id/814 ,是笔者去年在 dvp 平台提交的一个漏洞。一旦数据库外连成功,漏洞分分钟高危变严重啊。

③git 项目地址泄露;这个一般是在/health 路径,比如如下站点,访问其 health 路径可探测到站点 git 项目地址:

直接访问 git 项目地址,可拿下源码:

④后台用户账号密码泄露; 这个一般是在/heapdump 路径下,访问/heapdump 路径,返回 GZip 压缩 hprof 堆转储文件。在 Android studio 打开,会泄露站点内存信息,很多时候会包含后台用户的账号密码(包含漏洞的图片暂时没得,大家记住思路就好了..),通过泄露的账号密码,然后进入后台一番轰炸也不错的。

安全措施

引入 security 依赖,打开安全限制并进行身份验证;同时设置单独的 Actuator 管理端口并配置不对外网开放。详情请见先知社区 https://xz.aliyun.com/t/2233

参考文献

1. https://xz.aliyun.com/t/2233

2. https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#production-ready

3. https://blog.csdn.net/qq_20325039/article/details/79822141

*本文原创作者:T-T,本文属FreeBuf原创奖励计划,未经许可禁止转载

FreeBuf

责编内容by:FreeBuf阅读原文】。感谢您的支持!