Spark 存在 shell 命令注入(CNVD-C-2022-163612

漏洞简述

3月24日,墨菲安全实验室情报预警监控发现 spark 提交修复 shell 命令注入的代码,当上传文件名可以被攻击者控制时,就可以构造恶意文件名造成远程任意命令执行。

Spark 是用于大规模数据处理的统一分析引擎。

用户上传文件后,tar 文件会被 hadoop 的 tar 命令解压,如果文件名被用户恶意构造后,就会导致 shell 命令注入。

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

  • 3.1.1 ~ 3.2.1

用户需要尽快下载补丁并安装,参考链接:https://github.com/spring-cloud/spring-cloud-function/commit/0e89ee27b2e76138c16bcba6f4bca906c4f3744f。

漏洞时间线

  • 3.24日:开发者提交代码进行漏洞修复,墨菲安全实验室发现该漏洞并上报CNVD和CNNVD

缺陷分析

通过https://github.com/apache/spark项目中的commit信息可以发现漏洞和shell命令执行有关。

Spark 存在 shell 命令注入(<a rel="noreferrer noopener" href="https://www.cnvd.org.cn/flaw/show/CNVD-2022-163612" target="_blank">CNVD-C-2022-163612</a>)

开发者修改了对 tar 文件的处理方式,我们分析下这两种处理方式。

Spark 存在 shell 命令注入(<a rel="noreferrer noopener" href="https://www.cnvd.org.cn/flaw/show/CNVD-2022-163612" target="_blank">CNVD-C-2022-163612</a>)
Spark 存在 shell 命令注入(<a rel="noreferrer noopener" href="https://www.cnvd.org.cn/flaw/show/CNVD-2022-163612" target="_blank">CNVD-C-2022-163612</a>)

有问题的 unTar 方法调用了

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

Spark 存在 shell 命令注入(<a rel="noreferrer noopener" href="https://www.cnvd.org.cn/flaw/show/CNVD-2022-163612" target="_blank">CNVD-C-2022-163612</a>)

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

Spark 存在 shell 命令注入(<a rel="noreferrer noopener" href="https://www.cnvd.org.cn/flaw/show/CNVD-2022-163612" target="_blank">CNVD-C-2022-163612</a>)

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

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

Spark 存在 shell 命令注入(<a rel="noreferrer noopener" href="https://www.cnvd.org.cn/flaw/show/CNVD-2022-163612" target="_blank">CNVD-C-2022-163612</a>)

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

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

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

漏洞发现者在博客中描述了自己的漏洞发现过程,还分析了为什么在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

https://wya.pl/2022/02/26/cve-2022-22947-spel-casting-and-evil-beans/

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

(0)
上一篇 2023年1月4日 17:26
下一篇 2023年1月4日 17:29

相关推荐

  • Onedev v7.4.14 路径遍历漏洞分析(CVE-2022-38301)

    漏洞简述 OneDev 是开源的一体化轻量DevOps平台,在OneDev 7.4.14及以前版本中存在路径遍历漏洞,具有项目管理权限的攻击者可以将恶意 jar 文件上传到 lib 目录,覆盖原有jar包,攻击者可利用此漏洞在服务器中写入任意文件或远程执行恶意代码。 漏洞分析 问题代码分析 项目管理员可以在 OneDev 的`build`模块对自己的一个项目…

    2023年1月9日
  • “Dirty Pipe”的故事-Linux 内核提权漏洞 (CVE-2022-0847)

    漏洞简述 3月7日,开发者 Max Kellermann 在他的博客(https://dirtypipe.cm4all.com/)中披露了一个能导致 Linux 权限提升的漏洞,编号为 CVE-2022-0847,他称之为 “The Dirty Pipe Vulnerability” (“脏管道”漏洞)。 Linux 5.10版本前的一次 commit 中,…

    2023年1月4日
  • 因未修补关键漏洞,导致Cacti 服务器受到攻击

    Cacti 服务器尚未针对最近发现的关键安全漏洞进行修补,漏洞已被利用。
    漏洞与 CVE-2022-46169(CVSS 分数:9.8)有关,这是身份验证绕过和命令注入的组合,使未经身份验证的用户能够在基于 Web 的开源监控解决方案的受影响版本上执行任意代码。

    2023年2月13日
  • Confluence WIKI OGNL注入漏洞(CVE-2022-26134)

    简述 6月4日,墨菲安全实验室监测发现Atlassian修复了Confluence Server 和 Confluence Data Center 中的OGNL注入漏洞。 Atlassian Confluence是企业常用的wiki系统,攻击者无需认证可利用漏洞在Confluence Server 或 Confluence Data Center 系统中执行…

    2023年1月4日
  • 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日

发表回复

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

联系我们

400-180-9568

邮件:hi@murphysec.com

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

关注公众号

20230105-100741