CVE-2022-2625
PostgreSQL CVE-2022-2625: подмена объектов скриптом расширения
При сочетании права создавать объекты, установки уязвимого расширения администратором и использования подменённого объекта атакующий мог выполнить код от имени роли-жертвы. PostgreSQL исправил защиту в ядре; отдельные расширения модифицировать не требуется.
Кому нужно проверить
Администраторам PostgreSQL 10–14 и владельцам общих баз, где пользователи могут создавать объекты, а администраторы устанавливают расширения. Важна не только марка продукта, но и конкретная версия, способ установки, операционная система и конфигурация.
В чём риск
Некоторые скрипты расширений используют CREATE OR REPLACE или CREATE IF NOT EXISTS не только для объектов, уже принадлежащих расширению. При одновременном выполнении всех перечисленных условий атакующий мог направить администратора и жертву на подменённый объект и выполнить произвольный код от имени роли жертвы, вплоть до суперпользователя. PostgreSQL блокирует этот сценарий в ядре сервера.
Затронутые версии
Затронуты upstream-ветки PostgreSQL 10–14 до выпусков 10.22, 11.17, 12.12, 13.8 и 14.5. Нужны все три условия: право создавать нетемпоральные объекты хотя бы в одной схеме, возможность побудить администратора установить или обновить затронутое расширение в этой схеме и возможность побудить жертву использовать объект из CREATE OR REPLACE или CREATE IF NOT EXISTS.
Исправленные версии
Исправлено в PostgreSQL 10.22, 11.17, 12.12, 13.8 и 14.5 (11 августа 2022 года). Исправление находится в ядре сервера и, по сообщению проекта, не требует изменения отдельных расширений. Для современных систем используйте поддерживаемую исправленную ветку или пакет поставщика с backport.
Что сделать
- 1Проверьте серверную версию и исправление поставщика; отдельно учитывайте, что PostgreSQL 10 и ряд старых веток сняты с поддержки.
- 2Проведите ревизию ролей, имеющих CREATE в схемах, и отзовите ненужные привилегии после проверки зависимостей приложения.
- 3Контролируйте установку и обновление расширений администраторами; проверяйте происхождение пакетов и сценарии изменений объектов.
- 4Установите поддерживаемую исправленную версию PostgreSQL или подтверждённый backport. По advisory PostgreSQL исправление блокируется в ядре сервера, поэтому вручную менять отдельные расширения для устранения CVE не требуется.
- 5После обновления проверьте роли, схемы и недавние изменения объектов; при признаках подмены сохраните журналы и расследуйте действия привилегированных ролей.
Три предпосылки CVE-2022-2625
Схема показывает совокупные условия атаки; для защиты проверяйте каждое из них и устанавливайте исправление сервера.
- 1У пользователя есть право создавать нетемпоральные объекты в схеме
- 2Администратор устанавливает или обновляет уязвимое расширение там
- 3Жертва использует объект, указанный в CREATE OR REPLACE или CREATE IF NOT EXISTS
- 4Ограничьте лишние права и обновите ядро PostgreSQL
- 5Проверьте роли и изменения объектов после обновления
Примеры конфигурации и проверки
psql -X -c "SELECT has_database_privilege(current_user, current_database(), 'CREATE') AS current_role_has_create;"Выполните в целевой базе разрешённой учётной записью. Запрос только показывает, имеет ли текущая роль право CREATE в этой базе; он не перечисляет права других ролей и не проверяет CREATE в схемах. Для полного аудита запросите администратора. Пароль не указывайте в командной строке.
Как не подпустить ботов к сайту
BotProtection принимает запросы перед вашим сайтом и фильтрует автоматизированные обращения. Поэтому ботам сложнее добраться до уязвимого компонента и начать его проверять или атаковать, а вероятность успешной автоматизированной атаки становится значительно ниже. Это дополнительный слой защиты: обновление уязвимых компонентов, проверка журналов и реагирование на инциденты остаются обязательными.
Первоисточники
Снизьте шанс атаки до того, как бот дойдёт до сайта
Подключите BotProtection как фильтр перед сайтом: подозрительные автоматизированные запросы отсекаются до обращения к вашему серверу. Это значительно снижает вероятность автоматизированной атаки, но не исправляет саму уязвимость, поэтому обновление и настройка компонентов остаются обязательными.