漏洞信息
NVD - CVE-2022-43396
In the fix for CVE-2022-24697, a blacklist is used to filter user input commands. But there is a risk of being bypassed. The user can control the command by controlling the kylin.engine.spark-cmd parameter of conf.
背景介绍
Kylin is a high concurrency, high performance and intelligent OLAP engine that provides low-cost and ultimate data analytics experience.
• 主页:https://kylin.apache.org/
• 源码:https://github.com/apache/kylin
环境搭建
$ docker pull apachekylin/apache-kylin-standalone:4.0.0
$ docker run -d \
-m 8G \
-p 7070:7070 \
-p 8088:8088 \
-p 50070:50070 \
-p 8032:8032 \
-p 8042:8042 \
-p 2181:2181 \
-p 5005:5005 \
apachekylin/apache-kylin-standalone:4.0.0
Kylin Web UI: http://127.0.0.1:7070/kylin/login
默认账号:admin、默认密码:KYLIN
【环境搭建】Apache Kylin 各个版本Docker搭建汇总-CSDN博客
【环境搭建】使用Dockerfile构建容器搭建Kylin特定版本-CSDN博客
漏洞复现
参考:kylin CVE-2022-24697 & CVE-2022-43396 - 先知社区
和CVE-2022-24697十分相似,选择自带的项目learn_kylin
,进入cube页面:
编辑kylin_sales_cube
,点击Configuration Overwrites,新建一行数据,键值对如下所示,包含了恶意命令拼接:
kylin.engine.spark-cmd
touch Mitch311; echo
按照如下步骤进行build,日期随便选,最后Submit:
进入docker容器,可以看到恶意命令已经被执行:
$ docker exec -it <container ID> /bin/bash
$ ll
漏洞分析
通过IDEA远程调试,在ExecuteResult runSparkSubmit
这里打一个断点:
和CVE-2022-24697一样,通过runSparkSubmit
方法内的getSparkConfigOverride
方法,从全局配置属性中(包括cube配置重写的属性)返回键值开头为kylin.engine.spark-conf.
的所有属性,最终cmd在这里完成了指令拼接:
不同点在于CVE-2022-24697是参数可控,CVE-2022-43396是命令可控。
修复方案
补丁:https://github.com/apache/kylin/pull/2011/files
补丁中取消了从cube配置重写的属性中读取kylin.engine.spark
,而是直接指定sparkSubmitCmd
参数为默认值: