
CVE-2021-2471 के लिए PoC - MySQL Connector/J में XXE
Oracle MySQL के MySQL Connectors उत्पाद में भेद्यता (घटक: Connector/J)। प्रभावित समर्थित संस्करण 8.0.26 और उससे पहले के हैं।
इस भेद्यता के सफल हमलों के परिणामस्वरूप महत्वपूर्ण डेटा तक अनधिकृत पहुंच या सभी MySQL Connectors सुलभ डेटा तक पूर्ण पहुंच और MySQL Connectors का हैंग या बार-बार क्रैश (पूर्ण DOS) करने की अनधिकृत क्षमता हो सकती है।
यह भेद्यता Alibaba Cloud Security Team के Xu Yuanzhen और Alibaba के Hongkun Chen द्वारा पाई गई थी।
यह PoC केवल शोध उद्देश्यों के लिए प्रदान किया गया है। इसका उपयोग उन लक्ष्यों पर हमला करने के लिए न करें जिन्हें आपके पास exploit करने की स्पष्ट अनुमति नहीं है।
इस भेद्यता के लिए विक्रेता का प्रकटीकरण और समाधान यहाँ पाया जा सकता है।
XXE भेद्यता में एक XML शामिल है जिसमें दुर्भावनापूर्ण DTD Entities होती हैं जिन्हें MysqlSQLXML घटक द्वारा प्राप्त किया जाता है और यह तब ट्रिगर होती है जब getSource() फ़ंक्शन को कॉल किया जाता है।
जैसा कि नीचे mysql-connector-java-8.0.26.jar के कोड में देखा गया है, जब DOMSource क्लास को getSource() फ़ंक्शन में तर्क के रूप में दिया जाता है, तो यह DocumentBuilder को असुरक्षित तरीके से उजागर करता है, जिससे यदि कोई हमलावर builder को पारित inputSource की सामग्री को नियंत्रित करता है, तो वह XXE प्राप्त करने के लिए इसका लाभ उठा सकता है:
public <T extends Source> T getSource(Class<T> clazz) throws SQLException {
try {
this.checkClosed();
this.checkWorkingWithResult();
InputSource reader;
if (clazz != null && !clazz.equals(SAXSource.class)) {
SQLException sqlEx;
if (clazz.equals(DOMSource.class)) {
try {
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
builderFactory.setNamespaceAware(true);
DocumentBuilder builder = builderFactory.newDocumentBuilder();
if (this.fromResultSet) {
inputSource = new InputSource(this.owningResultSet.getCharacterStream(this.columnIndexOfXml));
} else {
inputSource = new InputSource(new StringReader(this.stringRep));
}
return new DOMSource(builder.parse(inputSource));
दुर्भावनापूर्ण XXE को MysqlSQLXML में पारित करने के 2 तरीके हैं: