漏洞描述

Apache Spark 组件存在命令注入漏洞的信息,漏洞威胁等级:高危。

该漏洞是由于 Apache Spark Core 中引用了 Hadoop 里不安全的解压函数 unTar,攻击者可利用该漏洞构造恶意数据来执行命令,最终获取服务器最高权限。
 
 

组件介绍

Apache Spark 是一种用于大数据工作负载的分布式开源处理系统。它使用内存中缓存和优化的查询执行方式,可针对任何规模的数据进行快速分析查询。它提供使用 Java、Scala、Python 和 R 语言的开发 API,支持跨多个工作负载重用代码—批处理、交互式查询、实时分析、机器学习和图形处理等。
 
 

利用条件

1、用户认证:暂不确定
2、前置条件:无
3、触发方式:远程或者本地
 
 

影响范围

目前受影响的 Apache Spark 版本:
Apache Spark < 3.1.3
Apache Spark < 3.2.2
 
 

环境搭建

https://issues.apache.org/jira/browse/SPARK-38631
下载`spark-3.2.1-bin-hadoop2.7.tgz`,在Ubuntu 20.04中加入远程调试配置并启动`spark-shell`:




默认开启4040端口监听:


 
 

漏洞分析

hadoop-common unTar函数

定位`org.apache.hadoop.fs#unTar`:



这里Windows和Linux处理方式不同。漏洞出在Linux系统的处理函数`unTarUsingTar`中:



将文件名直接进行拼接然后带入shell执行,存在命令注入的风险。

Spark shell命令注入

定位`Utils.unpack`:



为了方便触发漏洞,首先创建如下文件:



查看官方开发文档,找到函数`addArchive`存在解压操作:



执行`scala`命令,在`org.apache.spark.SparkContext#addArchive`触发断点




一直跟到漏洞触发点




实现RCE




 
 

解决方案

如何检测组件版本

运行 spark-shell 命令,查看输出中的版本信息。

官方修复建议

当前官方已发布最新版本,建议受影响的用户及时更新升级到最新版本。链接如下:
https://spark.apache.org/downloads.html