Все уязвимости

CVE-2023-39417

PostgreSQL: опасная подстановка в скрипте расширения

Ошибка установки сторонних доверенных расширений PostgreSQL могла дать лишние права пользователю базы. Условия достаточно узкие: проверьте не только версию сервера, но и доступные расширения и право CREATE.

Проверено 26 октября 2026PostgreSQL: CVSS 3.0 — 7.5, вектор AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H. Повышенная сложность и необходимые права не отменяют тяжесть последствий при выполнении всех условий.

Кому нужно проверить

Администраторам PostgreSQL и разработчикам, которые устанавливают сторонние расширения или выдают приложению право создавать объекты базы. Особенно полезно проверить общие серверы с несколькими командами. Важна не только марка продукта, но и конкретная версия, способ установки, операционная система и конфигурация.

В чём риск

Расширение добавляет функции в базу через установочный SQL-скрипт. При неверной подстановке имени внутри кавычек данные могли стать частью команды — это SQL-инъекция. При перечисленных условиях проект допускает выполнение произвольного кода от имени исходного суперпользователя базы. Это не типичная инъекция через форму сайта: причиной служит обработка скрипта расширения сервером. Отсутствие расширения в списке уже установленных в конкретной базе не исключает наличия его файлов на сервере.

Затронутые версии

В бюллетене перечислены ветки PostgreSQL 11–15 до исправленных минорных выпусков. Необходимы файлы уязвимого стороннего trusted-расширения, уже установленные администратором на сервер, и право CREATE на уровне базы у атакующего. Скрипт такого расширения использует @extowner@, @extschema@ или @extschema:...@ внутри кавычек. Расширения, поставляемые вместе с PostgreSQL, не уязвимы по этому механизму. Наличие обычного подключения к базе само по себе недостаточно.

Исправленные версии

Исправления ядра сервера: 15.4, 14.9, 13.12, 12.16 и 11.21, опубликованные 10 августа 2023 года. Проект сообщает, что исправление в ядре блокирует атаку без изменения каждого расширения. Сегодня выбирайте актуальную поддерживаемую ветку или исправленный пакет поставщика с учётом backport.

Что сделать

  1. 1Проверьте версию работающего сервера через разрешённое подключение, а не версию клиента psql. Сверьте пакет с бюллетенем поставщика, если применяются backport-исправления.
  2. 2Поручите администратору составить список доступных сторонних trusted-расширений и проверить их установочные скрипты на условия из advisory. Отдельно проверьте пользователей с CREATE на уровне базы; список pg_extension отражает только уже установленные расширения.
  3. 3До обновления ограничьте ненужные права CREATE и установку сторонних расширений. Сначала проверьте зависимости приложения: отзыв права может нарушить миграции. Ограничение прав уменьшает возможности атаки, но не исправляет ядро сервера.
  4. 4Подготовьте проверенную резервную копию базы, ролей и конфигурации. На тестовой системе с теми же расширениями проверьте обновление, запуск приложения и штатные миграции. Для перехода между основными версиями используйте отдельный план миграции.
  5. 5Установите исправленный поддерживаемый сервер на все нужные узлы по инструкции поставщика. Не считайте замену только клиентского пакета исправлением. План восстановления должен учитывать совместимость формата данных и версий расширений.
  6. 6После обновления повторите проверку версии через подключение к рабочему серверу, проверьте приложение и необходимые права. Не создавайте специально вредоносное расширение в рабочей базе. При признаках чужих действий сохраните журналы и проверьте роли и изменения схемы.

Примеры конфигурации и проверки

Прочитать версию сервера через настроенное подключение (shell)
psql -X -c 'SHOW server_version;'

Требуется установленный psql и заранее настроенное разрешённое подключение к нужной базе обычной ролью; суперпользователь не нужен. Проверьте целевой сервер до запуска. Команда только читает версию, -X исключает выполнение пользовательского psqlrc; откат не требуется. Пароль не указывайте в командной строке. Результат не проверяет расширения, права CREATE или backport пакета.

Как не подпустить ботов к сайту

BotProtection принимает запросы перед вашим сайтом и фильтрует автоматизированные обращения. Поэтому ботам сложнее добраться до уязвимого компонента и начать его проверять или атаковать, а вероятность успешной автоматизированной атаки становится значительно ниже. Это дополнительный слой защиты: обновление уязвимых компонентов, проверка журналов и реагирование на инциденты остаются обязательными.

Первоисточники

Снизьте шанс атаки до того, как бот дойдёт до сайта

Подключите BotProtection как фильтр перед сайтом: подозрительные автоматизированные запросы отсекаются до обращения к вашему серверу. Это значительно снижает вероятность автоматизированной атаки, но не исправляет саму уязвимость, поэтому обновление и настройка компонентов остаются обязательными.