查看原文
其他

spring cloud function spel表达式注入RCE复现

siwen Z2O安全攻防 2022-06-10


免责声明



本文仅用于技术讨论与学习,利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。

只供对已授权的目标使用测试,对未授权目标的测试作者不承担责任,均由使用本人自行承担。


文章正文




关注公众号获取poc

简介

Spring Cloud Function 是基于Spring boot 的函数计算框架,支持基于SpEL的函数式动态路由。


漏洞复现和分析

测试版本:v3.2.2

新建Spring boot项目导入依赖

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <parent>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-parent</artifactId>
       <version>2.6.5</version>
       <relativePath/> <!-- lookup parent from repository -->
   </parent>
   <groupId>com.example</groupId>
   <artifactId>demo</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <name>demo</name>
   <description>Demo project for Spring Boot</description>
   <properties>
       <java.version>17</java.version>
       <spring-cloud.version>2021.0.1</spring-cloud.version>
   </properties>
   <dependencies>
       <dependency>
           <groupId>org.springframework.cloud</groupId>
           <artifactId>spring-cloud-function-context</artifactId>
       </dependency>
       <dependency>
           <groupId>org.springframework.cloud</groupId>
           <artifactId>spring-cloud-starter</artifactId>
       </dependency>
       <dependency>
           <groupId>org.springframework.cloud</groupId>
           <artifactId>spring-cloud-starter-task</artifactId>
       </dependency>

       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-test</artifactId>
           <scope>test</scope>
       </dependency>

       <dependency>
           <groupId>org.springframework.cloud</groupId>
           <artifactId>spring-cloud-starter-function-webflux</artifactId>
       </dependency>

       <dependency>
           <groupId>org.springframework.cloud</groupId>
           <artifactId>spring-cloud-function-dependencies</artifactId>
           <version>3.2.2</version>
           <type>pom</type>
       </dependency>

       <dependency>
           <groupId>org.springframework.cloud</groupId>
           <artifactId>spring-cloud-function-web</artifactId>
           <version>3.2.2</version>
       </dependency>
   </dependencies>
   <dependencyManagement>
       <dependencies>
           <dependency>
               <groupId>org.springframework.cloud</groupId>
               <artifactId>spring-cloud-dependencies</artifactId>
               <version>${spring-cloud.version}</version>
               <type>pom</type>
               <scope>import</scope>
           </dependency>
       </dependencies>
   </dependencyManagement>

   <build>
       <plugins>
           <plugin>
               <groupId>org.springframework.boot</groupId>
               <artifactId>spring-boot-maven-plugin</artifactId>
           </plugin>
       </plugins>
   </build>

</project>

为了代码能执行到漏洞部分,在Spring boot配置文件中添加

spring.cloud.function.definition:functionRouter

使用已知poc进行漏洞复现弹出计算器

对比补丁内容

代码修改位置:

https://github.com/spring-cloud/spring-cloud-function/commit/dc5128b80c6c04232a081458f637c81a64fa9b52?diff=unified

可以看到主要修改位置在

spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/RoutingFunction.java

此前直接将spel进行了解析,补丁中添加了isViaHeader进行判断过滤,修复了spel表达式注入

找到对应位置代码


重新发包命中断点


此处调用了functionFromExpression,跟进functionFromExpression即可看到漏洞触发位置

String functionName = (String)expression.getValue(this.evalContext, input, String.class);

通用poc

关注公众号回复“spring-cloud-function-spel”获取



技术交流





交流群



关注公众号回复“加群”,添加Z2OBot 小K自动拉你加入Z2O安全攻防交流群分享更多好东西。




知识星球



星球不定时更新最新漏洞复现,手把手教你,同时不定时更新POC、内外网渗透测试骚操作。涉及方向包括Web渗透、免杀绕过、内网攻防、代码审计、应急响应、云安全等




往期文章:



java代码审计之CC1链(一)

Powershell 免杀过 defender 火绒,附自动化工具Z2OBot 

机器人🤖上线啦

域渗透 | kerberos认证及过程中产生的攻击




点一下爱心再走吧!


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存