LINUX.ORG.RU

PostGREShell: в PostgreSQL обнаружили существовавшую 12 лет возможность запуска произвольного кода

 , ,

PostGREShell: в PostgreSQL обнаружили существовавшую 12 лет возможность запуска произвольного кода

0

1

1 сентября исследователи Cyera Research раскрыли подробности уязвимости PostGREShell — CVE-2026-6471, позволявшей пользователю PostgreSQL с привилегией REPLICATION загружать произвольные нативные библиотеки в процесс СУБД. Ошибка появилась вместе с механизмом логического декодирования ещё в PostgreSQL 9.4 и оставалась незамеченной около 12 лет. Само исправление было выпущено раньше — 13 августа в PostgreSQL 18.6, 17.11, 16.15, 15.19 и 14.24.

PostgreSQL оценил CVE-2026-6471 в 7,2 балла CVSS. Согласно официальному описанию, пользователь, не являющийся суперпользователем, но имеющий атрибут REPLICATION, мог через механизм логического декодирования заставить сервер выполнить dlopen() произвольного файла, доступного системной учётной записи PostgreSQL. В результате код из библиотеки выполнялся уже не с SQL-правами атакующего, а непосредственно внутри процесса сервера БД.

Механизм, в котором находилась ошибка, появился в PostgreSQL 9.4, выпущенном 18 декабря 2014 года. В этой версии разработчики впервые добавили логическое декодирование WAL, позволяющее преобразовывать журнал изменений базы в поток данных нужного внешнему приложению формата. В дальнейшем эта инфраструктура стала основой для логической репликации и различных систем Change Data Capture. Документация PostgreSQL описывает logical decoding как механизм передачи изменений внешним потребителям через logical replication slots и подключаемые output-плагины.

Для создания logical replication slot клиент указывает имя output-плагина, например штатного pgoutput или стороннего wal2json. Как выяснили исследователи Cyera, именно здесь существовало расхождение между двумя путями загрузки расширений. Обычная SQL-команда LOAD для непривилегированного пользователя выполняет проверку имени библиотеки, тогда как путь загрузки output-плагина через replication protocol такой проверки не выполнял. Переданное клиентом имя могло дойти до системного загрузчика библиотек — dlopen() в Linux и macOS либо LoadLibrary() в Windows.

Для эксплуатации требовалась уже существующая учётная запись PostgreSQL с атрибутом REPLICATION, а для логического декодирования сервер должен работать с wal_level = logical. Это существенно ограничивает круг потенциальных атакующих. В то же время replication-учётные записи используются инфраструктурой репликации, резервного копирования и CDC. О необходимости wal_level = logical для logical decoding также говорится в официальной документации PostgreSQL.

Способ доставки вредоносной библиотеки зависит от операционной системы. На Windows атака может выполняться полностью удалённо: по данным Cyera, в качестве имени библиотеки можно передать UNC-путь вида \\server\share\file.dll. LoadLibrary() в таком случае обращается к SMB-ресурсу, после чего размещённая на сервере атакующего DLL загружается в процесс PostgreSQL. Для этого PostgreSQL-сервер должен иметь возможность установить исходящее SMB-соединение с системой атакующего по TCP/445. Исследователи продемонстрировали такой сценарий в proof-of-concept.

На Linux и macOS ситуация несколько отличается. При настроенном NFS automount исследователи показали похожий вариант с загрузкой библиотеки через /net/.... Однако на обычном Linux, а также в типичной конфигурации Docker или Kubernetes одной учётной записи REPLICATION недостаточно: атакующему необходимо каким-либо другим способом предварительно разместить вредоносный .so в доступной PostgreSQL файловой системе. После этого PostGREShell позволяет заставить сервер загрузить этот файл. Различия способов эксплуатации для Windows, NFS-систем и обычного Linux подробно приведены Cyera.

Загруженная библиотека исполняется в адресном пространстве PostgreSQL с правами системного пользователя сервера. В своём PoC исследователи продемонстрировали дальнейшее повышение привилегий внутри самой СУБД: нативный код может обращаться к внутренним функциям PostgreSQL и изменять системный каталог pg_authid, превращая исходную replication-учётную запись в PostgreSQL superuser в обход обычных SQL ACL.

После получения прав superuser атакующий приобретает доступ ко всем базам и другим привилегированным возможностям PostgreSQL. В техническом разборе Cyera также показаны варианты закрепления после успешной компрометации: изменение pg_hba.conf, добавление вредоносной библиотеки в shared_preload_libraries и восстановление повышенных привилегий после попытки администратора их удалить. Это уже не дополнительные уязвимости PostgreSQL, а демонстрация возможных действий после успешного запуска произвольного нативного кода.

