Spring Boot Actuator未授权访问漏洞
详细描述
Actuator 是 springboot 提供的用来对应用系统进行自省和监控的功能模块,借助于 Actuator 开发者可以很方便地对应用系统某些监控指标进行查看、统计等。在 Actuator 启用的情况下,如果没有做好相关权限控制,非法用户可通过访问默认的执行器端点(endpoints)来获取应用系统中的监控信息。
解决办法
1.配置认证
在项目的pom.xml文件下引入spring-boot-starter-security依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
然后在application.properties中开启security功能,配置访问账号密码,重启应用即可弹出。
management.security.enabled=true
security.user.name=admin
security.user.password=admin
2.禁用接口
禁用全部接口:
endpoints.enabled = false
禁用部分接口,如env:
endpoints.env.enabled = false
Apache Druid 未授权访问
详细描述
Apache Druid 是用Java编写的面向列的开源分布式数据存储,旨在快速获取大量事件数据,并在数据之上提供低延迟查询。
Apache Druid 默认情况下缺乏授权认证,从而导致未授权访问漏洞。
解决办法
增加用户名密码配置。
代码修改WebConfiguration
@Value("${spring.druid.allowed:?}")
private String druidAllowed;
@Value("${spring.druid.password:?}")
private String druidPassword;
@Bean
public ServletRegistrationBean servletRegistrationBean(){
ServletRegistrationBean druidServlet = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
Map<String, String> map = new HashMap<String, String>();
if(!"?".equals(druidPassword)) {
map.put("loginUsername", "admin");
map.put("loginPassword", druidPassword);
}
if (!"?".equals(druidAllowed)) {
map.put("allow", druidAllowed);
}
druidServlet.setInitParameters(map);
return druidServlet;
}
配置文件修改
下面的配置为登录账号和密码
spring.druid.allowed=admin
spring.druid.password=123456
登录页面
http://{ip}:{port}/druid/login.html
登录账号密码为配置文件配置allowed和password