¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!
CVE-2025-49844 — Escáner y guía educativa para CVE-2025-49844 (RediShell), una vulnerabilidad de use-after-free en el scripting Lua de Redis. Comprueba la exposición de servidores Redis, proporciona pasos de remediación y explica la mecánica del exploit con fines educativos. | Kitploit
Escáner y guía educativa para CVE-2025-49844 (RediShell), una vulnerabilidad de use-after-free en el scripting Lua de Redis. Comprueba la exposición de servidores Redis, proporciona pasos de remediación y explica la mecánica del exploit con fines educativos.
¡Hola! Esta es una herramienta sencilla que hice para ayudar a la gente a comprobar si sus servidores Redis son vulnerables a este fallo. No está pensada para ataques reales, solo para aprender y proteger tus propias cosas.
¿De Qué Va Todo Esto?
Muy bien, gente querida, aquí tenemos uno de los fallos más interesantes de 2025, el CVE-2025-49844. Básicamente, si alguien puede ejecutar scripts Lua en tu servidor Redis, puede obtener acceso a la memoria.
Lo Importante
¿Qué tan grave es?: Jodido (9.9/10)
¿A quién afecta?: A cualquiera que use Redis versión 8.2.1 o anterior
¿Qué ocurre?: Ejecución de código
¿Cómo lo hacen?: Mediante scripts Lua (que Redis usa para cosas avanzadas de bases de datos)
¡Empecemos!
Paso 1: Compila Esta Cosa
root@kitploit:~
# Primero, prepara lo de Go
cd scanner
go mod tidy
# Luego compila el escáner
go build -o rscan redis-scanner.go
Paso 2: Comprueba Tus Servidores
root@kitploit:~
# Comprueba un servidor
./rscan -host tu-servidor.com -port 6379
# Comprueba con contraseña (si tienes una)
./rscan -host tu-servidor.com -port 6379 -auth tucontraseña
# Comprueba varios a la vez
./rscan -host servidor1.com,servidor2.com,servidor3.com
# O comprueba desde un archivo
./rscan -file hosts.txt
Paso 3: Arregla Lo Que Está Roto
root@kitploit:~
# Desactiva los scripts Lua (esto detiene el ataque)
redis-cli ACL SETUSER default -@scripting
# O simplemente actualiza Redis a la versión más reciente
¿Qué Significan los Resultados?
🚨 ¡PELIGRO! - Tu Redis es vulnerable (versión antigua + scripts Lua funcionan)
🛡️ ¡Bien! - Tu Redis está protegido (Lua desactivado o versión más nueva)
✅ ¡Genial! - Tu Redis está seguro (versión 8.2.2 o posterior)
❌ ¡Ups! - No se puede conectar o algo salió mal
Cómo Funciona Este Fallo de Memoria
El Problema
Esto es lo que se llama un fallo de "use-after-free" (uso después de liberar). Básicamente, Redis tiene un sistema de gestión de memoria que a veces se confunde sobre qué memoria ya ha limpiado.
Cómo Debería Funcionar:
📝 Redis crea algunos datos en memoria
🔍 Usa esos datos para algo
🗑️ Limpia la memoria cuando termina
✅ Todo está seguro y en orden
Cómo Funciona Realmente (El Fallo):
📝 Redis crea algunos datos en memoria
🔍 Usa esos datos para algo
🗑️ Limpia la memoria
🔍 Intenta usar los datos de nuevo (¡pero ya no están!)
💥 Todo se rompe y eso se explota por diversión ;)
Cómo Usan Esto los Hackers
Qué Atacan: El sistema de scripts Lua de Redis
Comandos Que Usan: EVAL y EVALSHA (estos ejecutan scripts Lua)
Qué Quieren: Sobrescribir memoria y ejecutar código arbitrario
Cómo Arreglar Esto
Haz Esto Ahora Mismo (Primeras 24 Horas)
Encuentra todos tus servidores Redis (puede que tengas más de los que crees)
Comprueba sus versiones (cualquier 8.2.1 o anterior está jodida, ¡tendrás que actualizar!)
Desactiva los scripts Lua (esto detiene el ataque inmediatamente)
Planifica tu actualización (esta es la solución real)
Solución Rápida (¡Detén el Ataque Ya!)
root@kitploit:~
# Desactiva los scripts Lua (esto detiene el ataque)
redis-cli ACL SETUSER default -@scripting
# O edita tu archivo redis.conf y añade esta línea:
disable-commands eval evalsha
# Luego reinicia Redis
sudo systemctl restart redis
Bloquea Tu Red
root@kitploit:~
# Solo permite que IPs específicas se conecten a Redis
iptables -A INPUT -p tcp --dport 6379 -s 10.0.0.0/8 -j ACCEPT
iptables -A INPUT -p tcp --dport 6379 -j DROP
# Haz que Redis solo escuche en interfaces de red específicas
bind 127.0.0.1 10.0.0.100
Configura Contraseñas Adecuadas
root@kitploit:~
# Establece una contraseña fuerte
redis-cli CONFIG SET requirepass "fuckredis1234ilovehacking!"
# Crea usuarios con permisos limitados
redis-cli ACL SETUSER appuser on >password +@read +@write -@scripting
redis-cli ACL SETUSER readonly on >password +@read -@scripting
Actualiza Redis (La Solución Real)
root@kitploit:~
# Haz una copia de seguridad de tus datos primero (¡hazlo siempre!)
sudo cp -r /var/lib/redis /var/lib/redis.backup.$(date +%Y%m%d)
# Actualiza Redis a la versión corregida
# En Ubuntu/Debian:
sudo apt update && sudo apt install redis-server=8.2.2*
# En CentOS/RHEL:
sudo yum update redis
# Comprueba que funcionó
redis-server --version
Prueba Que Tu Solución Funciona Realmente
Asegúrate de Que los Scripts Estén Bloqueados
root@kitploit:~
# Esto debería fallar si tu solución funciona
redis-cli -a "TuContraseña" EVAL "return 'test'" 0
# Debería decir: (error) ERR unknown command 'EVAL'
Comprueba Tu Seguridad de Red
root@kitploit:~
# Mira si Redis es accesible desde la red
nmap -p 6379 tu-servidor-redis
# Prueba si se requiere contraseña
redis-cli -h tu-servidor-redis -p 6379 ping
# Debería pedir contraseña
Cómo Detectar Este Ataque
Señales en Tu Red
Patrones aumentados de uso de scripts Lua
Alguien enviando scripts muy grandes o complicados
Muchos scripts ejecutándose muy rápido
Scripts que son obviamente sospechosos
Señales en Tu Servidor
Redis se bloquea o reinicia constantemente
El uso de memoria sube y/o baja de forma extraña
Redis haciendo conexiones de red extrañas
Archivos accedidos que no deberían serlo
Revisa Tus Registros
root@kitploit:~
# Busca actividad extraña de scripts Lua
grep -i "eval\|evalsha" /var/log/redis/redis.log
# Comprueba intentos de inicio de sesión fallidos
grep -i "auth" /var/log/redis/redis.log
# Busca errores de scripts
grep -i "script" /var/log/redis/redis.log
¿Qué Tan Difícil Es Explotar Esto?
Es Bastante Complicado (si no sabes lo que está pasando)
Trucos de Memoria: Tienes que manipular cómo Redis gestiona la memoria
Habilidades en Lua: Necesitas ser bueno escribiendo scripts Lua
Sincronización Perfecta: Tienes que activar el fallo en el momento exacto
Cómo Son los Exploits Reales
Crear Patrones de Memoria Extraños: Escribir scripts Lua que hagan que Redis organice la memoria de formas específicas
Engañar al Proceso de Limpieza: Hacer que Redis limpie la memoria en el momento equivocado
Romper la Memoria: Hacer que Redis use memoria que ya ha sido eliminada
Ejecutar Tu Código: Usar la memoria rota para ejecutar lo que quieras
¿Qué Tan Grave Es Realmente?
Qué Pasa Si Te Hackean
Toma de Control Total: Los hackers pueden ejecutar lo que quieran en tu servidor
Todos Tus Datos: Pueden ver todo en tu base de datos Redis
Propagación a Otros Servidores: Podrían usar tu servidor para atacar otras cosas
Permanecer Ocultos: Pueden mantener el acceso incluso después de que creas que lo has arreglado
Qué Significa Esto Para Tu Negocio
Fuga de Datos: Toda tu información sensible podría ser robada
Todo Se Rompe: Tu servicio Redis podría dejar de funcionar
Problemas Legales: Podrías ser multado por no proteger los datos
Nadie Confía en Ti: Los clientes podrían irse si se enteran
Vamos a lo técnico
Qué Partes de Redis Están Rotas
El motor de scripts Lua (comandos eval y evalsha)
Cómo Redis gestiona la memoria
El sistema de recolección de basura (limpia memoria no utilizada)
Cómo Se Rompe la Memoria
El fallo ocurre cuando:
Creas patrones específicos de objetos en Lua
Manipulas cómo Redis cuenta las referencias a la memoria
Fuerzas a Redis a limpiar la memoria en el momento equivocado
Explotas el momento en que Redis gestiona la memoria
Qué Versiones Están Afectadas
Redis versión 8.2.1 y anteriores
Cualquier versión que tenga los scripts Lua activados
Este fallo ha existido durante unos 13 años (¡uy!)
Cómo Son los Exploits (Para Aprender)
Estructura Básica (Esto No Funcionará Realmente)
root@kitploit:~
-- Esto es solo para mostrarte cómo es la estructura
local function create_memory_pattern()
-- Crea objetos que interfieran con la limpieza de memoria de Redis
local objects = {}
for i = 1, 1000 do
objects[i] = {data = "pattern_" .. i}
end
return objects
end
local function trigger_gc()
-- Fuerza a Redis a limpiar la memoria en el momento equivocado
collectgarbage("collect")
-- Aquí es donde ocurre el fallo de memoria
end
-- Estructura principal del ataque
local objects = create_memory_pattern()
-- Manipula las referencias de memoria
-- Fuerza la recolección de basura
-- Usa la memoria rota para ejecutar código
Cómo Protegerte
Bloquea Tu Red
Configura reglas de firewall
No dejes que Redis hable con todo internet
Vigila tu tráfico de red
Activa el registro de eventos
Controla Quién Puede Acceder
Usa contraseñas fuertes
Configura permisos de usuario (ACLs)
Solo da a la gente el acceso que necesita
Revisa regularmente quién tiene acceso
Vigila los Problemas
Revisa tus registros
Monitorea cómo está funcionando Redis
Presta atención a comportamientos extraños
Ten un plan para cuando algo salga mal
¿Quieres Probar Esto de Forma Segura?
Si quieres ver cómo funciona esto sin romper nada real, puedes usar Docker:
root@kitploit:~
# Inicia un Redis de prueba (este es vulnerable)
docker run -d --name redis-test -p 6379:6379 redis:6.0
# Pruébalo
cd scanner
./rscan -host localhost -port 6379
# Detén el vulnerable y inicia uno corregido
docker stop redis-test
docker run -d --name redis-fixed -p 6379:6379 redis:6.0 redis-server --rename-command EVAL "" --rename-command EVALSHA ""
./rscan -host localhost -port 6379
# Limpia cuando termines
docker stop redis-fixed && docker rm redis-fixed
Cosas Avanzadas (Si Las Quieres)
Todas las Opciones
root@kitploit:~
cd scanner
./rscan --help
Escanear Múltiples Servidores
Crea un archivo hosts.txt así:
root@kitploit:~
# Pon tus servidores aquí
servidor1.com
servidor2.com:6380
192.168.1.100
redis.ejemplo.com:6379
Hazlo Más Rápido
root@kitploit:~
# Usa más workers para escanear más rápido (si tienes muchos servidores)
./rscan -host servidor1.com,servidor2.com -workers 20
Lo Que Necesitas
Go 1.21+ (para compilar el escáner)
redis-cli (para conectarte a Redis)
Docker (opcional, para pruebas seguras)
Si Tu Actualización Rompe Todo
root@kitploit:~
# Vuelve a tu copia de seguridad
sudo systemctl stop redis
sudo rm -rf /var/lib/redis
sudo cp -r /var/lib/redis.backup.$(date +%Y%m%d) /var/lib/redis
sudo systemctl start redis
Asuntos Legales
Esto es solo para aprender y proteger tus propias cosas. No lo uses para hackear los servidores de otras personas: eso es ilegal. No seas tonto.