Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

ЛентыКонтактыКонфиденциальность© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2026-2005 — PoC уязвимости переполнения буфера кучи в PostgreSQL pgcrypto, демонстрирующий CVE-2026-2005: RCE с низкими привилегиями и повышение привилегий до суперпользователя посредством специально сформированного OpenPGP-пакета. | Kitploit
Инструменты/GitHubGitHub/open-flaw/cve-2026-2005
Повышение привилегийАнализ уязвимостейЭксплуатацияПост-эксплуатацияАнализ Бинарных ФайловБезопасность Баз ДанныхЭксплуатация Бинарных Файлов
GitHubopen-flaw/cve-2026-2005

CVE-2026-2005

PoC уязвимости переполнения буфера кучи в PostgreSQL pgcrypto, демонстрирующий CVE-2026-2005: RCE с низкими привилегиями и повышение привилегий до суперпользователя посредством специально сформированного OpenPGP-пакета.

Репозиторий
332 месяцев назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

CVE-2026-2005 — Переполнение кучи в pgcrypto PostgreSQL

Целевой коммит: 4b324845ba5d24682b9b3708a769f00d160afbd7 (PostgreSQL 18.1 — уязвимая версия)

Сводка

ПолеДетали
CVECVE-2026-2005
ТипПереполнение буфера в куче
Компонентcontrib/pgcrypto/pgp-pubdec.c — pgp_parse_pubenc_sesskey()
ВоздействиеRCE от имени пользователя ОС, под которым запущен PostgreSQL
CVSS8.8 (AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H)
Требуемая аутентификацияНизкая — любой аутентифицированный пользователь с привилегией CREATE
Затронутые версииPostgreSQL 14.0–14.20, 15.0–15.15, 16.0–16.11, 17.0–17.7, 18.0–18.1
Исправлено в14.21, 15.16, 16.12, 17.8, 18.2 (12 февраля 2026 г.)
Архитектураaarch64 (ARM64) — смещения в куче и раскладка MBuf зависят от архитектуры/glibc

Быстрый старт

# Сборка и запуск PostgreSQL 18.1 (уязвимая версия)
docker compose up -d --build

# Ожидание готовности
docker compose logs -f postgres
# Нажмите Ctrl+C, когда увидите "database system is ready to accept connections"

# Одноразовая настройка: копируем бинарник postgres для офлайн-разбора символов
docker cp cve-2026-2005-poc:/usr/local/pgsql/bin/postgres ./postgres

# Установка зависимостей Node
npm install

# Запуск полной цепочки эксплойта RCE (чистый SQL — без взаимодействия с Docker)
node exploit.js --cmd "id"

# С подробным выводом
node exploit.js --cmd "id" --verbose

# Выполнение произвольной команды
node exploit.js --cmd "whoami"

Цепочка эксплойта (7 этапов)

Этап 1: Утечка указателя кучи
  └─ Повреждение заголовка чанка mdst → разбор сообщения об ошибке pfree()

Этап 2: Произвольное чтение (многооконное сканирование)
  └─ Перезапись mdst->data → сканирование памяти рядом с утёкшим указателем

Этап 3: Сбор кандидатов-указателей
  └─ Сканирование дампов кучи на предмет 8-байтовых значений, похожих на указатели

Этап 4: Определение базового адреса PIE
  └─ Голосование утёкших адресов по смещениям символов ELF (группировка
     по смещению страницы, офлайн — символы разбираются из локальной копии бинарника)

Этап 5: Проверка PIE
  └─ Произвольное чтение CurrentUserId по кандидатному базовому адресу → сравнение с OID сессии

Этап 6: Произвольная запись
  └─ Подделка MBuf-структур msrc + mdst → перезапись CurrentUserId → 10 (суперпользователь)

Этап 7: Выполнение команд
  └─ COPY FROM PROGRAM → произвольная команда ОС от имени пользователя postgres

Структура файлов

