
Mínimo honeypot de Redis que detecta explotaciones de RediShell (CVE-2025-49844).
RediTrap es un honeypot minimalista de Redis diseñado para detectar intentos tempranos de explotar
CVE-2025-49844 ("RediShell"), la vulnerabilidad crítica de ejecución remota de código
descrita por Wiz Research. El exploit abusa de un error de use-after-free de 13 años en
el motor Lua integrado: Redis almacenaba el nombre del chunk de Lua sin antes
anclarlo en la pila, lo que permitía que un ciclo de recolección de basura reclamara la
cadena mientras el código C aún usaba el puntero. El parche de Redis
d5728cb
corrige el problema empujando el nombre del chunk a la pila de Lua (mediante
setsvalue2s/incr_top) antes de analizarlo y sacándolo después, evitando
el puntero obsoleto y cerrando la primitiva de RCE.
Debido a que la ruta de explotación publicada depende de enviar scripts Lua maliciosos mediante
EVAL, EVALSHA o SCRIPT LOAD, el honeypot se centra en exponer esas
interacciones mientras finge ser un nodo Redis sin parchear.
6379 por defecto) y habla un pequeño subconjunto
de RESP para que las sondas básicas tengan éxito (PING, INFO, AUTH, etc.).HELLO) para animar
a los atacantes a continuar su flujo de trabajo.python3 reditrap.py --host 0.0.0.0 --port 6379 --log-file logs/redis-honeypot-events.ndjson
Usa --verbose para registro adicional en stdout durante el desarrollo.
Construye una imagen compacta (base Alpine):
docker build -t reditrap .
# o: podman build -t reditrap .
Ejecútala con el puerto de Redis expuesto y el directorio de registros montado en el host:
mkdir -p honeypot-logs
docker run -d --name reditrap \
-p 6379:6379 \
-v "$(pwd)/honeypot-logs:/data" \
reditrap
El contenedor usa por defecto --host 0.0.0.0 --port 6379 --log-file /data/redis-honeypot-events.ndjson, por lo que los registros llegan al host en
honeypot-logs/redis-honeypot-events.ndjson.
Podman funciona de la misma manera (añade la bandera de SELinux si corresponde):
podman run -d --name reditrap \
-p 6379:6379 \
-v "$(pwd)/honeypot-logs:/data:Z" \
reditrap
Anula los valores por defecto añadiendo argumentos después del nombre de la imagen, por ejemplo:
docker run --rm -p 6379:6379 reditrap --redis-version 7.0.15 --log-file /data/attempts.ndjson
Cada solicitud entrante se convierte en una entrada NDJSON. La actividad Lua sospechosa incluye heurísticas para facilitar el triaje. Por ejemplo:
{
"action": "lua_eval",
"args": ["return debug.getregistry()", "0"],
"command": "EVAL",
"info": {
"arg_count": 2,
"heuristics": {
"length": 26,
"matched_tokens": ["debug."],
"preview": "return debug.getregistry()"
},
"key_count": "0",
"script_hash": "763200efa15885c9fa970d45cc2b11711c739c13"
},
"remote": {"host": "203.0.113.42", "port": 58231},
"timestamp": "2025-10-07T15:04:12.123456+00:00"
}
Combina los registros con telemetría de red para rastrear la fuente atacante y decidir las acciones de respuesta.