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

相关推荐

  • CVE-2023-23752 Joomla未授权访问漏洞分析

    Joomla 在海外使用较多,是一套使用 PHP 和 MySQL 开发的开源、跨平台的内容管理系统(CMS)。Joomla 4.0.0 至 4.2.7 版本中的 ApiRouter.php#parseApiRoute 在处理用户的 Get 请求时为对请求参数有效过滤,导致攻击者可向 Joomla 服务端点发送包含 public=true 参数的请求

    2023年2月23日
  • Apache IoTDB grafana-connector模块SQL注入分析

    漏洞简述 Apache IoTDB 是面向IoT场景存储时序数据的数据管理系统,具备跟Grafana、spark等系统的集成能力。 4月8日,IoTDB 修复了其中 grafana-connector 模块中的 SQL 注入漏洞。 由于 grafana-connector 模块中 BasicDaoImpl 类的 querySeriesInternal 方法存…

    2023年1月4日
  • 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日
  • 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 生态中的AP…

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

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

    2023年2月13日

发表回复

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

联系我们

400-180-9568

邮件:hi@murphysec.com

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

关注公众号

20230105-100741