Apache Spark UI 命令注入漏洞 CVE-2022-33891

种地  金牌会员 | 2022-10-19 01:33:28 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 922|帖子 922|积分 2766

漏洞简介

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
[img=720,230.16136066288703]https://www.hetianlab.com/headImg.action?news=7e1aaa1f-e9c0-4693-be86-62a8b49cf658.png[/img]
[img=720,175.00308451573102]https://www.hetianlab.com/headImg.action?news=013d8ad4-77d7-453e-b1ea-3df344b00eb1.png[/img]
【----帮助网安学习,以下所有学习资料免费领!加vx:yj009991,备注 “博客园” 获取!】
 ① 网安学习成长路径思维导图
 ② 60+网安经典常用工具包
 ③ 100+SRC漏洞分析报告
 ④ 150+网安攻防实战技术电子书
 ⑤ 最权威CISSP 认证考试指南+题库
 ⑥ 超1800页CTF实战技巧手册
 ⑦ 最新网安大厂面试题合集(含答案)
 ⑧ APP客户端安全检测指南(安卓+IOS)
  ‍
  构造 poc
http://localhost:4040/?doAs=`[command injection here]`
[img=720,389.06832298136646]https://www.hetianlab.com/headImg.action?news=e0250fe7-f79d-4e55-ac57-1e02acfe9dda.png[/img]
[img=720,376.62269129287597]https://www.hetianlab.com/headImg.action?news=59e52908-c557-4f6d-b245-c258f0b659b9.png[/img]
漏洞分析

  为了方便调试在启动脚本中添加上调试参数
  1. export SPARK_SUBMIT_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"
复制代码
 
[img=720,448.3658372562206]https://www.hetianlab.com/headImg.action?news=4bf33510-68f6-4308-b14d-d6e1977fc68e.png[/img]
  输入错误的执行语句时的报错信息
[img=720,337.58833426808746]https://www.hetianlab.com/headImg.action?news=d1c45a9c-2f2f-416a-bebf-0f2f9d891790.png[/img]
  ‍
  漏洞的触发大概就在 
  1. org.apache.spark.security.ShellBasedGroupsMappingProvider.getUnixGroups
复制代码
 
  漏洞的调用栈应该为
  1. org.apache.spark.ui.HttpSecurityFilter.doFilter(HttpSecurityFilter.scala:71)
  2. org.apache.spark.SecurityManager.checkUIViewPermissions(SecurityManager.scala:238)
  3. org.apache.spark.SecurityManager.isUserInACL(SecurityManager.scala:381)
  4. org.apache.spark.util.Utils$.getCurrentUserGroups(Utils.scala:2523)
  5. org.apache.spark.security.ShellBasedGroupsMappingProvider.getGroups(ShellBasedGroupsMappingProvider.scala:34)
  6. org.apache.spark.security.ShellBasedGroupsMappingProvider.getUnixGroups(ShellBasedGroupsMappingProvider.scala:43)
复制代码
  加上断点进行调试分析
  1. org.apache.spark.ui.HttpSecurityFilter#doFilter
复制代码
[img=720,234.87716472009666]https://www.hetianlab.com/headImg.action?news=3ebf2361-14c2-43e6-a7a7-345c272a5219.png[/img]
  获取到参数 doAS 赋值为 effectiveUser 传到函数 checkUIViewPermissions
  1. org.apache.spark.SecurityManager#checkUIViewPermissions
复制代码
[img=720,71.50981177412895]https://www.hetianlab.com/headImg.action?news=f89dd462-0e08-4965-9163-b61b09c2e901.png[/img]
  1. org.apache.spark.SecurityManager#isUserInACL
复制代码
[img=720,184.46043165467626]https://www.hetianlab.com/headImg.action?news=b0bcd747-88d6-4c49-bc69-f0419c873653.png[/img]
  1. org.apache.spark.util.Utils$#getCurrentUserGroups
复制代码
[img=720,202.26656025538708]https://www.hetianlab.com/headImg.action?news=6cc5f83b-6eda-479c-949c-7da154845d59.png[/img]
  
  1. org.apache.spark.security.ShellBasedGroupsMappingProvider#getGroups
复制代码
[img=720,80.5111821086262]https://www.hetianlab.com/headImg.action?news=d3a0aaa3-3707-47c0-ad9f-67bed9a6d4c3.png[/img]
  1. org.apache.spark.security.ShellBasedGroupsMappingProvider#getUnixGroups
复制代码
[img=720,156.882703777336]https://www.hetianlab.com/headImg.action?news=62c93454-6cd3-45c4-a478-b870b034923e.png[/img]
  通过反引号将想要执行的命令包含起来,拼接到原本的命令执行语句中
  1. org.apache.spark.util.Utils$#executeAndGetOutput
复制代码
[img=720,215.56539235412475]https://www.hetianlab.com/headImg.action?news=5921502a-0a2b-4909-830d-97b566c168ec.png[/img]
  1. org.apache.spark.util.Utils$#executeCommand
复制代码
[img=720,224.0831002796644]https://www.hetianlab.com/headImg.action?news=748754ed-56f7-4f8e-aecf-cc357df3f031.png[/img]
 
漏洞补丁

[img=720,116.34868421052632]https://www.hetianlab.com/headImg.action?news=a807fdd3-0c83-4409-8c10-d587f0c3f42c.png[/img]
  新版本的修复 删除了 ShellBasedGroupsMappingProvider 中的 bash 的调用,最后执行命令的语句应该变为/usr/bin/id -Gn + 传入参数
 更多靶场实验练习、网安学习资料,请点击这里>>
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

种地

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表