Apache Spark 命令注入(CVE-2022-33891)

利用范围

Spark Core - Apache <=3.0.3
3.1.1 <= Spark Core - Apache <=3.1.2
3.2.0 <= Spark Core - Apache <=3.2.1

环境搭建
修改bin目录下的spark-shell
修改如下,添加调试端口
在这里插入图片描述
变动如上
在这里插入图片描述
然后启动

./spark-shell --conf spark.acls.enable=true

在这里插入图片描述
即可访问到如上页面

漏洞复现

然后输入poc
在url后拼接

?doAs=command

如下命令:

?doAs=`touch /tmp/1.txt`

在这里插入图片描述
成功RCE

补丁对比

在这里插入图片描述
如上所示,使用命令拼接且没有做任何处理,而在修复的版本中直接删除了ShellBasedGroupsMappingProvider函数中对bash的调用。

远程调试

在这里插入图片描述
Apche spark启用了ACL之后,会通过HttpSecurityFilter这个filter进行权限校验
那么我们将断点打在org.apache.spark.ui.HttpSecurityFilter#doFilter函数处
然后我们访问
在这里插入图片描述
如下
在这里插入图片描述
可以看到代码逻辑,在进入doFilter函数之后,首先会提取参数“doAs”的值,然后赋值给effectiveUser,进入org.apache.spark.SecurityManager#checkUIViewPermissions函数。
在这里插入图片描述
继续跟进isUserInACL
在这里插入图片描述
user被getCurrentUserGroups调用,进入getCurrentUserGroups中
在这里插入图片描述
username被getGroups调用,那么进入getGroups中
在这里插入图片描述
username被getUnixGroups调用,那么进入getUnixGroups中

在这里插入图片描述
在这里username进行了拼接处理,因为我们传入的username参数可控,便形成了命令注入。后续将通过executeAndGetOutput函数直接触发传入的命令,造成命令执行。如下:
在这里插入图片描述
完结

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值