Apache Druid CVE-2021-26919 漏洞分析
2021-04-24 23:42:07 Author: wiki.ioin.in(查看原文) 阅读量:386 收藏

CVE-2021-26919是一个jdbc 反序列化类型漏洞,用作之前两篇jdbc mysql学习的练手,分析分析。

背景

已知是jdbc mysql反序列化的问题,可以直接看看官方的修复

https://github.com/apache/druid/compare/druid-0.20.1...druid-0.20.2
upload successful

具体在这个commit里
https://github.com/apache/druid/commit/48953e3508967f5156c69676432b5d4dd25ea678

代码就不贴了,主要功能是设置了jdbc:mysql & jdbc:postgresql两类driver和对应的参数白名单

漏洞分析

知道漏洞类型,剩下就是找漏洞触发点了

jdbc触发点

最好的方式是多读官方文档,在lookup相关功能文档上找到
https://druid.apache.org/docs/0.19.0/development/extensions-core/druid-lookups.html#polling-lookup

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
"type": "pollingLookup",
"pollPeriod": "PT10M",
"dataFetcher":
{
"type": "jdbcDataFetcher",
"connectorConfig": "jdbc://mysql://localhost:3306/my_data_base",
"table": "lookup_table_name",
"keyColumn": "key_column_name",
"valueColumn": "value_column_name"
},
"cacheFactory":
{
"type": "onHeapPolling"
}
}

相关的,在web console上也找到对应的功能点

upload successful

mysql-connector-java

https://druid.apache.org/docs/latest/development/extensions-core/lookups-cached-global.html#introspection

If using JDBC, you will need to add your database’s client JAR files to the extension’s directory. For Postgres, the connector JAR is already included. For MySQL, you can get it from https://dev.mysql.com/downloads/connector/j/. Copy or symlink the downloaded file to extensions/druid-lookups-cached-global under the distribution root directory.

  1. 需要将mysql-connector-java sdk拷贝至extensions/druid-lookups-cached-global
  2. 而且需要启动druid-lookups-cached-global组件,具体操作为在common.runtime.properties文件中修改druid.extensions.loadList,增加”druid-lookups-cached-global”扩展功能

gadgets

lib目录中找到几个常见gadgets

  1. commons-collections

    1
    2
    commons-collections-3.2.2.jar
    commons-collections4-4.2.jar

    实际不可用,利用条件为cc<=3.2.1 或cc4=4.0,具体可以看ysoserial

  2. commons-beanutils

    1
    commons-beanutils-1.9.4.jar

    虽然ysoserial写的是1.9.2,实测1.9.4也可以利用

poc

1
2
3
url = "jdbc:mysql://localhost:3307/?autoDeserialize=true&statementInterceptors=com.mysql.jdbc.interceptors.ServerStatusDiffInterceptor&maxAllowedPacket=65535"
user ="cb1"
password="password"

需要注意的是,提交之后,需要等一两分钟之后,才会触发jdbc连接

小结

本文简单复现了CVE-2021-26919漏洞,本以为很简单,结果还是用了大半天,踩了一些低级的坑,教训是多看文档、测试排查按最小变量来、多看程序输出日志。。。

总的来说这个漏洞利用场景比较鸡肋,需要在开启jdbc功能的前提下(sdk拷贝&配置文件中的扩展开启)。官方的修复也是彻底,直接通过白名单做了限制,连postgresql也一并处理了,难道postgresql也存在利用点不成?

参考


文章来源: https://wiki.ioin.in/url/m02W
如有侵权请联系:admin#unsafe.sh