CVE-2026-2005/
├── Dockerfile              # Сборка PostgreSQL 18.1 из исходников
├── docker-compose.yml      # Сервис PostgreSQL с автоматическим перезапуском
├── init.sh                 # Точка входа — initdb + конфигурация прослушивания
├── README.md               # Этот файл
└── poc/
    ├── package.json        # Зависимости Node.js (pg)
    ├── exploit.js          # Полный 7-этапный эксплойт RCE (Node.js)
    ├── verify.sh           # Быстрая проверка на основе shell-скрипта
    └── test-pgcrypto.sql   # SQL-тест загрузки pgcrypto

Ручная сборка (macOS / Linux)

git clone https://github.com/postgres/postgres.git
cd postgres
git checkout 4b324845ba5d24682b9b3708a769f00d160afbd7
./configure \
    --prefix="$HOME/projects/pg/pgsql" \
    --with-libxml \
    --with-libxslt \
    --enable-debug \
    --with-ssl=openssl
make -j$(nproc)
make install-world-bin

Требования

  • Docker + Docker Compose (хост на aarch64, например, Mac на Apple Silicon)
  • Node.js ≥ 18
  • ~2 ГБ дискового пространства для сборки PostgreSQL
  • Сборка занимает ~3–5 минут при первом запуске
  • tmux (необязательно — нужен только с флагом --gdb)

Детали уязвимости

Ошибка находится в pgp_parse_pubenc_sesskey() в contrib/pgcrypto/pgp-pubdec.c. При разборе пакета OpenPGP Public-Key Encrypted Session Key (тег 1):

  1. Код считывает длину MPI (многоразрядного целого) из пакета
  2. Выделяет буфер на основе этой длины
  3. Расшифровывает MPI алгоритмом RSA в буфер
  4. Считывает длину ключа сессии из расшифрованных данных без проверки границ
  5. memcpy копирует данные ключа сессии в буфер фиксированного размера на основе непроверенной длины

memcpy может записать за границу буфера кучи, повреждая соседние метаданные или данные кучи, что приводит к произвольному выполнению кода.

Детали цепочки эксплойта

  1. Утечка указателя кучи — Повреждение заголовка чанка malloc; разбор сообщения об ошибке pfree() для извлечения адреса кучи mdst->data.
  2. Определение базового адреса PIE — Чтение /proc/<pid>/maps из контейнера Docker для поиска адреса загрузки бинарника postgres во время выполнения.
  3. Произвольная запись — Подделка обеих MBuf-структур msrc (источник) и mdst (назначение) через переполнение кучи. msrc указывает на встроенный пакет symenc, содержащий OID суперпользователя (10); mdst указывает на CurrentUserId - 4 (с учётом 4-байтового заголовка SET_VARSIZE).
  4. Повышение привилегий — С CurrentUserId = 10 (bootstrap-суперпользователь) выполняется COPY FROM PROGRAM для запуска произвольных команд ОС.

Параметры CLI

ФлагПо умолчаниюОписание
--cmdidКоманда ОС для выполнения после успешного эксплойта
--key-size3072Размер ключа RSA в битах
--host127.0.0.1Хост PostgreSQL
--port5432Порт PostgreSQL
--userpostgresПользователь базы данных
--password(пусто)Пароль базы данных
--dbnamepostgresИмя базы данных
--binary./postgresПуть к ELF-бинарнику postgres для символов
--scan-offsetавтоПереопределение смещения сканирования кучи от утёкшего указателя
--verboseвыклВключить подробный отладочный вывод
--gdbвыклПодключить GDB через tmux в точке переполнения

Примечания

  • Расширение pgcrypto является доверенным — любой пользователь с привилегией CREATE (не суперпользователь) может установить его, что делает уязвимость эксплуатируемой с низкими привилегиями.
  • Сборка Docker включает --enable-debug для упрощения отладки с помощью gdb.
  • Смещения кучи (SRC_CHUNK_OFFSET=100, DST_CHUNK_OFFSET=172) специфичны для aarch64 + glibc — для других архитектур/аллокаторов нужны другие смещения.
  • Базовый адрес PIE определяется из утёкших указателей кучи через голосование по смещениям символов, затем подтверждается чтением CurrentUserId через тот же примитив произвольного чтения.

Ссылки

  • Консультация по безопасности PostgreSQL
  • Технический разбор ZeroDay.Cloud
  • Запись NVD
Скачать инструмент