CVE-2023-39418
PostgreSQL CVE-2023-39418: MERGE обходил политики RLS
В PostgreSQL 15 команда MERGE могла не проверять новые строки по политикам SELECT и UPDATE для row-level security. Проверьте базы с CREATE POLICY и сценарии, где правила INSERT отличаются от правил чтения и обновления.
Кому нужно проверить
Администраторам PostgreSQL 15 и владельцам приложений, использующих MERGE вместе с политиками row-level security. Важна не только марка продукта, но и конкретная версия, способ установки, операционная система и конфигурация.
В чём риск
При различии политик INSERT, SELECT и UPDATE MERGE мог сохранить строки, которые другие политики запрещают видеть или изменять. Последствия зависят от схемы доступа приложения; сам факт наличия PostgreSQL 15 без row-level security не означает, что описанный сценарий применим.
Затронутые версии
По advisory PostgreSQL затронута ветка 15 до исправления. Уязвимость относится только к базам, где CREATE POLICY определяет row-level security; проблема проявляется, если политики SELECT и UPDATE запрещают строки, которые политика INSERT разрешает сохранять.
Исправленные версии
Исправлено в PostgreSQL 15.4 (10 августа 2023 года). Установите актуальный пакет поддерживаемой ветки; для пакетов ОС и управляемых сервисов проверяйте advisory поставщика и наличие backport, а не только номер upstream-версии.
Что сделать
- 1Подключитесь именно к проверяемому серверу и прочитайте server_version. Учитывайте, что номер upstream не показывает, включил ли поставщик backport.
- 2Проверьте, используются ли CREATE POLICY и MERGE на защищённых таблицах, особенно если политики INSERT допускают больше строк, чем политики SELECT или UPDATE.
- 3До установки исправления избегайте MERGE для таблиц с такими различающимися политиками и ограничьте соответствующие операции ролями приложения. Это временное снижение риска, а не исправление сервера.
- 4Установите исправленный поддерживаемый выпуск PostgreSQL либо пакет с подтверждённым поставщиком исправлением. Проверьте процедуру обновления и совместимость приложения в тестовой среде.
- 5После обновления перепроверьте версию пакета и ожидаемое поведение политик на тестовых ролях; не используйте производственные данные для проверки запрещённых строк.
Условия и проверка CVE-2023-39418
Статичная схема применимости и безопасного порядка исправления; каждый шаг также представлен текстом.
- 1Проверьте, работает ли сервер PostgreSQL 15
- 2Уточните, используются ли CREATE POLICY и MERGE на одной таблице
- 3Сравните политики INSERT, SELECT и UPDATE для этой таблицы
- 4Временно избегайте уязвимого сценария и установите исправленный пакет
- 5Повторно проверьте сервер и политики на тестовых ролях
Примеры конфигурации и проверки
psql -X -c 'SHOW server_version;'Требуется psql и разрешённое подключение к нужной базе; команда только читает версию сервера, а -X не загружает пользовательский psqlrc. Она не определяет наличие backport в пакете и не проверяет политики RLS. Не помещайте пароль в командную строку.
Как не подпустить ботов к сайту
BotProtection принимает запросы перед вашим сайтом и фильтрует автоматизированные обращения. Поэтому ботам сложнее добраться до уязвимого компонента и начать его проверять или атаковать, а вероятность успешной автоматизированной атаки становится значительно ниже. Это дополнительный слой защиты: обновление уязвимых компонентов, проверка журналов и реагирование на инциденты остаются обязательными.
Первоисточники
Снизьте шанс атаки до того, как бот дойдёт до сайта
Подключите BotProtection как фильтр перед сайтом: подозрительные автоматизированные запросы отсекаются до обращения к вашему серверу. Это значительно снижает вероятность автоматизированной атаки, но не исправляет саму уязвимость, поэтому обновление и настройка компонентов остаются обязательными.