拼接符 防注入正则校验_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,在启动命令添加一行。
![](/assets/blank.gif)
此时Kylin是启动状态,先执行./kylin.sh stop以停止服务,再执行启动脚本/home/admin/entrypoint.sh,可连接到服务器的19001端口进行远程调试。编辑Configurations,选择Remote并填写对应的主机和端口。
![](/assets/blank.gif)
当Console端出现如下提示,表明远程连接成功。
![](/assets/blank.gif)
3、漏洞分析
漏洞入口在server-base/src/main/java/org/apache/kylin/rest/controller/CubeController.java的migrateCube方法,我们构造好对应的POST包,对该方法打断点。此时传递的project为learn_kylin,随后进入migrateCute方法。
![](/assets/blank.gif)
跟进到CubeService.java的migrateCute方法,1086行会获取kylin的配置,1087行调用config对象的isAllowAutoMigrateCube进行判断,若返回False则程序会抛出异常。
![](/assets/blank.gif)
我们跟进到KylinConfigBase.java的isAllowAutoMigrateCube方法,该方法主要是判断属性kylin.tool.auto-migrate-cube.enabled的值是否为true,若要继续执行则需要设置该属性为true。
![](/assets/blank.gif)
接着在1098、1099行会从config对象中获取srcCfgUri、dstCfgUri,对象的属性分别为
kylin.tool.auto-migrate-cube.src-config、kylin.tool.auto-migrate-cube.dest-config,并且1101、1102行还会判断取出的两个属性的值是否为空。
![](/assets/blank.gif)
接着1108行会将projectName、srcCfgUri、dstCfgUri等参数直接拼接到cmd中,并在1111行执行,在整个过程中没有对projectName进行任何的校验,导致命令注入漏洞。并且,若能够控制上述3个属性值,那么srcCfgUri以及dstCfgUri也是能够导致命令注入漏洞的。
![](/assets/blank.gif)
我们看下官方的补丁https://github.com/apache/kylin/commit/9cc3793ab2f2f 0053c467a9 b3f38cb7791cd436a。对projectName、dstCfgUri、srcCfgUri都调用了checkParameter方法进行处理。
![](/assets/blank.gif)
而checkParameter方法主要是将可疑的命令执行字符替换为空,包括空格、管道符、&等。
![](/assets/blank.gif)
4、漏洞复现
根据网上文档可知,Cube级属性值是可以添加或者修改的,并且可以覆盖kylin的属性。那么我们首先在某个Cube中添加上述属性。
![](/assets/blank.gif)
这里我们先尝试ProjectName参数的命令注入,发现可以成功执行touch命令。
![](/assets/blank.gif)
![](/assets/blank.gif)
由于命令注入点在路径中,注入命令中包含”/”会导致路由出错,而反弹shell、写webshell等都需要用”/”,因此有一些文章将此处认定为受限的命令注入。但是这里我们可以用其他字符来替代斜杠,联系上篇文章提到的shell参数扩展,斜杠可以用${PATH:0:1}表示。
![](/assets/blank.gif)
同样的,由于可以直接修改配置文件,也可以利用srcCfgUri或者dstCfgUri注入,此时就不受路径处的一些限制了。
![](/assets/blank.gif)
5、安全产品解决方案
百度安全智能一体化产品已支持CVE-2020-1956漏洞的检测和拦截,有需要的用户可以访问anquan.baidu.com联系我们。
受影响的用户请点击阅读原文下载官方发布的最新版进行漏洞的修复
http://kylin.apache.org/cn/download/
参考链接:
https://www.t00ls.net/thread-56549-1-1.html
https://github.com/apache/kylin/commit/9cc3793ab2f2f0053c467a9b3f38cb7791cd436a
![](/assets/blank.gif)
拼接符 防注入正则校验_Apache Kylin 命令注入漏洞调试分析(CVE-2020-1956)相关推荐
- kylin源码调试_Apache Kylin 命令注入漏洞调试分析(CVE-2020-1956)
原标题:Apache Kylin 命令注入漏洞调试分析(CVE-2020-1956) 1.前言 Apache Kylin是一个开源的.分布式的分析型数据仓库,提供Hadoop/Spark 之上的 SQ ...
- 拼接符 防注入正则校验_SpringBoot 开发秘籍 启动时配置校验
概述 在项目开发过程中,某个功能需要依赖在配置文件中配置的参数.这时候就可能出现下面这种现象问题: 有时候经常出现项目启动了,等到使用某个功能组件的时候出现异常,提示参数未配置或者bean注入失败. ...
- java 漏洞挖掘_Apache Tika命令注入漏洞挖掘
*本文中涉及到的相关漏洞已报送厂商并得到修复,本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担. 介绍 这篇文章将从一个Apache tika服务器的命令注入漏洞到完全利用的步骤. ...
- 修改jar 注入_Apache Tika命令注入漏洞挖掘
介绍 这篇文章将从一个Apache tika服务器的命令注入漏洞到完全利用的步骤.CVE是https://nvd.nist.gov/vuln/detail/CVE-2018-1335.由于Apache ...
- 命令注入_深入分析SaltStack Salt命令注入漏洞
一.概述 11月3日,SaltStack发布了Salt的安全补丁,修复了三个高危漏洞.其中有两个修复程序,是为了解决外部研究人员通过ZDI项目提交的五个漏洞.这些漏洞可导致在运行Salt应用程序的系统 ...
- Java安全-注入漏洞(SQL注入、命令注入、表达式注入、模板注入)
文章目录 注入 SQL注入 JDBC拼接不当造成SQL注入 框架使用不当造成SQL注入 不安全的反射 命令注入 代码注入 表达式注入 Spel表达式注入 OGNL表达式注入 模板注入 注入 SQL注入 ...
- 什么是命令注入,命令注入如何避免?
1.什么是命令注入 Command Injection,即命令注入攻击,是指由于嵌入式应用程序或者 web应用程序对用户提交的数据过滤不严格,导致黑客可以通过构造特殊命令字符串的方式,将数据提交至应用 ...
- DVWA通关攻略之命令注入
目录 1.Command Injection 命令注入 2.漏洞场景 3.实验演示 3.1.手工挖掘 3.2.使用burp爆破挖掘命令注入 4.命令注入防御 1.Command Injection 命 ...
- php审计之——DVWA命令注入
命令注入 命令注入 命令注入的条件 DVWA的命令注入漏洞 总结这几个安全级别漏洞并审计 漏洞解决方法 命令注入 命令:这个命令指的是操作系统的命令. 命令注入:就是通过web程序,在服务器上拼接系统 ...
最新文章
- C# 字符串格式化大全
- 两个nb模块之间通讯方法_NB-IoT是什么?一口气带你搞懂NB-IoT的诞生、特性以及应用...
- apache开启 gzip 压缩
- 思考并实现以下程序功能:实现一个抢红包的程序 java
- MySQL可以同时修改两个表吗_(10)MySQL触发器(同时操作两张表)
- BZOJ 2095 [POI2010]Bridges (最大流、欧拉回路)
- Windows核心编程_HOOk SOCKET实现封包拦截
- Python下载文件到本地
- 混响时间测试软件安卓版,混响时间的测量方法资料.pdf
- java 打印 边距_缩小边距 – Java打印
- 吃饭 睡觉 打豆豆!!!
- win10配置ffmpeg环境
- 什么是零信任--用户/应用/设备--识别/认证/权限/信任
- 苹果隐藏应用_AppStore今日推荐 资源丰富无限制的隐藏观影应用
- Linux ps命令
- 还原SQL Server数据库
- 微信支付的两种模式,扫码支付
- Leetcode 种花问题
- SQL Server LocalDB本地文件数据库操作实践
- 蜻蜓特派员 Windows XP SP3 纯净终结版
热门文章
- 九度OJ #1437 To Fill or Not to Fil
- js取消气泡事件、阻止浏览器的默认行为
- 花花酱leetcode 题目——搜索专题
- [Leetcode][第79题][JAVA][单词搜索][DFS][回溯]
- 【数据结构与算法】平衡二叉树、红黑树
- 全国计算机等级考试用报名吗,全国计算机等级考试网上报名流程及考生报名使用说明...
- Codeforces Round #756 (Div. 3)
- tx2无法识别网络_Jetson TX2开篇--网络配置
- python分布式框架_高性能分布式执行框架——Ray
- 使用python开发网页游戏_不敢想!不敢想!我用Python自动玩转2048游戏