
Недestructive проверщик уязвимостей PostgreSQL для CVE-2026-6471. Проверяет версию сервера и привилегии REPLICATION для выявления подверженности ошибке авторизации логического декодирования, с рекомендациями по устранению.
Защитный, неразрушающий инструмент проверки уязвимости CVE-2026-6471
CVE-2026-6471 — это уязвимость авторизации в PostgreSQL, затрагивающая подсистему логического декодирования.
Уязвимость может позволить роли PostgreSQL, обладающей привилегией REPLICATION, но не имеющей прав суперпользователя, вызвать загрузку сервером PostgreSQL библиотеки, контролируемой атакующим и доступной операционной системе учётной записи PostgreSQL.
Успешная эксплуатация может привести к выполнению произвольного кода с привилегиями серверного процесса PostgreSQL.
Этот репозиторий предоставляет безопасный детектирующий PoC, предназначенный для авторизованных оценок безопасности.
⚠️ Проверка не загружает вредоносную разделяемую библиотеку и не выполняет команды операционной системы.
| Свойство | Значение |
|---|---|
| CVE | CVE-2026-6471 |
| Продукт | PostgreSQL |
| Компонент | Логическое декодирование |
| CWE | CWE-862 — Отсутствие авторизации |
| CVSS v3.1 | 7.2 Высокий |
| Вектор атаки | Сеть |
| Сложность атаки | Низкая |
| Требуемые привилегии | Высокие |
| Взаимодействие с пользователем | Отсутствует |
| Конфиденциальность | Высокая |
| Целостность | Высокая |
| Доступность | Высокая |
CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H
При уязвимых условиях атакующий, уже имеющий учётную запись PostgreSQL с требуемой возможностью репликации, потенциально может пересечь границу привилегий между базой данных и операционной системой.
┌──────────────────────┐
│ Пользователь │
│ PostgreSQL │
│ REPLICATION = YES │
└──────────┬───────────┘
│
▼
┌──────────────────────┐
│ Логическое │
│ декодирование │
└──────────┬───────────┘
│
▼
┌──────────────────────┐
│ Отсутствие проверки │
│ авторизации │
└──────────┬───────────┘
│
▼
┌──────────────────────┐
│ Загрузка │
│ библиотеки │
└──────────┬───────────┘
│
▼
┌──────────────────────┐
│ Пользователь ОС │
│ PostgreSQL │
└──────────────────────┘
Фактическое влияние сильно зависит от привилегий и прав доступа к файловой системе учётной записи операционной системы PostgreSQL.
В бюллетене безопасности проекта PostgreSQL указаны следующие затронутые ветки:
| Ветка | Затронута | Исправлена |
|---|---|---|
| PostgreSQL 14 | < 14.24 | 14.24 |
| PostgreSQL 15 | < 15.19 | 15.19 |
| PostgreSQL 16 | < 16.15 | 16.15 |
| PostgreSQL 17 | < 17.11 | 17.11 |
| PostgreSQL 18 | < 18.6 | 18.6 |
Обновитесь до последнего выпуска безопасности, доступного для вашей ветки PostgreSQL.
Этот проект намеренно выполняет только неразрушающие проверки.
Проверка должна подтвердить:
REPLICATIONSELECT
version() AS postgres_version,
current_user AS current_user,
rolsuper AS is_superuser,
rolreplication AS has_replication
FROM pg_roles
WHERE rolname = current_user;
Пример вывода:
postgres_version : PostgreSQL 17.x
current_user : security_audit
is_superuser : f
has_replication : t
Уязвимая версия в сочетании с привилегией REPLICATION должна рассматриваться как требующая исправления.
PoC следует следующему рабочему процессу:
┌───────────────┐
│ Подключение │
│ к PostgreSQL │
└───────┬───────┘
│
▼
┌─────────────────┐
│ Получить версию │
│ сервера │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Проверить │
│ текущую роль │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Проверить │
│ REPLICATION │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Сравнить с │
│ исправленными │
│ версиями │
└────────┬────────┘
│
┌───────┴────────┐
▼ ▼
Потенциально Не
уязвима затронута
❌ Загружает контролируемый атакующим .so
❌ Выполняет произвольные SQL-нагрузки
❌ Выполняет команды операционной системы
❌ Запускает обратный шелл
❌ Изменяет конфигурацию PostgreSQL
❌ Изменяет содержимое файловой системы
❌ Создаёт постоянство
❌ Эксплуатирует производственные системы
Это делает проверку пригодной для контролируемой оценки уязвимостей и рабочих процессов инвентаризации.
Клонируйте репозиторий:
git clone https://github.com/<YOUR-USERNAME>/CVE-2026-6471.git
cd CVE-2026-6471
Установите требуемую зависимость Python:
python3 -m pip install psycopg2-binary
Запустите проверку:
python3 CVE-2026-6471.py
Пример:
╔════════════════════════════════════════════════════╗
║ CVE-2026-6471 SAFE CHECK ║
║ PostgreSQL Logical Decoding Audit ║
╚════════════════════════════════════════════════════╝
[+] Подключение к PostgreSQL...
[+] Версия сервера : PostgreSQL 17.x
[+] Текущая роль : security_audit
[+] Суперпользователь : False
[+] Репликация : True
[!] Версия PostgreSQL требует обновления безопасности
[!] Обнаружена привилегия REPLICATION
[!] ПОТЕНЦИАЛЬНО УЯЗВИМА
[!] Обновите PostgreSQL до исправленной версии.

