原标题: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)相关推荐

  1. 拼接符 防注入正则校验_Apache Kylin 命令注入漏洞调试分析(CVE-2020-1956)

    1.前言 Apache Kylin是一个开源的.分布式的分析型数据仓库,提供Hadoop/Spark 之上的 SQL 查询接口及多维分析(OLAP)能力以支持超大规模数据.近日,百度云安全团队监测到A ...

  2. java 漏洞挖掘_Apache Tika命令注入漏洞挖掘

    *本文中涉及到的相关漏洞已报送厂商并得到修复,本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担. 介绍 这篇文章将从一个Apache tika服务器的命令注入漏洞到完全利用的步骤. ...

  3. 修改jar 注入_Apache Tika命令注入漏洞挖掘

    介绍 这篇文章将从一个Apache tika服务器的命令注入漏洞到完全利用的步骤.CVE是https://nvd.nist.gov/vuln/detail/CVE-2018-1335.由于Apache ...

  4. 【安全漏洞】Cisco命令注入漏洞CVE-2021-1414分析

    概述 最近关注了Cisco的一个命令注入漏洞CVE-2021-1414,命令注入之后可导致远程代码执行: 漏洞存在于固件版本低于V1.0.03.21的RV340系列路由器中,当前最新版本V1.0.03 ...

  5. Kylin源码分析系列三—rowKey编码

    Kylin源码分析系列三-rowKey编码 注:Kylin源码分析系列基于Kylin的2.5.0版本的源码,其他版本可以类比. 1. 相关概念 前面介绍了Kylin中Cube构建的流程,但Cube数据 ...

  6. RTKLIB源码——如何在VS2019中配置、调试

    RTKLIB源码--如何在VS2019中配置.调试 一. 准备源码: 二.Visual Studio中新建工程: 三.编译结果: 四.实例 一. 准备源码: 注:第三方rtklib修改后的源码地址 h ...

  7. Ubuntu 12.04(64位)下载并编译 Android 4.1 源码[只有2条命令]

    2019独角兽企业重金招聘Python工程师标准>>> Ubuntu 12.04(64位)下载并编译 Android 4.1 源码[只有2条命令] ================= ...

  8. 基于java点播影院运营系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署

    基于java点播影院运营系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 基于java点播影院运营系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 本源码技术栈: ...

  9. java计算机毕业设计心灵治愈服务平台源码+mysql数据库+lw文档+系统+调试部署

    java计算机毕业设计心灵治愈服务平台源码+mysql数据库+lw文档+系统+调试部署 java计算机毕业设计心灵治愈服务平台源码+mysql数据库+lw文档+系统+调试部署 本源码技术栈: 项目架构 ...

最新文章

  1. 内外兼备的企业blog
  2. bochs调试linux内核学习4 - bochs配置文件的$BXSHARE变量、bochs的System BIOS must end at 0xfffff错误、运行内核0.00版本
  3. MySQL5.6 yum安装
  4. php静态变量的销毁
  5. C语言:L1-034 点赞 (20分)(解题报告)
  6. Spring注解中@Configuration和@Configurable的区别
  7. javax.net.ssl.SSLException: Received fatal alert: protocol_version问题解决
  8. 算法题目——子序列和问题(poj-3061)(尺取法)
  9. uni-app微信小程序image引入图片;background-image背景图引入图片;小程序预览本地图片;小程序图片过大引入报错;获取本地图片的网络地址;
  10. 想领取开发套件,就来参加AIoT开发者大赛
  11. qt代码中判断windows/linux/arm等系统
  12. 在线SQL美化格式化工具
  13. 自学python能找到工作吗-通过自学python能找到工作吗
  14. [转载] python super详解
  15. linux的下载工具
  16. 在Ubuntu中安装以theano作为backend的keras
  17. 凉州馆中与诸判官夜集
  18. python 实验七 字典与集合 (上)
  19. 手机丢了微信聊天记录怎么恢复?别担心,教你一招找回
  20. cf#644 div2 B. Boboniu Plays Chess

热门文章

  1. 算法心经:数学的应用:概率的应用
  2. AtCoder AGC004F Namori (图论)
  3. Luogu P4709 信息传递 (群论、生成函数、多项式指数函数)
  4. python编辑用户登录界面_python编辑用户登入界面的实现代码
  5. python中enumerate()函数_Python enumerate() 函数
  6. pem格式证书编码 x509_公钥证书编码解读
  7. 20211126 为什么转动惯量矩阵是正定的?
  8. C#基础 字符串读取/写入文本文件 代码示例
  9. ThinkPHP框架整合phpqrcode生成二维码DEMO
  10. 继承“HibernateDaoSupport”后,报“The hierarchy of the type AccoutDaoImpl is inconsistent”的解决方案...