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

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

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-пакета.

Репозиторий
9 дней назадЕщё не проверено

Популярное

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

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

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

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

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

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

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

root@kitploit:~
# Build and start PostgreSQL 18.1 (vulnerable)
docker compose up -d --build

# Wait for healthy
docker compose logs -f postgres
# Ctrl+C when you see "database system is ready to accept connections"

# Install node deps
npm install

# Run the full RCE exploit chain
node exploit.js --cmd "id"

# With verbose output
node exploit.js --cmd "id" --verbose

# Execute a custom command
node exploit.js --cmd "whoami"

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

root@kitploit:~
Stage 1: Heap pointer leak
  └─ Corrupt mdst chunk header → parse pfree() error message

Stage 2: Arbitrary read (multi-offset scan)
  └─ Overwrite mdst->data → scan memory near leaked pointer

Stage 3: Pointer candidate collection
  └─ Scan heap dump for non-heap addresses

Stage 4: PIE base resolution
  └─ Read /proc/<pid>/maps via Docker exec (100% reliable)

Stage 5: (skipped — PIE base is known from maps)

Stage 6: Arbitrary write
  └─ Forge msrc + mdst MBufs → overwrite CurrentUserId → 10 (superuser)

Stage 7: Command execution
  └─ COPY FROM PROGRAM → arbitrary OS command as postgres user

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

root@kitploit:~
CVE-2026-2005/
├── Dockerfile              # Builds PostgreSQL 18.1 from source
├── docker-compose.yml      # PostgreSQL service with auto-restart
├── init.sh                 # Entrypoint — initdb + listen config
├── README.md               # This file
└── poc/
    ├── package.json        # Node.js dependencies (pg)
    ├── exploit.js          # Full 7-stage RCE exploit (Node.js)
    ├── verify.sh           # Shell-based quick verification
    └── test-pgcrypto.sql   # SQL-only test of pgcrypto loading

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

root@kitploit:~
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. Утечка указателя кучи — Повреждаем заголовок chunk 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 (начальный суперпользователь) выполняем COPY FROM PROGRAM для запуска произвольных команд ОС.

Параметры командной строки

Примечания

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

Ссылки

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