CVE-2023-39417
PostgreSQL: опасная подстановка в скрипте расширения
Ошибка установки сторонних доверенных расширений PostgreSQL могла дать лишние права пользователю базы. Условия достаточно узкие: проверьте не только версию сервера, но и доступные расширения и право CREATE.
Кому нужно проверить
Администраторам 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Проверьте версию работающего сервера через разрешённое подключение, а не версию клиента psql. Сверьте пакет с бюллетенем поставщика, если применяются backport-исправления.
- 2Поручите администратору составить список доступных сторонних trusted-расширений и проверить их установочные скрипты на условия из advisory. Отдельно проверьте пользователей с CREATE на уровне базы; список pg_extension отражает только уже установленные расширения.
- 3До обновления ограничьте ненужные права CREATE и установку сторонних расширений. Сначала проверьте зависимости приложения: отзыв права может нарушить миграции. Ограничение прав уменьшает возможности атаки, но не исправляет ядро сервера.
- 4Подготовьте проверенную резервную копию базы, ролей и конфигурации. На тестовой системе с теми же расширениями проверьте обновление, запуск приложения и штатные миграции. Для перехода между основными версиями используйте отдельный план миграции.
- 5Установите исправленный поддерживаемый сервер на все нужные узлы по инструкции поставщика. Не считайте замену только клиентского пакета исправлением. План восстановления должен учитывать совместимость формата данных и версий расширений.
- 6После обновления повторите проверку версии через подключение к рабочему серверу, проверьте приложение и необходимые права. Не создавайте специально вредоносное расширение в рабочей базе. При признаках чужих действий сохраните журналы и проверьте роли и изменения схемы.
Примеры конфигурации и проверки
psql -X -c 'SHOW server_version;'Требуется установленный psql и заранее настроенное разрешённое подключение к нужной базе обычной ролью; суперпользователь не нужен. Проверьте целевой сервер до запуска. Команда только читает версию, -X исключает выполнение пользовательского psqlrc; откат не требуется. Пароль не указывайте в командной строке. Результат не проверяет расширения, права CREATE или backport пакета.
Как не подпустить ботов к сайту
BotProtection принимает запросы перед вашим сайтом и фильтрует автоматизированные обращения. Поэтому ботам сложнее добраться до уязвимого компонента и начать его проверять или атаковать, а вероятность успешной автоматизированной атаки становится значительно ниже. Это дополнительный слой защиты: обновление уязвимых компонентов, проверка журналов и реагирование на инциденты остаются обязательными.
Первоисточники
Снизьте шанс атаки до того, как бот дойдёт до сайта
Подключите BotProtection как фильтр перед сайтом: подозрительные автоматизированные запросы отсекаются до обращения к вашему серверу. Это значительно снижает вероятность автоматизированной атаки, но не исправляет саму уязвимость, поэтому обновление и настройка компонентов остаются обязательными.