CVE: CVE-2026-61781
Продукт: Debian
Дата публикации: 18.09.2026
Критичность: CRITICAL
CVSS: 9.9 (3.1)
EPSS: 0,57%; процентиль 46,08%
CISA KEV: нет подтверждения в каталоге CISA KEV
Краткое описание
В расширении PostgreSQL pg_partman обнаружена критическая уязвимость, позволяющая роли с ограниченными правами выполнить произвольный SQL-код с привилегиями суперпользователя. В Debian пакет pg-partman уязвим в версиях bookworm и trixie. Статья описывает механику атаки, статус исправлений и способы проверки системы.
Основные характеристики
Уязвимость позволяет злоумышленнику с минимальными правами в базе данных получить полный контроль над системой PostgreSQL и, потенциально, над операционной системой. Риск обусловлен некорректной обработкой пользовательского ввода при формировании SQL-запросов.
- Тип ошибки: SQL-инъекция (CWE-89) и некорректное управление привилегиями (CWE-269).
- CVSS: 9.9 (CRITICAL). Вектор:
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H. Это означает высокую сложность последствий при низком пороге входа.
- Условия атаки: Требуется удаленный доступ к базе данных и учетная запись с правами
INSERT/UPDATEна таблицу конфигурации pg_partman.
- Эксплуатация: Публичные данные о массовой эксплуатации отсутствуют, но техническое описание позволяет легко составить эксплойт.
- EPSS: 0,57% (процентиль 46,08%). Вероятность эксплуатации в ближайшие 30 дней оценивается как низкая, но риск остается высоким из-за критичности.
Какие продукты и версии затронуты
В дистрибутиве Debian уязвим пакет
pg-partman. Статус исправлений различается в зависимости от релиза.- bookworm: Статус
open. Установленная версия4.7.2-1уязвима. Исправление не назначено.
- trixie: Статус
open. Установленная версия5.2.4-1уязвима. Исправление не назначено.
- forky: Статус
resolved. Уязвимость исправлена в версии5.5.0-1.
- sid (unstable): Статус
resolved. Уязвимость исправлена в версии5.5.0-1.
Администраторам систем на bookworm и trixie необходимо принять меры по защите, так как официальных обновлений для этих веток пока нет.
Причина уязвимости
Причина уязвимости кроется в функции
create_partition_time(). Она считывает значение из текстового поля part_config.time_encoder и подставляет его в динамически выполняемый SQL-запрос без экранирования идентификаторов.Разработчики предполагали, что в этом поле будет храниться только имя функции. Однако поле доступно для записи роли
partman_user, которой выданы права INSERT и UPDATE. Это позволяет атакующему записать в поле произвольный SQL-код вместо имени функции.Когда фоновый процесс
pg_partman_bgw запускается для создания новой партиции, он выполняет этот вредоносный код. Поскольку процесс работает с привилегиями, которые по умолчанию совпадают с привилегиями суперпользователя PostgreSQL, атакующий получает полный доступ к базе данных.Как работает атака
Атака начинается с получения доступа к базе данных под учетной записью, имеющей права на изменение конфигурации pg_partman. Атакующий записывает в поле
time_encoder вредоносный SQL-запрос.Далее система ожидает срабатывания фоновой задачи по созданию партиций. Когда
pg_partman_bgw обрабатывает запрос для текстовых или UUID-ключей, он выполняет сохраненный SQL-код. В результате атакующий получает сессию с привилегиями суперпользователя.Поскольку вредоносный код сохраняется в конфигурации, он может выполняться повторно при каждом запуске фоновой задачи, обеспечивая устойчивый доступ. Это позволяет атакующему создавать новые учетные записи, читать данные или выполнять команды операционной системы через функции PostgreSQL, если они разрешены.
Условия успешной эксплуатации
Для успешной эксплуатации уязвимости атакующему необходимо выполнить несколько условий:
- Доступ к базе данных: Наличие сетевого доступа к инстансу PostgreSQL.
- Учетная запись: Учетная запись с правами
INSERTиUPDATEна таблицуpart_config(обычно это рольpartman_user).
- Конфигурация pg_partman: Расширение должно быть установлено и настроено для автоматического создания партиций по времени для таблиц с текстовыми или UUID-ключами.
- Запуск фоновой задачи: Фоновый процесс
pg_partman_bgwдолжен быть активен и периодически запускаться.
Возможный сценарий атаки
Атакующий получает доступ к базе данных под учетной записью с правами
partman_user. Он изменяет значение поля time_encoder в таблице part_config, вставляя SQL-запрос, который создает новую суперпользовательскую учетную запись или выполняет команду через pg_execute_server_program.В ожидании следующего цикла обслуживания, фоновый процесс pg_partman считывает измененную конфигурацию. При создании новой партиции процесс выполняет вставленный SQL-код. Атакующий получает подтверждение выполнения и доступ к базе данных с максимальными привилегиями.
Далее атакующий может использовать функции PostgreSQL для выполнения команд на хосте, если они разрешены политикой безопасности, или выгрузить чувствительные данные. Так как конфигурация не сбрасывается, доступ сохраняется и при последующих запусках фоновой задачи.
Есть ли публичный эксплойт
Официальные источники не содержат информации о публичных эксплойтах или подтвержденной эксплуатации в реальных атаках. Однако техническое описание уязвимости достаточно подробно, чтобы любой специалист мог самостоятельно составить рабочий эксплойт.
Отсутствие записей в каталоге CISA KEV и низкий EPSS-скор не означают, что уязвимость не может быть использована. Учитывая простоту атаки (запись строки в таблицу и ожидание фоновой задачи), риск эксплуатации высок для систем, где pg_partman настроен на автоматическое обслуживание.
Признаки эксплуатации
Специфичных индикаторов компрометации (IOC) для этой уязвимости в открытых источниках не опубликовано. Однако администраторы могут обратить внимание на следующие неспецифичные признаки:
- Аномальные записи в part_config: Значения в поле
time_encoder, которые не являются именами известных функций pg_partman.
- Неожиданные SQL-запросы: Запросы в логах PostgreSQL, выполняемые от имени роли
pg_partman_bgw, которые не соответствуют стандартным операциям создания партиций.
- Новые учетные записи: Появление новых суперпользовательских учетных записей в базе данных без соответствующих действий администратора.
- Выполнение команд: Записи в логах о вызове функций, выполняющих команды ОС (например,
pg_execute_server_program), если они разрешены.
Как обнаружить атаку
Для обнаружения атаки рекомендуется провести аудит конфигурации pg_partman и логов PostgreSQL.
- Проверка конфигурации: Выполните запрос к таблице
part_configи убедитесь, что значения в полеtime_encoderсоответствуют ожидаемым именам функций.
- Анализ логов: Просмотрите логи PostgreSQL на предмет аномальной активности роли
pg_partman_bgw. Обратите внимание на запросы, которые не связаны с созданием партиций.
- Аудит учетных записей: Проверьте список пользователей базы данных на наличие новых или измененных учетных записей с повышенными привилегиями.
- Мониторинг выполнения команд: Если разрешено выполнение команд ОС, настройте мониторинг вызовов соответствующих функций PostgreSQL.
Как проверить свою версию
Для проверки версии установленного пакета
pg-partman в Debian используйте следующие команды. Замените <имя-пакета> на pg-partman.
Bash:
cat /etc/debian_version
cat /etc/os-release
apt-cache policy pg-partman
dpkg-query -W -f='${Package} ${Version}\n' pg-partman
Сравните полученную версию с данными из раздела «Какие продукты и версии затронуты». Если версия ниже 5.5.0, система уязвима.
Исправление
Основным способом устранения уязвимости является обновление пакета
pg-partman до версии 5.5.0 или выше.- Для forky и sid: Выполните обновление через стандартные средства Debian:
apt update && apt upgrade pg-partman.
- Для bookworm и trixie: Официальных обновлений пока нет. Рассмотрите возможность ручного обновления до версии 5.5.0 из исходников или использования сторонних репозиториев, если это допустимо политикой безопасности.
- Альтернатива: Если обновление невозможно, временно отключите автоматическое создание партиций, удалив или изменив вредоносные значения в
part_config.
После обновления убедитесь, что фоновый процесс
pg_partman_bgw работает корректно и не выполняет вредоносный код.Временные меры защиты
Пока не выпущено официальное обновление для bookworm и trixie, можно применить следующие временные меры:
- Очистка конфигурации: Удалите или сбросьте значения в поле
time_encoderтаблицыpart_config, если они не являются стандартными именами функций.
- Ограничение прав: Ограничьте права роли
partman_userна изменение таблицыpart_config, если это не нарушает функциональность.
- Отключение фоновой задачи: Временно остановите фоновый процесс
pg_partman_bgw, если автоматическое создание партиций не критично для работы.
- Мониторинг: Усиленный мониторинг логов PostgreSQL и конфигурации pg_partman для выявления аномальной активности.
Как проверить устранение уязвимости
После применения исправлений необходимо убедиться, что уязвимость устранена.
- Проверка версии: Убедитесь, что установленная версия
pg-partmanравна 5.5.0 или выше.
- Тестирование: Создайте тестовую таблицу с текстовым ключом и попробуйте записать вредоносный SQL-код в
time_encoder. Убедитесь, что фоновый процесс не выполняет этот код.
- Аудит конфигурации: Проверьте, что значения в
part_configсоответствуют ожидаемым именам функций.
- Мониторинг: Продолжайте мониторинг логов PostgreSQL для выявления аномальной активности.
Вывод
CVE-2026-61781 представляет серьезную угрозу для систем, использующих pg_partman для автоматического управления партициями. Уязвимость позволяет атакующему с минимальными правами получить полный контроль над базой данных и, потенциально, над операционной системой.
Администраторам Debian на bookworm и trixie необходимо срочно принять меры по защите, так как официальных обновлений для этих веток пока нет. Для forky и sid рекомендуется обновить пакет до версии 5.5.0. В любом случае важно провести аудит конфигурации pg_partman и усилить мониторинг логов PostgreSQL.
Официальные источники
История обновлений статьи
- 20.09.2026 — Опубликована первая версия материала.