Администраторы могут проверить роли с включённой репликацией с помощью:
SELECT
rolname,
rolsuper,
rolreplication
FROM pg_roles
WHERE rolreplication = true;
Просмотрите каждую возвращённую учётную запись.
Если учётной записи не требуются привилегии репликации, удалите ненужные привилегии в соответствии с вашими эксплуатационными требованиями.
Установите соответствующий исправленный выпуск:
14.24+
15.19+
16.15+
17.11+
18.6+
Предпочтительнее устанавливать последний доступный выпуск безопасности PostgreSQL, а не останавливаться на минимальной исправленной версии.
Определите учётные записи с возможностью репликации:
SELECT
rolname,
rolreplication
FROM pg_roles
WHERE rolreplication = true;
Удалите ненужные привилегии репликации:
ALTER ROLE <role_name> NOREPLICATION;
Выполняйте изменения привилегий только после подтверждения того, что роль не требуется для легитимной инфраструктуры репликации.
Уделите особое внимание:
SUPERUSER
REPLICATION
LOGIN
CREATEDB
CREATEROLE
Используйте принцип минимальных привилегий везде, где это возможно.
Упрощённая концептуальная реализация:
if postgres_version_is_affected:
if role_has_replication:
if not role_is_superuser:
report("POTENTIALLY VULNERABLE")
else:
report("AFFECTED VERSION - SUPERUSER CONTEXT")
else:
report("AFFECTED VERSION - REPLICATION NOT PRESENT")
else:
report("NOT AFFECTED")
Цель проверки — идентификация подверженности, а не эксплуатация.
| Результат | Значение |
|---|---|
| 🟢 НЕ ЗАТРОНУТА | PostgreSQL работает на исправленной версии |
| 🟡 ТРЕБУЕТСЯ ОБНОВЛЕНИЕ | Версия находится в затронутой ветке |
| 🟠 ОБНАРУЖЕНА РЕПЛИКАЦИЯ | Текущая роль имеет возможность репликации |
| 🔴 ПОТЕНЦИАЛЬНО УЯЗВИМА | Затронутая версия + соответствующая привилегия |
| ⚪ НЕДОСТАТОЧНЫЙ ДОСТУП | Сканер не может проверить требуемую информацию о роли |
REPLICATION. ИНТЕРНЕТ
│
▼
┌─────────────┐
│ Межсетевой │
│ экран │
└──────┬──────┘
│
▼
┌─────────────┐
│ PostgreSQL │
│ Сервер │
└──────┬──────┘
│
┌─────────┴─────────┐
▼ ▼
Минимальные Мониторинг
привилегии │
│ │
▼ ▼
Контроль ролей SIEM / Оповещения
Ограничьте сетевую доступность PostgreSQL и избегайте прямого предоставления сервисов базы данных ненадёжным сетям.
Рекомендуемая конфигурация для тестирования:
┌───────────────────────────────────┐
│ Изолированная лабораторная │
│ сеть │
│ │
│ ┌────────────┐ ┌────────────┐ │
│ │ Сканер │──▶│ PostgreSQL │ │
│ │ Машина │ │ Тестовый │ │
│ └────────────┘ │ хост │ │
│ └────────────┘ │
│ │
│ Нет производственных систем │
└───────────────────────────────────┘
Используйте одноразовую установку PostgreSQL или выделенную лабораторную среду при проверке инструментов безопасности.
Этот проект предназначен строго для оборонительных исследований безопасности, оценки уязвимостей и авторизованного тестирования.
Включённая методология предназначена для выявления потенциально уязвимых установок PostgreSQL без использования уязвимости в качестве оружия.
Не используйте этот проект против систем, которыми вы не владеете или на оценку которых у вас нет явного разрешения.
Автор не несёт ответственности за неправильное использование, ущерб, потерю данных, прерывание обслуживания или несанкционированный доступ, возникшие в результате использования этого проекта.
Исследования в области кибербезопасности • Анализ уязвимостей • Защитные инструменты
Research → Verify → Document → Remediate
Вклад приветствуется.
При отправке улучшений:
Если этот проект помог вашим исследованиям в области безопасности, рассмотрите возможность поставить ему ⭐