freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

Apache Spark UI 命令注入漏洞 CVE-2022-33891
2022-10-18 15:17:59
所属地 湖南省

漏洞简介

Apache Spark UI 提供了通过配置选项 spark.acls.enable。 使用身份验证过滤器,这检查用户是否有访问权限来查看或修改应用。如果启用了 ACL,则 HttpSecurityFilter 中的代码路径可以允许某人通过提供任意用户名来执行模拟。然后恶意用户可能能够访问权限检查功能,最终将根据他们的输入构建一个 Unix shell 命令,并且执行它。这将导致任意 shell 命令执行。

影响版本:Apache Spark 版本 3.0.3 及更早版本,版本 3.11 至 3.1.2 ,以及版本 3.2.0 至 3.2.1

漏洞复现

下载 Apache Spark 3.2.1 https://archive.apache.org/dist/spark/

https://archive.apache.org/dist/spark/spark-3.2.1/spark-3.2.1-bin-hadoop2.7.tgz

根据描述是需要开启 acl 功能才可以触发漏洞

开启 ACL 可以通过设定启动时的参数 ./spark-shell --conf spark.acls.enable=true或者在 conf/spark-defaults.conf中添加 spark.acls.enable true

image-20221013161457-mxsnri7.png

image-20221013161619-irqrkdz.png

构造 poc

http://localhost:4040/?doAs=`[command injection here]`

image-20221013161849-de34vw5.png

image-20221013162104-il66bvk.png

【----帮助网安学习,以下所有学习资料免费领!加vx:yj009991,备注“freebuf”获取!】

① 网安学习成长路径思维导图
② 60+网安经典常用工具包
③ 100+SRC漏洞分析报告
④ 150+网安攻防实战技术电子书
⑤ 最权威CISSP 认证考试指南+题库
⑥ 超1800页CTF实战技巧手册
⑦ 最新网安大厂面试题合集(含答案)
⑧ APP客户端安全检测指南(安卓+IOS)

漏洞分析

为了方便调试在启动脚本中添加上调试参数

export SPARK_SUBMIT_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"

image-20221013163517-wmlbvvf.png

输入错误的执行语句时的报错信息

image-20221013163618-0eqytla.png

漏洞的触发大概就在 org.apache.spark.security.ShellBasedGroupsMappingProvider.getUnixGroups

漏洞的调用栈应该为

org.apache.spark.ui.HttpSecurityFilter.doFilter(HttpSecurityFilter.scala:71)
org.apache.spark.SecurityManager.checkUIViewPermissions(SecurityManager.scala:238)
org.apache.spark.SecurityManager.isUserInACL(SecurityManager.scala:381)
org.apache.spark.util.Utils$.getCurrentUserGroups(Utils.scala:2523)
org.apache.spark.security.ShellBasedGroupsMappingProvider.getGroups(ShellBasedGroupsMappingProvider.scala:34)
org.apache.spark.security.ShellBasedGroupsMappingProvider.getUnixGroups(ShellBasedGroupsMappingProvider.scala:43)

加上断点进行调试分析

org.apache.spark.ui.HttpSecurityFilter#doFilter

image-20221013165916-i5peae7.png

获取到参数 doAS赋值为 effectiveUser传到函数 checkUIViewPermissions

org.apache.spark.SecurityManager#checkUIViewPermissions

image-20221013170121-owq0l5o.png

org.apache.spark.SecurityManager#isUserInACL

image-20221013172020-cy6f107.png

org.apache.spark.util.Utils$#getCurrentUserGroups

image-20221013172100-47g5rlk.png

org.apache.spark.security.ShellBasedGroupsMappingProvider#getGroups

image-20221013172123-6e2rq2q.png

org.apache.spark.security.ShellBasedGroupsMappingProvider#getUnixGroups

image-20221013172259-qmm5tr2.png

通过反引号将想要执行的命令包含起来,拼接到原本的命令执行语句中

org.apache.spark.util.Utils$#executeAndGetOutput

image-20221013173000-fx5t318.png

org.apache.spark.util.Utils$#executeCommand

image-20221013173040-yfmn5ev.png


漏洞补丁

image-20221013172721-42bkifq.png

新版本的修复 删除了 ShellBasedGroupsMappingProvider中的 bash的调用,最后执行命令的语句应该变为/usr/bin/id -Gn+ 传入参数

更多网安技能的在线实操练习,请点击这里>>


# 漏洞分析 # 命令注入漏洞 # 漏洞复现
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录