PostgreSQL выпустила обновление, устраняющее уязвимость, существовавшую с момента внедрения логического декодирования в версии 9.4. Уязвимость, обозначенная как CVE-2026-6471, позволяет учетным записям с атрибутом REPLICATION выполнять произвольный код от имени операционного пользователя, запустившего сервер базы данных.
Как работает уязвимость
Проблема затрагивает версии PostgreSQL до 18.6, 17.11, 16.15, 15.19 и 14.24. Процесс эксплуатации требует наличия учетной записи с атрибутом REPLICATION и сервера, работающего с wal_level = logical. Обычно атрибут REPLICATION получают инструменты резервного копирования, резервные сервера и системы мониторинга.
После обновления, выпущенного 13 августа, добавлен параметр сервера output_plugin_libraries, который прописывает библиотеки, разрешенные для загрузки в качестве плагинов для логического декодирования. По умолчанию это pgoutput и test_decoding, что значит, что если используется другой плагин, например wal2json, его загрузка станет невозможной до внесения изменений администратором.
Технические детали и последствия
Группа разработчиков PostgreSQL сопроводила исправление комментариями о том, что «ранее пользователи репликации могли выбирать любую загружаемую библиотеку для логического декодирования, что могло привести к различным атакам». Теперь список разрешенных плагинов ограничен, чтобы обеспечить безопасность, не нарушая существующие настройки.
CYERA Research, сообщающие о проблеме, указали, что плагин, переданный в команде CREATE_REPLICATION_SLOT, обрабатывается напрямую, создавая риск доступа к файловой системе. На Windows уязвимость позволяет загрузить библиотеку с другого компьютера через протокол SMB, а на Linux и macOS может потребоваться разрешить автоматическое монтирование NFS.
Важность обновления для администраторов
Для администраторов важен немедленный переход на новые версии PostgreSQL, чтобы избежать потенциальных утечек и малозаметных атак. Аналитики рекомендуют перед обновлением выполнить запрос SELECT DISTINCT plugin FROM pg_replication_slots WHERE plugin IS NOT NULL;, чтобы определить используемые плагины.
Обновление PostgreSQL — это шаг к долгожданному улучшению безопасности системы. Важно следить за обновлениями и не игнорировать возможные уязвимости для защиты информации.
Следующая версия PostgreSQL, вероятно, добавит дополнительные улучшения безопасности и расширит функциональные возможности для разработчиков.