今日,有人公开了 Kibana 任意代码执行漏洞(CVE-2019-7609)的 POC。这个漏洞的主要原理是因为 Kibana 中的 Timelion 中具有原形链污染漏洞,因此可以导致指定变量的原型链污染,通过传递 NODE 环境变量参数,利用 Kibana 的 Canvas 会创建新进程的特性可以达到远程执行命令的效果。
在本地尝试搭建环境复现,忙活了半天,一开始尝试的是 6.4.2 版本的 Kibana。尝试执行命令的时候,发现一直没有效果,才发现这个漏洞的利用还有一个重要的环节。在导致原型链污染之后,还需要点击 Canvas 菜单,因为点击 Canvas 菜单,Kibana 会尝试创建一个新的进程,从而可以达到远程命令执行的效果。不过在 Kibana 6.5 版本之前,Canvas 不是默认安装在 Kibana 中的。可以通过 kibana-plugin 去安装 Canvas 插件,不过我后来还是选择使用 6.5.4 版本,同时注意相应 elasticsearch 也需要升级到 6.5.4 版本。最后在使用反弹命令的时候,遇到了一点问题,可能与机器系统版本相关,可以多尝试几种命令。
漏洞的利用过程其实不是特别复杂,注意几点即可:
- 漏洞的影响的版本是 5.6.15 版本以及 6.6.1 版本以前。
- Kibana 需要安装了 Canvas 插件。
- 目前公开的 POC 因为使用了 linux 特有的环境变量,所以目前这个 POC 只能作用于 linux 机器。

原型链攻击
如果熟悉 JavaScript 的同学,对于原型链应该会比较熟悉。传统的 JavaScript 对象的集成就是基于原型链实现的。如果可以利用程序漏洞可以去修改 Object.protootype 就会导致所有的 JavaScript 的变量收到影响。针对本次漏洞,修复方式就是通过 hasOwnProperty 方法可以确保直接通过 proto 属性直接去修改 prototype。

原型链攻击现在一般虽然不能直接用于攻击,但是一般配合系统功能可以达到一些运行恶意命令的效果。如果一个程序有原型链漏洞,并且这个程序会创建新的进程,那么这个程序就极有可能有远程命令执行漏洞。
漏洞防范
- 及时升级 Kibana 版本。
- Kibana 增加用户授权访问。
Reference
处置建议
- 升级到官方修复版本,勿长期暴露旧 Kibana 于公网
- 管理界面放在 VPN / SSO 之后,限制来源 IP
- 最小权限运行 Kibana 进程,限制其出站与命令解释能力
- 监控异常 Canvas/Timelion 请求与子进程创建
原理提醒
原型链污染 + 危险的环境变量传递 + 会拉起新进程的功能点,三者叠出 RCE。修洞时要理解利用链,避免「只关一个菜单」的假修复。
小结
ELK 是运维亲儿子,也是攻击者眼中的高价值控制台。版本管理与网络暴露面,比再写一条检测规则优先。
复现伦理
仅在自建实验室复现公开 POC,不要对互联网暴露的陌生 Kibana 验证。发现资产漏洞走正规披露与工单流程。
延伸阅读与实践
把文章里的命令和配置放到自己的实验环境跑一遍,比只看结论更重要。建议同步记录:环境版本、失败现象、最终生效的配置。下次遇到同类问题时,检索自己的笔记往往比搜引擎更快。
若该主题涉及安全测试,请仅在明确授权的系统或官方靶场中操作,并保留测试范围与时间窗记录,避免对生产造成误伤。
对团队分享时,用「问题—影响—修复—验证」四段结构复述,有助于把个人经验沉淀为组织能力。