kylin源码调试_Apache Kylin 命令注入漏洞调试分析(CVE-2020-1956)
原标题:Apache Kylin 命令注入漏洞调试分析(CVE-2020-1956)
1、前言
Apache Kylin是一个开源的、分布式的分析型数据仓库,提供Hadoop/Spark 之上的 SQL 查询接口及多维分析(OLAP)能力以支持超大规模数据。近日,百度云安全团队监测到Apache官方发出了一个漏洞通告,披露了Apache kylin多版本存在命令注入漏洞,漏洞编号为CVE-2020-1956。由于Apache Kylin依赖的组件较多,自行搭建环境较为困难,我们采用了IDEA+docker进行远程调试来分析漏洞。
2、远程调试环境搭建
本次复现使用了受影响的Kylin 3.0.1版本,直接镜像拉取并启动,对外暴露17070、19001端口。
docker pull apachekylin/apache-kylin-standalone:3.0.1
docker run -d -p 17070:7070 19001:19001 apachekylin/apache-kylin-standalone:3.0.1
远程调试需要保证运行环境代码和本地代码相同,这里我们可以去Kylin的releases页面下载3.0.1版本,解压后导入IDEA。此时docker启动的Kylin并没有开启远程调试,先进入容器bash,修改/home/admin/apache-kylin-3.0.1-bin-hbase1x/bin/kylin.sh,在启动命令添加一行。
此时Kylin是启动状态,先执行./kylin.sh stop以停止服务,再执行启动脚本/home/admin/entrypoint.sh,可连接到服务器的19001端口进行远程调试。编辑Configurations,选择Remote并填写对应的主机和端口。
当Console端出现如下提示,表明远程连接成功。
3、漏洞分析
漏洞入口在server-base/src/main/java/org/apache/kylin/rest/controller/CubeController.java的migrateCube方法,我们构造好对应的POST包,对该方法打断点。此时传递的project为learn_kylin,随后进入migrateCute方法。
跟进到CubeService.java的migrateCute方法,1086行会获取kylin的配置,1087行调用config对象的isAllowAutoMigrateCube进行判断,若返回False则程序会抛出异常。
我们跟进到KylinConfigBase.java的isAllowAutoMigrateCube方法,该方法主要是判断属性kylin.tool.auto-migrate-cube.enabled的值是否为true,若要继续执行则需要设置该属性为true。
接着在1098、1099行会从config对象中获取srcCfgUri、dstCfgUri,对象的属性分别为
kylin.tool.auto-migrate-cube.src-config、kylin.tool.auto-migrate-cube.dest-config,并且1101、1102行还会判断取出的两个属性的值是否为空。
接着1108行会将projectName、srcCfgUri、dstCfgUri等参数直接拼接到cmd中,并在1111行执行,在整个过程中没有对projectName进行任何的校验,导致命令注入漏洞。并且,若能够控制上述3个属性值,那么srcCfgUri以及dstCfgUri也是能够导致命令注入漏洞的。
我们看下官方的补丁https://github.com/apache/kylin/commit/9cc3793ab2f2f 0053c467a9 b3f38cb7791cd436a。对projectName、dstCfgUri、srcCfgUri都调用了checkParameter方法进行处理。
而checkParameter方法主要是将可疑的命令执行字符替换为空,包括空格、管道符、&等。
4、漏洞复现
根据网上文档可知,Cube级属性值是可以添加或者修改的,并且可以覆盖kylin的属性。那么我们首先在某个Cube中添加上述属性。
这里我们先尝试ProjectName参数的命令注入,发现可以成功执行touch命令。
由于命令注入点在路径中,注入命令中包含”/”会导致路由出错,而反弹shell、写webshell等都需要用”/”,因此有一些文章将此处认定为受限的命令注入。但是这里我们可以用其他字符来替代斜杠,联系上篇文章提到的shell参数扩展,斜杠可以用${PATH:0:1}表示。
同样的,由于可以直接修改配置文件,也可以利用srcCfgUri或者dstCfgUri注入,此时就不受路径处的一些限制了。
5、安全产品解决方案
百度安全智能一体化产品已支持CVE-2020-1956漏洞的检测和拦截,有需要的用户可以访问anquan.baidu.com联系我们。
参考链接:
https://www.t00ls.net/thread-56549-1-1.html
https://github.com/apache/kylin/commit/9cc3793ab2f2f0053c467a9b3f38cb7791cd436a返回搜狐,查看更多
责任编辑:
kylin源码调试_Apache Kylin 命令注入漏洞调试分析(CVE-2020-1956)相关推荐
- 拼接符 防注入正则校验_Apache Kylin 命令注入漏洞调试分析(CVE-2020-1956)
1.前言 Apache Kylin是一个开源的.分布式的分析型数据仓库,提供Hadoop/Spark 之上的 SQL 查询接口及多维分析(OLAP)能力以支持超大规模数据.近日,百度云安全团队监测到A ...
- java 漏洞挖掘_Apache Tika命令注入漏洞挖掘
*本文中涉及到的相关漏洞已报送厂商并得到修复,本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担. 介绍 这篇文章将从一个Apache tika服务器的命令注入漏洞到完全利用的步骤. ...
- 修改jar 注入_Apache Tika命令注入漏洞挖掘
介绍 这篇文章将从一个Apache tika服务器的命令注入漏洞到完全利用的步骤.CVE是https://nvd.nist.gov/vuln/detail/CVE-2018-1335.由于Apache ...
- 【安全漏洞】Cisco命令注入漏洞CVE-2021-1414分析
概述 最近关注了Cisco的一个命令注入漏洞CVE-2021-1414,命令注入之后可导致远程代码执行: 漏洞存在于固件版本低于V1.0.03.21的RV340系列路由器中,当前最新版本V1.0.03 ...
- Kylin源码分析系列三—rowKey编码
Kylin源码分析系列三-rowKey编码 注:Kylin源码分析系列基于Kylin的2.5.0版本的源码,其他版本可以类比. 1. 相关概念 前面介绍了Kylin中Cube构建的流程,但Cube数据 ...
- RTKLIB源码——如何在VS2019中配置、调试
RTKLIB源码--如何在VS2019中配置.调试 一. 准备源码: 二.Visual Studio中新建工程: 三.编译结果: 四.实例 一. 准备源码: 注:第三方rtklib修改后的源码地址 h ...
- Ubuntu 12.04(64位)下载并编译 Android 4.1 源码[只有2条命令]
2019独角兽企业重金招聘Python工程师标准>>> Ubuntu 12.04(64位)下载并编译 Android 4.1 源码[只有2条命令] ================= ...
- 基于java点播影院运营系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
基于java点播影院运营系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 基于java点播影院运营系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 本源码技术栈: ...
- java计算机毕业设计心灵治愈服务平台源码+mysql数据库+lw文档+系统+调试部署
java计算机毕业设计心灵治愈服务平台源码+mysql数据库+lw文档+系统+调试部署 java计算机毕业设计心灵治愈服务平台源码+mysql数据库+lw文档+系统+调试部署 本源码技术栈: 项目架构 ...
最新文章
- 内外兼备的企业blog
- bochs调试linux内核学习4 - bochs配置文件的$BXSHARE变量、bochs的System BIOS must end at 0xfffff错误、运行内核0.00版本
- MySQL5.6 yum安装
- php静态变量的销毁
- C语言:L1-034 点赞 (20分)(解题报告)
- Spring注解中@Configuration和@Configurable的区别
- javax.net.ssl.SSLException: Received fatal alert: protocol_version问题解决
- 算法题目——子序列和问题(poj-3061)(尺取法)
- uni-app微信小程序image引入图片;background-image背景图引入图片;小程序预览本地图片;小程序图片过大引入报错;获取本地图片的网络地址;
- 想领取开发套件,就来参加AIoT开发者大赛
- qt代码中判断windows/linux/arm等系统
- 在线SQL美化格式化工具
- 自学python能找到工作吗-通过自学python能找到工作吗
- [转载] python super详解
- linux的下载工具
- 在Ubuntu中安装以theano作为backend的keras
- 凉州馆中与诸判官夜集
- python 实验七 字典与集合 (上)
- 手机丢了微信聊天记录怎么恢复?别担心,教你一招找回
- cf#644 div2 B. Boboniu Plays Chess
热门文章
- 算法心经:数学的应用:概率的应用
- AtCoder AGC004F Namori (图论)
- Luogu P4709 信息传递 (群论、生成函数、多项式指数函数)
- python编辑用户登录界面_python编辑用户登入界面的实现代码
- python中enumerate()函数_Python enumerate() 函数
- pem格式证书编码 x509_公钥证书编码解读
- 20211126 为什么转动惯量矩阵是正定的?
- C#基础 字符串读取/写入文本文件 代码示例
- ThinkPHP框架整合phpqrcode生成二维码DEMO
- 继承“HibernateDaoSupport”后,报“The hierarchy of the type AccoutDaoImpl is inconsistent”的解决方案...