PostgreSQL устранила уязвимость в логическом декодировании, существовавшую с 2014 года

Ошибка CVE-2026-6471 позволяла учётной записи с правом REPLICATION запускать произвольный код от имени системного пользователя PostgreSQL. Исправление добавляет список разрешённых библиотек выходных плагинов и может потребовать перенастройки сторонних расширений.

PostgreSQL устранила уязвимость в логическом декодировании, существовавшую с 2014 года

Разработчики PostgreSQL выпустили обновления для устранения CVE-2026-6471 — уязвимости в механизме логического декодирования. При определённых условиях пользователь с атрибутом REPLICATION мог загрузить библиотеку и выполнить произвольный код с правами системного пользователя, от которого запущен сервер базы данных.

Проблема присутствовала с появлением логического декодирования в PostgreSQL 9.4 в 2014 году. Ей подвержены версии до 18.6, 17.11, 16.15, 15.19 и 14.24. Для эксплуатации необходимы учётная запись с атрибутом REPLICATION и включённый режим wal_level = logical. Такие права могут использоваться, в частности, средствами резервного копирования, репликации, CDC-конвейерами и системами мониторинга.

Уязвимость получила идентификатор CVE-2026-6471 и оценку 7,2 балла по CVSS. По данным Cyera Research, имя плагина из команды CREATE_REPLICATION_SLOT передавалось загрузчику библиотек без проверки, применяемой при обычной загрузке. Это позволяло обойти ограничение на путь к плагину. Загруженный таким способом код выполнялся внутри серверного процесса PostgreSQL.

Исправление добавляет параметр output_plugin_libraries: он задаёт перечень библиотек, разрешённых для использования в качестве выходных плагинов логического декодирования. По умолчанию разрешены только pgoutput и test_decoding. После обновления инсталляции, использующие другие плагины, включая wal2json и decoderbufs, не смогут выполнять логическое декодирование, пока администратор не добавит нужную библиотеку в этот параметр и не перезагрузит конфигурацию сервера.

Перед обновлением администраторам рекомендуют проверить используемые плагины запросом SELECT DISTINCT plugin FROM pg_replication_slots WHERE plugin IS NOT NULL. После внесения изменений достаточно перезагрузить конфигурацию через pg_ctl reload или SELECT pg_reload_conf(); полный перезапуск PostgreSQL не требуется.

На 4 сентября, по информации The Hacker News, CVE-2026-6471 отсутствовала в каталоге известных эксплуатируемых уязвимостей CISA KEV, а публичных proof-of-concept для неё издание не обнаружило. При этом для pg_createsubscriber уже обсуждается отдельная доработка: сейчас его режим --dry-run может успешно завершиться даже при конфигурации, в которой реальное создание слотов репликации затем завершится ошибкой.