概述
现有不少交易所开发者为了更高效快速的部署和监控Web应用,都采用了Spring Boot 框架进行微服务开发,由于该框架使用了特定的方式来进行配置,使开发人员不再需要定义样板化的配置,从而让更加高效快速的部署项目。
其中Actuaotr是Spring Boot项目中非常强大的一个功能,有助于对应用程序进行监控和管理,通过restful api请求来监管、审计、收集应用的运行情况,针对微服务而言它是必不可少的一个环节。
但是由于大部分开发者缺乏安全意识,在配置Actuaotr监控端点时,配置不当可能导致系统应用配置信息、度量指标信息泄露等严重安全问题,其中trace路径下动态记录了最近的100条请求记录信息,请求信息中包含了用户认证字段数据,可通过更替认证字段任意操作用户数据,由此几乎可威胁所有用户数据安全。
漏洞危害
DVP漏洞平台最早在七月三十号就已经收到过关于Spring Boot Actuaotr配置不当导致敏感信息泄露的高危漏洞了。
攻击者可利用此配置不当,获取到网站的敏感信息和用户个人信息,甚至可通过这些接口控制用户的账号进行一系列的敏感操作。
以下链接是DVP 漏洞平台公开白帽子发现并演示此漏洞的详情,DVP平台在第一时间向厂商通报了此漏洞。
https://dvpnet.io/info/detail/id/653
漏洞分析
如果开发人员配置不当,如:将接口暴露在公网上或者未配置限制访问,黑客可以使用以下的Actuator监控原生端点获取到一些网站的敏感数据。
官方描述:
路径 | 描述 |
/autoconfig | 提供了一份自动配置报告,记录哪些自动配置条件通过了,哪些没通过 |
/beans | 描述应用程序上下文里全部的Bean,以及它们的关系 |
/env | 获取全部环境属性 |
/configprops | 描述配置属性(包含默认值)如何注入Bean |
/dump | 获取线程活动的快照 |
/health | 报告应用程序的健康指标,这些值由HealthIndicator的实现类提供 |
/info | 获取应用程序的定制信息,这些信息由info打头的属性提供 |
/mappings | 描述全部的URI路径,以及它们和控制器(包含Actuator端点)的映射关系 |
/metrics | 报告各种应用程序度量信息,比如内存用量和HTTP请求计数 |
/shutdown | 关闭应用程序,要求endpoints.shutdown.enabled设置为true |
/trace | 提供基本的HTTP请求跟踪信息(时间戳、HTTP头等) |
在黑客眼里这些端点的作用:
路径 | 描述 |
/autoconfig | 泄露应用的自动化配置报告,包括所有自动化配置的候选项。同时还列出了每个候选项自动化配置的各个先决条件是否满足 |
/beans | 泄露应用上下文中创建的所有Bean |
/env | 泄露环境配置信息 |
/configprops | 泄露应用中配置的属性信息报告 |
/dump | 泄露程序运行中的线程信息 |
/health | 泄露应用程序的健康指标 |
/info | 泄露应用程序的定制信息 |
/mappings | 泄露描述全部的URI路径,以及它们和控制器(包含Actuator端点)的映射关系 |
/metrics | 泄露报告各种应用程序度量信息,比如内存用量和HTTP请求计数 |
/shutdown | 关闭应用程序 |
/trace | 泄露用户请求http头和用户敏感信息 |
以下是经DVP平台通报后漏洞已修复完成的厂商真实案例。
攻击者通过访问 /env 端点
获取到泄露的环境配置信息
攻击者通过访问 /trace 端点
获取到泄露的HTTP请求跟踪信息其中包括用户的认证令牌,用这些用户的Token可以盗用他们的账号来做一些敏感操作
通过此接口获取用户请求中携带的认证信息或者cookie来获取用户的敏感信息
还可以通过获取到这些用户敏感信息直接登录用户账号
攻击者通过访问 /configprops 端点
获取到应用中配置的属性信息报告
攻击者通过访问 /dump 端点
攻击者通过访问 /autoconfig 端点
获取到泄露应用的自动化配置报告,包括所有自动化配置的候选项。同时还列出了每个候选项自动化配置的各个先决条件是否满足。
攻击者通过访问 /beans 端点
获取到泄露的应用上下文中创建的所有Bean
漏洞修复
通过DVP提供的真实案例可以看出如果以上请求接口不做任何安全限制暴露在公网上的话,能够引起严重的用户信息泄露问题。
不过Spring Boot提供安全限制功能,只要在部署的时候配置好相应的配置即可。
增加账号密码访问
在application.properties中指定actuator的端口以及开启security功能,配置访问权限验证,这时再访问actuator功能时就会弹出登录窗口,需要输入账号密码验证后才允许访问
禁用接口
比如要禁用/env接口,则可设置如下:
endpoints.env.enabled= false
如果只想对外开放部分接口,那就先禁用全部接口,然后启用需要的接口
endpoints.enabled = false
endpoints.metrics.enabled = true
同时可设置单独的Actuator管理端口并配置不对外网开放。
参考地址:https://xz.aliyun.com/t/2233
DVP去中心化漏洞平台
奖励老高了,各位表哥有兴趣过来瞧瞧?
Actuaotr -> Actuator
Thanks