今日,有人公开了 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 版本。最后在使用反弹命令的时候,遇到了一点问题,可能与机器系统版本相关,可以多尝试几种命令。

漏洞的利用过程其实不是特别复杂,注意几点即可:

  1. 漏洞的影响的版本是 5.6.15 版本以及 6.6.1 版本以前。
  2. Kibana 需要安装了 Canvas 插件。
  3. 目前公开的 POC 因为使用了 linux 特有的环境变量,所以目前这个 POC 只能作用于 linux 机器。

KecZYd.png

原型链攻击

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

KecZYd.png

原型链攻击现在一般虽然不能直接用于攻击,但是一般配合系统功能可以达到一些运行恶意命令的效果。如果一个程序有原型链漏洞,并且这个程序会创建新的进程,那么这个程序就极有可能有远程命令执行漏洞。

漏洞防范

  1. 及时升级 Kibana 版本。
  2. Kibana 增加用户授权访问。

Reference

处置建议

  1. 升级到官方修复版本,勿长期暴露旧 Kibana 于公网
  2. 管理界面放在 VPN / SSO 之后,限制来源 IP
  3. 最小权限运行 Kibana 进程,限制其出站与命令解释能力
  4. 监控异常 Canvas/Timelion 请求与子进程创建

原理提醒

原型链污染 + 危险的环境变量传递 + 会拉起新进程的功能点,三者叠出 RCE。修洞时要理解利用链,避免「只关一个菜单」的假修复。

小结

ELK 是运维亲儿子,也是攻击者眼中的高价值控制台。版本管理与网络暴露面,比再写一条检测规则优先。

复现伦理

仅在自建实验室复现公开 POC,不要对互联网暴露的陌生 Kibana 验证。发现资产漏洞走正规披露与工单流程。

延伸阅读与实践

把文章里的命令和配置放到自己的实验环境跑一遍,比只看结论更重要。建议同步记录:环境版本、失败现象、最终生效的配置。下次遇到同类问题时,检索自己的笔记往往比搜引擎更快。

若该主题涉及安全测试,请仅在明确授权的系统或官方靶场中操作,并保留测试范围与时间窗记录,避免对生产造成误伤。

对团队分享时,用「问题—影响—修复—验证」四段结构复述,有助于把个人经验沉淀为组织能力。