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

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

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

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

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

Категории

Все категории
Loading categories
stirling-h2-import-leftover — Stirling-PDF v3.2.0 — критическая уязвимость — удалённое выполнение — остаточный H2 RUNSCRIPT — CREATE OR REPLACE ALIAS import-database | Kitploit
Инструменты/GitHubGitHub/abraxas/stirling-h2-import-leftover
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийВиртуализация для безопасностиТестирование на ПроникновениеБезопасность Баз Данных
GitHubabraxas/stirling-h2-import-leftover

stirling-h2-import-leftover

Stirling-PDF v3.2.0 — критическая уязвимость — удалённое выполнение — остаточный H2 RUNSCRIPT — CREATE OR REPLACE ALIAS import-database

Репозиторий
41 день назадЕщё не проверено

Популярное

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

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

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

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

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

Abraxas Labs - stirling-h2-import-leftover

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  stirling-h2-import-leftover

stirling-h2-import-leftover

Stirling-PDF 3.2.0 — Stirling Tools

Класс: остаточная уязвимость H2 RUNSCRIPT из GHSA-mrr8. Достижимость: удалённо, ROLE_ADMIN.

POST /api/v1/database/import-database защищён @PreAuthorize("hasRole('ADMIN')"). validateSqlContent должен блокировать CREATE ALIAS. Чёрный список — CREATE\s+(FORCE\s+)?ALIAS. H2 parseCreate допускает OR REPLACE перед ALIAS, поэтому CREATE OR REPLACE ALIAS … FOR "java.lang.…" соответствует белому списку \bCREATE\b и не попадает под чёрный список. Валидатор очищает копию. verifyBackup и production RUNSCRIPT FROM ? обрабатывают исходный файл.

GHSA-mrr8-934j-4g8m / CVE-2026-85714 закрыли исходные строки FILE_READ / CREATE ALIAS / CSVWRITE. Эта остаточная уязвимость — пробел OR REPLACE в том же валидаторе.

Импорт с ROLE_ADMIN создаёт Java-алиас, который должен блокировать чёрный список. Последующая выгрузка резервной копии содержит SQL атакующего. RCE через FILE_READ / FileUtils на хосте из исходного advisory выведен логически, но не подтверждён в лаборатории в этом пакете.

IDCVE пока нет
CWECWE-94 / CWE-184
CVSS9.1 CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H
ПродуктStirling-PDF
Затронутоv3.2.0 (a7e593728dd9aa81e75318a949789d3c2e9ee754), образ stirlingtools/stirling-pdf:3.2.0-fat
АутентификацияROLE_ADMIN, встроенная H2 по умолчанию. Первый администратор по умолчанию admin / stirling, пока не изменён
ЛицензияGNU Affero GPL v3.0
Лабораториятолько 127.0.0.1:18152

Остаточная уязвимость из серии Stirling-PDF v3.2.0 leftovers. Смежная: stirling-storage-folder-idor (неявный корень хранилища processing-folder). Этот пакет — остаточная уязвимость импорта H2.

Что может сделать атакующий

ROLE_ADMIN при включённом логине в proprietary/fat с встроенной H2 по умолчанию. Первый администратор по умолчанию — admin / stirling, когда initialLogin пуст. Неаутентифицированный доступ не требуется. Lite-образ и источники данных PostgreSQL этот контроллер не содержат.

Таблица привилегий (исчерпывающая). Тот же уровень, что и Signal-Server Dropwizard admin: метод + путь, что даёт этот вызов, разведка против целостности против доступности, подтверждено в лаборатории против выведено логически, смежная поверхность, которая остаётся закрытой.

