JavaSec-SpringBoot框架
简介
Spring Boot是一个通过自动配置、嵌入式服务器和生产级功能,简化了Spring应用程序开发、配置和部署的框架,使开发者能够快速构建独立且易于部署的Java应用在其生态系统下,也存在一些相关组件的安全隐患,如Swagger UI可能导致敏感接口泄漏,Spring Boot Actuator可能暴露敏感端口,Druid可能面临未授权访问风险,以及Spring Cloud Gateway存在远程代码执行漏洞等
1.漏洞情景:Swagger UI 敏感接口泄漏
Swagger是一种用于描述API的开源框架,它使用OpenAPI规范来定义API的端点、请求、响应、模式等。Swagger接口泄露漏洞是指在使用Swagger描述API时,由于未正确配置访问控制或未实施安全措施,导致API接口被不授权的人员访问和利用,从而导致系统安全风险
return new Docket(DocumentationType.OAS_30).pathMapping("/").enable(swaggerProperties.getEnable())//生产禁用.apiInfo(apiInfo()).select().apis(RequestHandlerSelectors.basePackage("top.whgojp"))//按包扫描,也可以扫描共同的父包,不会显示basic-error-controller.paths(PathSelectors.any()).build();
}
/*** API 页面上半部分展示信息*/
private ApiInfo apiInfo() {
return new ApiInfoBuilder().title(swaggerProperties.getTitle())//标题.description(swaggerProperties.getDescription())//描述.contact(new Contact(swaggerProperties.getAuthor(), swaggerProperties.getUrl(), swaggerProperties.getEmail()))//作者信息.version(swaggerProperties.getVersion())//版本号.build();
}
2.漏洞情景:SpringBoot Actuator 敏感端点泄漏
Spring Boot Actuator 是一个用于监控和管理 Spring Boot 应用程序的功能模块。它提供了一系列生产就绪的功能,帮助你了解应用程序的运行状况,以及在运行时对应用程序进行调整。Actuator 使用了 Spring MVC 来暴露各种 HTTP 或 JMX 端点,通过这些端点你可以获取到应用程序的运行信息,如健康状态、指标、线程 dump、环境变量等
management:# 端点信息接口使用的端口,为了和主系统接口使用的端口进行分离server:port: 8080# 端点健康情况,默认值"never",设置为"always"可以显示硬盘使用情况和线程情况endpoint:health:show-details: always# 设置端点暴露的哪些内容,默认["health","info"],设置"*"代表暴露所有可访问的端点endpoints:web:exposure:include: '*'base-path: /sys/actuator// 相关端点信息
路径 描述 默认启用
auditevents 显示当前应用程序的审计事件信息 Yes
beans 显示一个应用中所有Spring Beans的完整列表 Yes
conditions 显示配置类和自动配置类(configuration and auto-configuration classes)的状态及它们被应用或未被应用的原因configprops 显示一个所有@ConfigurationProperties的集合列表 Yes
env 显示来自Spring的 ConfigurableEnvironment的属性 Yes
flyway 显示数据库迁移路径,如果有的话 Yes
health 显示应用的健康信息(当使用一个未认证连接访问时显示一个简单 的’status’,使用认证连接访问则显示全部信息详情)info 显示任意的应用信息 Yes
liquibase 展示任何Liquibase数据库迁移路径,如果有的话 Yes
metrics 展示当前应用的metrics信息 Yes
mappings 显示一个所有@RequestMapping路径的集合列表 Yes
scheduledtasks 显示应用程序中的计划任务 Yes
sessions 允许从Spring会话支持的会话存储中检索和删除(retrieval and deletion) 用户会话。使用Spring Session对反应性Web应用程序的支持时不可用。shutdown 允许应用以优雅的方式关闭(默认情况下不启用) No
threaddump 执行一个线程dump Yes
heapdump 返回一个GZip压缩的hprof堆dump文件 Yes
jolokia 通过HTTP暴露JMX beans(当Jolokia在类路径上时,WebFlux不可用) Yes
logfile 返回日志文件内容(如果设置了logging.file或logging.path属性的话),支持使用HTTP Range头接收日志文件内容的部分信息 Yes
prometheus 以可以被Prometheus服务器抓取的格式显示metrics信息 Yes
3.漏洞情景:Druid 配置不当
Apache Druid 是阿里开源的高性能连接池和实时分析分布式数据存储系统,专为大规模时序数据和事件流分析设计,具有快速查询、低延迟写入及横向扩展能力在导入Druid依赖时,没有在application.yml中添加配置(或忘记配置账号密码),此时Druid可以未授权访问,攻击者可直接获取websession信息,进行session爆破,以及通过weburi获取敏感信息路径,进行Fuzz攻击
druid:...filters: stat,log4j # wall 这里关闭sql防火墙stat-view-servlet:enabled: trueurl-pattern: /druid/*
# login-username: admin
# login-password: adminreset-enable: false# 防火墙配置
# wall:
# config:
# multi-statement-allow: false