В ходе дополнительного поиска на VirusTotal специалисты Cyera обнаружили 114 вредоносных файлов, оформленных как плагины PostgreSQL, среди которых встречались трояны, майнеры криптовалют и reverse shell. Однако исследование не доказывает, что эти образцы распространялись или загружались при помощи CVE-2026-6471. То есть наличие готовых вредоносных PostgreSQL-плагинов показывает практическую доступность подобной техники, но само по себе не подтверждает эксплуатацию PostGREShell в реальных атаках.

Разработчики PostgreSQL устранили проблему введением нового параметра output_plugin_libraries. Согласно официальным release notes PostgreSQL 18.6, раньше replication-пользователь мог выбрать любую загружаемую библиотеку в качестве logical decoding output plugin. Теперь сервер разрешает только библиотеки из явно определённого списка.

По умолчанию в output_plugin_libraries разрешены только два плагина, поставляемые самим PostgreSQL — pgoutput и test_decoding. Пользователям сторонних output-плагинов после обновления необходимо самостоятельно добавить доверенные библиотеки. Документация параметра приводит, например, такую конфигурацию:

output_plugin_libraries = 'pgoutput, test_decoding, my_trusted_decoder'

При обновлении PostgreSQL с версии 17 и новее pg_upgrade --check также проверяет используемые существующими logical replication slots плагины. Если необходимый плагин отсутствует в output_plugin_libraries нового кластера, проверка завершится ошибкой до тех пор, пока администратор не добавит его в разрешённый список.

Исправление CVE-2026-6471 вошло в выпущенные 13 августа 2026 года PostgreSQL 18.6, 17.11, 16.15, 15.19 и 14.24. Официальная карточка PostgreSQL указывает все эти версии как первые исправленные выпуски. Более старые неподдерживаемые ветки отдельных security-релизов уже не получают, поэтому их пользователям требуется переход на поддерживаемую версию PostgreSQL.

Помимо установки обновлений, Cyera рекомендует провести аудит всех ролей с атрибутом REPLICATION, удалить эти права у учётных записей, которым они больше не требуются, и ограничить источники подключения replication-пользователей через pg_hba.conf. Для PostgreSQL-серверов также рекомендуется блокировать ненужные исходящие соединения SMB/445 и NFS/2049, отключать ненужный autofs и отслеживать создание неожиданных replication slots и имена output-плагинов, содержащие /, \ или ...

Уязвимость была передана PostgreSQL Security Team Владимиром Токаревым 21 февраля 2026 года, а 27 февраля команда PostgreSQL подтвердила наличие проблемы. В официальных release notes PostgreSQL за обнаружение CVE-2026-6471 выражена благодарность Vladimir Tokarev и Yu Kunpeng, а автором изменения, вводящего output_plugin_libraries, указан Jacob Champion.

>>> Источник

★★★★★

Проверено: cetjs2 ()

Вот они, трамваи-то. Я про любую динамику вообще. Возможность вызова dlopen() с любым параметром, хрен знает откуда приезжающим – и вдруг дыра. Кто бы мог подумать?

dimgel ★★★★★
()
Ответ на: комментарий от PcheloBiaka

справедливости ради, админы не дают пользователям учётки с ролью REPLICATION, так что всё это звучит страшно, но по факту не так страшно

unclestephen ★★★★★
() автор топика
Ответ на: комментарий от unclestephen

Я прямо сейчас в такой конторе, где одмин говорит пользователям «какого хрена вы пароли ставите? Мне потом не зайти вам всё исправить». Думаю такие одмины не только в офисах :)

PcheloBiaka ★
()

оставалась незамеченной около 12 лет

Эпично, чо.

Тут на соседнем ресурсе новость, что нашли 18 уязвимостей в ядре Linux c эксплоитами для получения прав root в системе.

Gonzo ★★★★★
()

На Windows атака может выполняться полностью удалённо: по данным Cyera, в качестве имени библиотеки можно передать UNC-путь вида \server\share\file.dll. LoadLibrary() в таком случае обращается к SMB-ресурсу, после чего размещённая на сервере атакующего DLL загружается в процесс PostgreSQL. Для этого PostgreSQL-сервер должен иметь возможность установить исходящее SMB-соединение с системой атакующего по TCP/445. Исследователи продемонстрировали такой сценарий в proof-of-concept.

