Spring Cloud Gateway集成Actuator的安全漏洞和解决方案

Spring Cloud Gateway是一个基于Spring Boot2.0和Spring WebFlux的API网关,它可以将请求转发到多个微服务并对请求进行路由、过滤和修改。Spring Cloud Gateway集成Actuator后可以提供更多的监控和管理功能,但是也可能导致安全漏洞。

概述:

最近线上环境出现一起安全事件,就是由于Spring Cloud Gateway集成Actuator导致被攻击,攻击者通过动态添加路由规则,导致系统出现异常。下面将详细介绍这一事件。

问题描述:

4月初,电商平台主链路中的会场商品列表页,出现偶发性的无法展示商品数据的情况,连续刷新几次页面必定会出现一次这种情况。
通过排查线上日志,发现部分接口请求失败,报错信息为:Index: 0, Size: 0。
进一步排查,发现是Gateway网关服务报错,原本Gateway网关服务有10个pod,其中2个pod自动重启过2次,并且报的都是上面的错误信息。

事件描述:

攻击者通过Spring Cloud Gateway暴露的Actuator接口,动态添加了一个 非法的路由规则,但是没有添加断言predicates(说明,正常情况下,断言是必须的)。
当用户请求流入到网关时,网关服务会去循环遍历路由规则,而在遍历到 非法的路由规则 时 ,由于找不到predicate断言,所以直接返回报错:“Index: 0, Size: 0”。

思考:若动态添加非法路由规则时,也添加了断言,那么问题的现象会是怎样的?
分析:可能所有请求都会被路由到了一个恶意网站上。由于路由规则具有较高的优先级,因此所有请求都会被路由到恶意网站,导致系统出现异常。

原因分析:

  1. Spring Cloud Gateway默认开启了Actuator的Endpoints,其中包含了许多可以动态修改Gateway配置的Endpoint接口。
  2. Gateway的动态路由是通过GatewayFilter和RoutePredicateFactory实现的,它们可以在运行时动态添加和删除路由规则。
  3. 攻击者通过Actuator的POST接口发送了一个添加路由规则的请求,该非法的路由规则,可能导致网关服务报错,也可能将所有请求都路由到恶意网站上。
    Actuator中创建路由规则的Endpoints,发送Post请求:/gateway/routes/{id_route_to_create}

解决方法:

临时解决方法:
对于被非法动态添加路由规则这个问题,临时的解决办法是,重启 Gateway 网关服务。

长期解决方法:

  1. 禁用不必要的Actuator Endpoints,比如要禁用/env接口,可设置: endpoint.env.enabled=false
  2. 引入Spring-Security模块,配置访问权限验证,访问Actuator接口时需要登录。
  3. Actuator访问接口使用独立端口,并配置不对外网开放。

总结:

Spring Cloud Gateway集成Actuator后可以提供更多的监控和管理功能,但也增加了安全风险。在使用过程中,需要注意限制访问权限和动态路由规则的范围,以避免类似的攻击事件发生。

你可能感兴趣的:(总结+笔记,项目实战,spring,cloud)