Критическое обновление безопасности pgAdmin 4 v9.16
Разработчики pgAdmin Development Team выпустили критическое обновление популярного графического клиента для управления СУБД PostgreSQL — pgAdmin 4 версии 9.16. Этот релиз содержит 64 исправления ошибок и новые функциональные возможности, однако его главным приоритетом является устранение цепочки из семи опасных уязвимостей безопасности (с CVE-2026-12044 по CVE-2026-12050). Внедрение данных патчей обязательно для всех пользователей и администраторов баз данных, поскольку blast radius (зона потенциального поражения) уязвимостей в инструментах администрирования баз данных традиционно велик: компрометация графического клиента может предоставить злоумышленникам доступ к учетным записям с максимальными правами (суперпользователям) и всей хранимой конфиденциальной информации.
Детальный разбор семи уязвимостей (CVE-2026-12044 — CVE-2026-12050)
Новая версия pgAdmin 4 закрывает бреши в безопасности разного уровня критичности — от обхода авторизации до удаленного выполнения кода на сервере:
- CVE-2026-12044 (SQL-инъекция в шаблонах комментариев): уязвимость обнаружена в шестнадцати шаблонах диалоговых окон, которые генерируют SQL-команды вида
COMMENT ON ... IS '<описание>'. Злоумышленник мог внедрить SQL-код через поле описания объектов базы данных. Для исправления разработчики перевели шаблоны на использование функции безопасного экранированияqtLiteralи переписали запросы статистики с использованием приведения сущностей к OID (внутренним идентификаторам PostgreSQL) через конструкцию::oid::regclass. - CVE-2026-12045 (Обход ограничений транзакций в AI-ассистенте с выходом на RCE): встроенный интеллектуальный помощник pgAdmin выполнял запросы в режиме «только для чтения» (READ ONLY). Однако уязвимость позволяла обойти это ограничение с помощью внедрения инструкций, состоящих из нескольких SQL-команд (multi-statement payload). При наличии подключения с правами суперпользователя злоумышленник мог добиться удаленного выполнения кода (RCE — Remote Code Execution) на сервере базы данных через запуск системных команд СУБД с помощью инструкции
COPY ... TO PROGRAM. - CVE-2026-12046 (Обход авторизации и небезопасная десериализация): два служебных эндпоинта (сетевых адреса) редактора SQL Editor в серверном режиме pgAdmin не имели аннотации защиты
@pga_login_required. Это открывало неавторизованным пользователям доступ к механизму десериализации Python-объектов через библиотекуpickle(pickle deserialization sink), что позволяет злоумышленнику выполнить произвольный код на сервере, где развернут сам pgAdmin. - CVE-2026-12047 (HTML-инъекция в модуле облачного развертывания): при развертывании PostgreSQL в облаках AWS RDS, Azure или Google Cloud тексты исключений, возвращаемые облачными SDK, выводились в интерфейс пользователя без очистки с помощью парсера
html-react-parser. Это позволяло внедрять в окно браузера произвольный HTML-код. - CVE-2026-12048 (Критическая сохраненная XSS через ошибки БД): наиболее опасная уязвимость графического интерфейса. Вредоносный JS-код мог быть внедрен в БД в качестве текста системных ошибок PostgreSQL или узлов планов выполнения Explain. При просмотре этих данных легитимным администратором через всплывающие уведомления (toasts), формы ошибок или визуализатор планов Explain скрипт выполнялся в браузере администратора (Stored XSS). Встроенный скрипт мог похитить сохраненные в сессии пароли доступа к серверам БД и выполнить от имени администратора любые SQL-запросы на подключенных серверах.
- CVE-2026-12049 (Открытый редирект в MFA): в процессе многофакторной аутентификации параметр перенаправления
nextне валидировался должным образом, что создавало риски фишинговых атак и подмены целевых страниц. - CVE-2026-12050 (SQL-инъекция в точках восстановления): эндпоинт создания именованных точек восстановления базы данных использовал небезопасное форматирование строк через метод
str.format()вместо применения параметризованных запросов.
Изменения в поведении авторизации и новые функции интерфейса
Помимо исправления уязвимостей, релиз v9.16 содержит важное изменение в логике аутентификации:
!IMPORTANT Если в настройках подключения к серверу одновременно заданы внешняя команда получения пароля
password-execи файл паролейpassfile, теперь pgAdmin 4 отдает приоритет файлуpassfileи игнорирует командуpassword-exec, записывая соответствующее предупреждение в системный лог. В предыдущих версиях поведение было обратным. Командам, использующим внешние менеджеры секретов, необходимо проверить конфигурации авторизации после обновления.
Из полезных улучшений интерфейса стоит отметить:
- Цветовая маркировка вкладок серверов: теперь заголовки вкладок в рабочей области можно окрашивать в разные цвета в зависимости от выбранного сервера. Это полезная мера операционной безопасности, помогающая разработчикам случайно не запустить деструктивный SQL-скрипт на продакшене, перепутав его с тестовым контуром.
- Поддержка закрытия вкладок кликом средней кнопки мыши.
- Настройка параметра хранения TOAST-таблиц для материализованных представлений (Materialized Views).
- Поддержка любых стилей шрифтов Font Awesome для иконок OAuth2-авторизации.
План отказа от планировщика pgAgent
Команда разработчиков официально объявила об устаревании встроенного планировщика задач pgAgent. Поддержка этого инструмента будет прекращена:
- В течение одного месяца ссылки на
pgAgentбудут удалены с официального сайта pgAdmin. - Примерно через шесть месяцев функционал управления задачами
pgAgentбудет полностью вырезан из кода pgAdmin.
Администраторам баз данных рекомендуется не дожидаться полного отключения, а провести инвентаризацию текущих задач планировщика, экспортировать их логику и настроить альтернативные инструменты автоматизации. В качестве замены могут выступать системные таймеры systemd, стандартный cron в операционной системе, облачные планировщики (например, AWS CloudWatch Events) или специализированные оркестраторы процессов (Airflow, Prefect), в зависимости от вашей инфраструктуры.
Инструкция по обновлению и аудит безопасности инсталляций
Для перевода вашей инфраструктуры на безопасную версию pgAdmin 4 v9.16 выполните следующие шаги:
- Создание резервной копии: сохраните конфигурационные файлы и базу данных настроек pgAdmin (обычно
pgadmin4.db), если у вас развернут серверный вариант. - Обновление пакетов:
- Docker: обновите тег образа в вашем манифесте или compose-файле до
9.16и перезапустите контейнер:docker pull dpage/pgadmin4:9.16 - Python Wheel: обновите пакет в виртуальном окружении:
pip install --upgrade pgadmin4 - Системные репозитории (RPM/DEB): обновите пакеты через менеджер пакетов вашей ОС и перезапустите веб-сервер.
- Docker: обновите тег образа в вашем манифесте или compose-файле до
- Проверка логов: после запуска проверьте логи pgAdmin на наличие предупреждений о конфликте
password-execиpassfile. - Снижение привилегий: в качестве общей гигиенической меры настройте подключения pgAdmin к базам данных с использованием минимально необходимых ролей доступа. Избегайте использования учетных записей суперпользователей для выполнения ежедневных аналитических или административных задач через графический интерфейс.
- Ротация паролей: если существовал риск того, что непривилегированные пользователи могли внедрить вредоносные скрипты в структуру базы данных или спровоцировать генерацию специфических ошибок, которые затем просматривались администраторами в pgAdmin, проведите ротацию всех сохраненных в клиенте паролей серверов.