На Linux и macOS ситуация несколько отличается. При настроенном NFS automount исследователи показали похожий вариант с загрузкой библиотеки через /net/…. Однако на обычном Linux, а также в типичной конфигурации Docker или Kubernetes одной учётной записи REPLICATION недостаточно: атакующему необходимо каким-либо другим способом предварительно разместить вредоносный .so в доступной PostgreSQL файловой системе. После этого PostGREShell позволяет заставить сервер загрузить этот файл. Различия способов эксплуатации для Windows, NFS-систем и обычного Linux подробно приведены Cyera.

Вот Это - интересный факт.

Sm0ke85 ☆
()
Ответ на: комментарий от Gonzo

Тут на соседнем ресурсе новость, что нашли 18 уязвимостей в ядре Linux c эксплоитами для получения прав root в системе.

Ну «окна» же прилюдно не истязают ЫЫ-шечкой, которая тысячами «дыры находит», а 18 рабочих эксплоитов на «тысячи потенциальных уязвимостей» - вполне отличный результат, я считаю.

Конкурентов Буквально нет, ибо конкуренты в Таком не желают участвовать прилюдно…))))

Sm0ke85 ☆
()

Кунпенг Чемпион и (Вилли) Токарев.

Спасибо за новость и детали!

powerguy ★★★
()
Ответ на: комментарий от cobold

Прилюдно нет,но количество патчей у майков тоже растёт !Ъ (comss.ru)

Ну вот и я о том же: линя сношают прилюдно во всех позах, а сами в кустиках в полный рост сношаются, чтоб не видел особо никто))))

За линукс обидно прям, он-то на виду и в неглиже…

Sm0ke85 ☆
()
Ответ на: комментарий от cobold

Прилюдно нет,но количество патчей у майков тоже растёт !Ъ (comss.ru)

Кстати, у меня вин10 на работе есть, там обновлений уже давно не было, а недавно какое-то таки прилетело, вот я и задумался: с чего это обновление безопасности прилетело на не поддерживаемую систему да еще и не активированную даже))))

Sm0ke85 ☆
()
Ответ на: комментарий от Reset

Товарищ капитан от гордости чуть кофем не подавился

superuser ★★★★☆
()
Ответ на: комментарий от Sm0ke85

там обновлений уже давно не было, а недавно какое-то таки прилетело, вот я и задумался: с чего это обновление безопасности прилетело на не поддерживаемую систему да еще и не активированную даже))))

Пачки рутовых сертификатов должны прилетать как минимум; они с найденными дырами в софте не связаны.

sarumeister ★
()
Ответ на: комментарий от sarumeister

Пачки рутовых сертификатов должны прилетать как минимум; они с найденными дырами в софте не связаны.

Короче почти 10 месяцев 0 обновлений и 09.09.2026: KB5126256

На сколько я понял это не обычное функциональное обновление Windows 10, а пакет подготовки лицензирования расширенных обновлений безопасности ESU. Он нужен для получения будущих обновлений безопасности после завершения стандартной поддержки Windows 10.

PS вот только у меня нет расширенной поддержки)))) Это они намекнули что «еще не поздно»?))))

Sm0ke85 ☆
()
Ответ на: комментарий от PcheloBiaka

Так может, он не просто админ, а помогает пользователям «у меня не работает», т.е. выполняет не админские задачи.

seiken ★★★★★
()
Ответ на: комментарий от Reset

Зачем оно спецслужбам то? Его эксплуатировать почти ни в каких сценариях нельзя (виндузятников в расчёт не берём).

firkax ★★★★★
()
Ответ на: комментарий от firkax

виндузятников в расчёт не берём

С чего бы? Их миллиарды! (правда у них там движки от MS Access, MS SQL…)

Saakx ★
()

Вот что ИИ животворящий делает! Стали привлекать и тут находки и попёрли.

keeper_b ★★★★★
()
Ответ на: комментарий от user_id_68054

вроде тебе показалось

но кстати про sudo su, я тут выкладывал статью, и в примерах делал sudo -i, кто-то добрый с правами, исправил мне на sudo su. Так что это легитимно и ЛОР-style, если вдруг что.

unclestephen ★★★★★
() автор топика
Последнее исправление: unclestephen (всего исправлений: 2)
Ответ на: комментарий от PcheloBiaka

Я прямо сейчас в такой конторе, где одмин говорит пользователям «какого хрена вы пароли ставите? Мне потом не зайти вам всё исправить»

Слабоват мужик. Лично я пользовательские пароли просто помню.

BydymTydym ★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.