
Технический анализ и proof of concept для CVE-2026-59827, критической уязвимости небезопасной десериализации Java в Metabase, приводящей к удалённому выполнению кода.
Уровень критичности: Критический (CVSS 9.9)
CVE: CVE-2026-59827
Уведомление: GHSA-w95f-x9v9-wv36
Сообщил: Matheus Gutierre (@Gutierre0x80)
Опубликовано: 30 июня 2026 г.
Аутентифицированный пользователь с доступом к нативным SQL-запросам к базе данных H2 может выполнить произвольный Java-код на сервере Metabase через небезопасную десериализацию Java-объектов, возвращаемых запросами SELECT CAST(X'...' AS OTHER).
Стандартная установка Metabase включает демонстрационную базу данных H2, что делает эту уязвимость эксплуатируемой во всех стандартных развертываниях.
pip install requestsexploit.py:Убедитесь, что все предварительные требования установлены и доступны в PATH:
# Install Python requests library
pip install requests
# Verify Java is available (OpenJDK 11+)
java -version
# Verify Python 3.7+
python3 --version
Затем запустите эксплойт из директории poc/:
cd poc/
python3 exploit.py <target_url> <username> <password> <command>
Перед выполнением скрипт проверяет, что clojure-1.12.3.jar и VarChainPayload.class существуют в рабочей директории.
python3 exploit.py <target_url> <username> <password> <command>
| Аргумент | Описание | Пример |
|---|---|---|
target_url | URL экземпляра Metabase | http://127.0.0.1:3000 |
username | Аутентифицированный пользователь (администратор или имеющий доступ к нативным запросам) | [email protected] |
password | Пароль пользователя | SecurePassword123! |
command | Команда оболочки для выполнения | id или whoami |
python3 exploit.py http://127.0.0.1:3000 [email protected] Admin1234! "id > /tmp/pwned.txt"
Команда выполняется в контексте процесса Metabase (обычно это пользователь metabase в Docker).
Тип столбца OTHER в H2 десериализует Java-объекты с помощью голого ObjectInputStream без фильтрации JEP-290. Это позволяет создавать экземпляры произвольных классов.
Полезная нагрузка использует цепочку гаджетов на основе сериализуемых классов Clojure (clojure.core$apply, clojure.lang.Var$Serialized и PersistentList) в сочетании с PriorityQueue из Java для запуска выполнения кода через clojure.core/eval.
Полный технический анализ см. в writeup/analysis.md.