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

相关推荐

  • 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 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 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日
  • Ghost 博客系统后台代码执行漏洞分析

    漏洞简述 Ghost 是以Node.js语言开发的一款开源博客程序,在Github上其star为超过4万。 漏洞分析 漏洞因为需要后台权限,有一定利用条件,有趣的点在于Ghost的RCE漏洞是由于moment.js下的路径遍历和文件包含漏洞,再加上Ghost中的文件上传和指定locale功能。moment.js中的文件包含漏洞,在一般情况下可能影响较小,但结…

    2023年1月4日
  • Spring Cloud Function 3.0.0.RELEASE~3.2.2 版本SPEL表达式注入漏洞

    漏洞发现时间 2022-03-24 漏洞验证时间 2022-03-25,已第一时间提交CNVD 标题 Spring Cloud Function 3.0.0.RELEASE~3.2.2 版本SPEL表达式注入漏洞 漏洞编号 MPS-2022-6799 发现方式 墨菲安全实验室情报预警监控 语言 java 影响组件及版本 org.springframework…

    漏洞分析 2023年1月4日

发表回复

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

联系我们

400-180-9568

邮件:hi@murphysec.com

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

关注公众号

20230105-100741