spring boot未授权访问及Swagger漏洞处理

无需修改源码,处理spring boot未授权访问及Swagger漏洞处理

漏洞说明

spring boot未授权访问

风险程度:【高危】
漏洞概述
未授权访问可以理解为需要安全配置或权限认证的地址、授权页面存在缺陷,导致其他用户可以直接访问,从而引发重要权限可被操作、数据库、网站目录等敏感信息泄露。登陆验证一般的方式都是将用户在登录口输入的账号密码拿去与数据库中的记录做验证,并且要求输入的账号密码要等于数据库中某条记录的账号密码,验证通过则程序就会给用户一个session,然后进入后台,否则就返回到登陆口。然而攻击者可以找到一些缺乏权限验证的URL,直接绕过登录执行数据库查询,构成未授权访问。
漏洞危害
攻击者可绕过登录验证非法访问资源,如后台功能、敏感文件等。
整改建议
建议增加漏洞页面(接口)的访问认证,防止未授权访问直接浏览访问或调用。
涉及的请求地址包括但不限于:

  1. [http://ip:port/env/]
  2. http://ip:port/mappings
  3. http://ip:port/dump/

Swagger接口文档泄露

风险程度:【高危】
漏洞概述
Swagger生成的[API文档],是直接暴露在相关web路径下的。所有人均可以访问查看。通过这一点即可获取项目上所有的接口信息。那么结合实际业务,例如如果有文件读取相关的接口,可能存在任意文件下载,相关的业务访问可能存在未授权访问等。
漏洞危害
业务敏感信息泄露后可能会对用户带来危害,系统敏感信息泄露可能会协助攻击者提供更多的攻击途径和方法。
整改建议
结合SpringSecurity/shiro进行认证授权,将Swagger-UI的URL加入到各自的认证和授权过滤链中,当用户访问Swagger对应的资源时,只有通过认证授权的用户才能进行访问。
涉及的请求地址包括但不限于:

  1. [http://ip:port/swagger-ui.html#/cag45controller]
  2. http://ip:port/v2/api-docs

漏洞处理

spring boot未授权访问

官方给的整改建议,涉及修改代码,不方便实施。若涉及到的请求地址非必须,则可以通过修改配置文件进行处理:

# 若原来的配置如下,则表明访问时不需要认证,可直接访问,此时删除此配置即可。
management.security.enabled=false

上述方案亲测有效。

从网上查找,有如下方案(此方案未亲测),增加配置:

management.endpoints.web.exposure.exclude=env,heapdump,threaddump,mappings

或者是(未亲测),增加配置:

# 完全禁用actuator
management.server.port=-1

Swagger接口文档泄露

官方给的建议或网上其他帖子给的方案,都涉及修改代码,在生产环境下,一旦涉及代码修改,动作过大,又要重新测试、发布,太麻烦。
我采用的方案是通过nginx配置,过滤掉漏洞涉及的url,禁止方案,nginx中增加如下配置,亲测有效:

server { 
    listen       8081; 
    server_name  127.0.0.1; 
		if ($request_uri ~* "/swagger-ui") {
			return 403;
		}
		if ($request_uri ~* "/api-docs") {
			return 403;
		}
    location / {
        proxy_pass  http://127.0.0.1:8080;
    }
}

注意,上述server_name,要换成自己系统的域名或服务器ip地址;listen和location重定向的ip、端口信息,要结合自己的实际情况修改。

### 关于Swagger未授权访问漏洞及其解决方法 #### Swagger简介 Swagger是一个用于设计、构建、记录和使用RESTful风格Web服务的开源框架。它允许开发者定义API端点以及这些端点支持的操作,从而简化了前后端之间的协作。 #### 未授权访问风险描述 当Swagger UI配置不当或存在安全缺陷时,可能会暴露出敏感接口给未经授权用户提供读取甚至修改数据的能力。这不仅违反了最小权限原则,还可能造成严重的隐私泄露和其他安全隐患[^1]。 #### 解决方案与预防措施 ##### 配置身份验证机制 为了防止未授权用户通过浏览器或其他HTTP客户端工具直接浏览并调用API文档中的功能,应当启用适当的身份认证方式来保护Swagger界面。可以考虑采用OAuth2.0协议或者其他适合企业内部使用的单点登录(SSO)系统来进行用户鉴权操作。 ##### 实施细粒度访问控制策略 除了全局性的认证外,在应用层面也需要设置更严格的资源级权限管理规则。对于每一个具体的API路径都应明确规定哪些角色拥有何种级别的访问权利(如只读/写入),以此确保即使合法注册过的账户也只能接触到其被许可范围内的信息和服务。 ##### 使用HTTPS加密传输通道 考虑到网络监听攻击的风险,建议始终让Swagger API运行在一个SSL/TLS加密连接之上。这样不仅可以保障通信过程中交换的数据不会轻易被捕获篡改,同时也增强了整个系统的整体安全性水平。 ##### 定期审查依赖库版本更新日志 由于第三方组件可能存在未知的安全隐患,因此要密切关注官方发布的补丁公告,并及时升级至最新稳定版以修复已知问题。特别是像Spring Boot这样的Java微服务平台自带集成Swagger插件的情况下更要加倍小心。 ```java // Java代码片段展示如何在SpringBoot项目里开启基本Http Basic Auth保护swagger-ui.html页面 @Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/v2/api-docs", "/configuration/ui", "/swagger-resources/**", "/configuration/security", "/swagger-ui.html", "/webjars/**").authenticated() // 对指定URL实施强制登陆校验 .and().httpBasic(); // 启动基础型Http Basic Authentication模式 } } ``` #### 测试与监控 部署完毕上述防护手段之后,还需要借助自动化测试工具定期模拟恶意行为尝试突破防线;同时建立实时的日志审计体系以便快速响应任何异常情况的发生。只有做到事前防范加事后追踪两手抓才能真正意义上杜绝此类事件再次发生。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值