Spring Cloud Gateway代码注入漏洞分析(CVE-2022-22947)

漏洞简述

3月1日,VMware发布了针对Spring Cloud Gateway的漏洞通告(https://tanzu.vmware.com/security/cve-2022-22947),当actuator端点开启并对外暴露时,攻击者可以构造恶意请求实现远程任意代码执行。

Spring Cloud Gateway是Spring Cloud 生态中的API网关,包含限流、过滤等API治理功能。Actuator是Spring Boot生态中的应用监控组件,提供了通过http访问监控运行状态的能力。

当actuator端点开启时,可以通过http请求修改路由,路由中包含的filter参数会经过SPEL表达式解析,从而导致了漏洞发生。

漏洞评级为严重,受影响组件版本范围为:

  • 3.1.0
  • 3.0.0-3.0.6
  • 以及其他更老的版本

用户需要尽快升级到3.1.1或3.0.7及以上版本,同时建议不要对公网开放actuator访问。

漏洞时间线

  • 1.15日:漏洞发现者在向VMware提交了漏洞报告
  • 2.17、2.18日:开发者多次提交代码进行漏洞修复
  • 2.18日:开发者发布新版本

缺陷分析

通过https://github.com/spring-cloud/spring-cloud-gateway项目中的commit信息可以发现漏洞和SPEL、ShortcutConfigurable有关,开发者同时提交了相关的测试用例。

Spring Cloud Gateway代码注入漏洞分析(CVE-2022-22947)

通过对源码分析,可以看到ShortcutConfigurable.getValue()方法取值时使用了StandardEvaluationContext进行表达式解析。

Spring Cloud Gateway代码注入漏洞分析(CVE-2022-22947)

下方的shortcutType().normalize()则在对value进行归一化的时候调用了getValue()

Spring Cloud Gateway代码注入漏洞分析(CVE-2022-22947)

可以发现GatewayFilterFactory继承了ShortcutConfigurableRewritePathGatewayFilterFactory等过滤器类实现了GatewayFilterFactory

根据官方文档,开启acutator后可以通过访问/actuator/gateway/routes列出路由,路由中包含filter,如:

Spring Cloud Gateway代码注入漏洞分析(CVE-2022-22947)

同时可以通过/gateway/routes/{id_route_to_create}创建路由。

然后通过/actuator/gateway/refresh刷新路由,重新加载配置使得路由生效。

因此攻击者可以添加带有filter的恶意路由,当重新加载路由时,会触发对参数的归一化逻辑,从而导致filter参数value中的SPEL表达式被解析。

Spring Cloud Gateway代码注入漏洞分析(CVE-2022-22947)

漏洞发现者在博客中描述了自己的漏洞发现过程,还分析了为什么在CodeQL中存在SPEL注入的规则,却没能发现这个问题,以及其他的一些问题,值得学习,感兴趣的同学可以阅读,在此不过多展开。

参考链接

https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#gateway-how-it-works
https://tanzu.vmware.com/security/cve-2022-22947

暂时无法在文档外展示此内容

Spring Cloud Gateway代码注入漏洞分析(CVE-2022-22947)

发布者:墨菲安全,转发请注明出处:https://www.murphysec.com/blog/vulnerability-analysis/4080.html

(2)
上一篇 2023年1月5日 14:25
下一篇 2023年1月4日 16:12

相关推荐

  • Apache Spark UI 命令注入漏洞(CVE-2022-33891)

    OSCS(开源软件供应链安全社区)推出免费的漏洞、投毒情报订阅服务,社区用户可通过机器人订阅情报信息,具体订阅方式详见:https://www.oscs1024.com/?src=wx 漏洞概述 7月18日,OSCS监测到Apache发布安全公告,修复了一个Apache Spark UI中存在的命令注入漏洞。漏洞编号:CVE-2022-33891,漏洞威胁等…

    漏洞分析 2023年1月5日
  • Apache Kafka Connect 模块JNDI注入(CVE-2023-25194)

    漏洞概述 Apache Kafka Connect服务在2.3.0 至 3.3.2 版本中,由于连接时支持使用基于JNDI认证的SASL JAAS配置,导致配置在被攻击者可控的情况下,可能通过JNDI注入执行任意代码。此漏洞不影响 Kafka server(broker),Kafka Connect服务通常用于在云平台中提供Kafka数据迁移、数据同步的管道…

    2023年2月13日
  • 二月最新漏洞列表

    Apache IoTDB-Workbench <0.13.3 存在身份验证绕过漏洞(CVE-2023-24829),Apache Linkis <1.3.1 任意客户端文件读取漏洞(CVE-2022-44644),Apache Linkis <1.3.1 存在反序列化漏洞(CVE-2022-44645),Apache InLong 存在任意文件读取漏洞(CVE-2023-24977)

    2023年2月6日
  • Django Trunc 和 Extract 方法存在 SQL 注入漏洞(CVE-2022-34265)

    漏洞简述 Django是一个由Python语言编写的开源Web应用框架,github上star为64.9K。 7月4日,Django官方修复了一个SQL注入漏洞。如果Trunc()的kind参数和Extract()的lookup_name参数没有进行安全过滤,可能会造成SQL注入的风险。 漏洞分析 以Django 4.0版本为例,可以通过官方提供的测试用例进…

    2023年1月4日
  • Apache ShardingSphere-Proxy <5.3.0 身份认证绕过(CVE-2022-45347)

    漏洞简介 2022年12月22日,Apache 官方公告发布 ShardingSphere-Proxy 5.3.0 之前版本存在身份绕过漏洞(CVE-2022-45347)。当 ShardingSphere-Proxy 使用 MySQL 作为后端数据库时,由于 ShardingSphere-Proxy 在客户端认证失败后没有完全清理数据库会话信息,攻击者可利…

    2023年1月9日

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-180-9568

邮件:hi@murphysec.com

工作时间:周一至周五,10:00-19:00,节假日休息

关注公众号

20230105-100741