0x01:前言
Actuator 是 springboot 提供的用来对应用系统进行自省和监控的功能模块,借助于 Actuator 开发者可以很方便地对应用系统某些监控指标进行查看、统计等。在 Actuator 启用的情况下,如果没有做好相关权限控制,非法用户可通过访问默认的执行器端点(endpoints)来获取应用系统中的监控信息。Actuator 配置不当导致应用系统监控信息泄露对应用系统及其用户的危害是巨大的隐患。
0X02:Actuator 简介
如上所言,actuator 是 springboot 提供的用来对应用系统进行自省和监控的功能模块。其提供的执行器端点分为两类:原生端点和用户自定义扩展端点,原生端点主要有:
0X03:漏洞危害
actuator 的配置不当漏洞,导致监控信息的泄漏
(1.)认证字段的获取以证明可影响其他用户;这个主要通过访问/trace 路径获取用户认证字段信息,比如如下站点存在 actuator 配置不当漏洞,在其 trace 路径下,除了记录有基本的 HTTP 请求信息(时间戳、HTTP 头等),还有用户 token、cookie 字段、trace 路径:
(2.)用户认证字段泄露:
通过替换 token 字段可获取其他用户的信息:
(3.)数据库账户密码泄露;由于 actuator 会监控站点 mysql、mangodb 之类的数据库服务,所以通过监控信息有时可以拿到 mysql、mangodb 数据库;这个主要通过/env 路径获取这些服务的配置信息
(4.)后台用户账号密码泄露;这个一般是在/heapdump 路径下,访问/heapdump 路径,返回 GZip 压缩 hprof 堆转储文件。在 Android studio 打开,会泄露站点内存信息,很多时候会包含后台用户的账号密码
危害总结:
- 利用env加refresh可以getshell
- 利用mappings,获取未授权接口
- 利用trace,获取认证信息(Cookie、tooken、Session),利用认证信息访问接口。
- env有可能泄露的数据库账号密码。
0x04:安全措施
如果上述请求接口不做任何安全限制,安全隐患显而易见。实际上Spring Boot也提供了安全限制功能。比如要禁用/env接口,则可设置如下:
endpoints.env.enabled=false
如果只想打开一两个接口,先禁用全部接口,然后启用需要的接口:
endpoints.enabled =false
endpoints.metrics.enabled =true
另外也可以引入spring-boot-starter-security依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency>
在application.properties中指定actuator的端口以及开启security功能,配置访问权限验证,这时再访问actuator功能时就会弹出登录窗口,需要输入账号密码验证后才允许访问
management.port=8099
management.security.enabled=true
security.user.name=admin
security.user.password=admin
0X05:安全建议
在使用Actuator时,不正确的使用或者一些不经意的疏忽,就会造成严重的信息泄露等安全隐患。springboot项目若启用actuator依赖,则有必要对安全依赖及配置进行复查。安全的做法是一定要引入security依赖,打开安全限制并进行身份验证。同时设置单独的Actuator管理端口并配置不对外网开放。
0x06:参考链接
https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#actuator
版权归原作者 . after 所有, 如有侵权,请联系我们删除。