【最新漏洞预警】CVE-2021-2471-MySQL JDBC XXE漏洞分析与概念验证
VSole2021-10-21 22:48:40
漏洞概述
MySQL JDBC是Oracle开发的针对MySQL数据库操作的统一接口。近日网上爆出了MySQL JDBC存在XXE漏洞,漏洞编号为CVE-2021-2471,影响MySQL JDBC v8.0.27版本之前版本。看到漏洞信息后,第一时间查看了相关信息,官方把漏洞复现部分打上了马赛克,在对该漏洞进行简单分析后,发现整个过程其实比较简单,自己做了一个概念验证,这里分享给大家。
漏洞分析
0x01 环境构建
构建研究环境,分别下载MySQL JDBC v8.0.26和MySQL JDBC v8.0.27两个版本。
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --><dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.26</version></dependency> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --><dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.27</version></dependency>
0x02 补丁对比
既然是XXE漏洞,那么我们可以重点关注处理XML的部分,通过分析定位`com.mysql.cj.jdbc.MysqlSQLXML#getSource`函数:
v8.0.27版本在XML处理前设置一堆setFeature来防止出现XXE漏洞。
0x03 构造分析
切换为v8.0.26版本,`com.mysql.cj.jdbc.MysqlSQLXML`类继承于`SQLXML`,查阅关于`SQLXML`的一些用法:
sqlxml
https://docs.oracle.com/javase/tutorial/jdbc/basics/sqlxml.htm
实例化`Connection`数据库连接对象,通过`createSQLXML`函数创建一个`SQLXML`对象:
调用`SQLXML#setString`函数完成`stringRep`变量赋值:
然后查看漏洞函数`getSource`:
当输入参数为`DOMSource.class`时,`stringRep`会被带入并完成XML解析,从而导致出现XXE漏洞。
概念验证
由于传播、利用此文档提供的信息而造成任何直接或间接的后果及损害,均由使用本人负责,文章作者不为此承担任何责任。

VSole
网络安全专家