ОсьМетод + путьПраваПроисхождение
ЦелостностьROLE_ADMIN POST /api/v1/database/import-database с CREATE OR REPLACE ALIAS lab_nano FOR "java.lang.System.nanoTime" плюс INSERT INTO lab_w VALUES('STIRLING-H2-IMPORT-WITNESS')200 importIntoDatabaseSuccessed. Java-алиас создан. SQL атакующего зафиксирован под RUNSCRIPTДоказано в лаборатории
РазведкаROLE_ADMIN GET /api/v1/database/createDatabaseBackup, затем GET /api/v1/database/download/backup_202610172328.sqlРезервная копия размером 50432 байта содержит STIRLING-H2-IMPORT-WITNESSДоказано в лаборатории
Разведка / файл хостатот же импорт с обёрткой FILE_READ('/etc/os-release') в EXECUTE IMMEDIATE500 Backup verification failed. Байты хоста отсутствуют в резервной копииДополнительный FAIL в лаборатории
Целостность / RCEалиас org.h2.store.fs.FileUtils плюс CSVWRITE файла .pth из user-site Python, затем конвертация officeВыполнение команд от имени сервисной учётной записиВыведено из GHSA-mrr8. Здесь не проверялось в лаборатории
Доступностьне заявленоИмпорт может заменить таблицы приложенияВыведено. Не является оракулом лаборатории

Остаётся закрытым на этой фиксации

ОсьМетод + путьПочему закрыто
Целостностьнеаутентифицированный POST /api/v1/database/import-database401 Authentication required. Безопасность метода ADMIN сохраняется, когда HTTP настроен как permitAll
Целостностьимпорт ROLE_ADMIN с голым CREATE ALIAS500 SQL script contains disallowed operations and was rejected
Целостностьобраз lite / DISABLE_ADDITIONAL_FEATURESDatabaseController отсутствует
Целостностьпользовательский источник данных PostgreSQL@Conditional(H2SQLCondition.class)

Я не заявляю об обратной оболочке и не заявляю о FILE_READ на хосте как о доказанном в лаборатории. Остаётся промах денилиста, который пропускает CREATE OR REPLACE ALIAS … FOR "java.lang.…" через RUNSCRIPT.

Как я это нашёл

v3.2.0 по-прежнему содержит валидатор GHSA-mrr8. Я остановился на этом теге и прочитал DENIED_PATTERNS. Строка алиаса — CREATE\s+(FORCE\s+)?ALIAS. Парсер H2 принимает CREATE OR REPLACE ALIAS. Тесты покрывают очевидные строки CREATE ALIAS / FILE_READ(. Они не покрывают OR REPLACE.

Лаборатория входит как администратор по умолчанию, завершает change-password-on-login, импортирует запрещённый CREATE ALIAS (500), затем импортирует CREATE OR REPLACE ALIAS плюс свидетеля INSERT (200). Загрузка резервной копии содержит свидетеля.

Неверные пути: считать неаутентифицированный импорт входящим в область (401); считать EXECUTE IMMEDIATE + FILE_READ остатком (verifyBackup 500); считать исходный необфусцированный CREATE ALIAS всё ещё рабочим (он запрещён).

Лаборатория

python3 stirling-h2-import-leftover-Abraxas-Labs.py

или

cd lab
./run.sh

Цель — только http://127.0.0.1:18152. Образ stirlingtools/stirling-pdf:3.2.0-fat. Требуется Docker. Вход включён. Лаунчер выполняет chdir в lab/ и запускает run.sh.

IOC unauth-import http=401
IOC negative-import http=500 ... disallowed operations ...
IOC leftover-import bypass=create-or-replace-alias http=200 ... importIntoDatabaseSuccessed
IOC download file=backup_202610172328.sql http=200 bytes=50432 witness=1
SUCCESS stirling-h2-import-leftover negative-denied=yes bypass=create-or-replace-alias backup-has-witness=yes file=backup_202610172328.sql unauth-import=401 STIRLING-H2-IMPORT-WITNESS

Исправление

Расширьте денилист так, чтобы OR REPLACE не мог находиться между CREATE и ALIAS. Запускайте validateSqlContent на тех же байтах, которые будет выполнять RUNSCRIPT. Запретите EXECUTE IMMEDIATE, если внутренний SQL также не сканируется.

Pattern.compile("(?i)\\bCREATE\\s+(OR\\s+REPLACE\\s+)?(FORCE\\s+)?ALIAS\\b")
Скачать инструмент