
Минимальный honeypot для Redis, обнаруживающий эксплойты RediShell (CVE-2025-49844).
RediTrap — это минималистичный Redis-хоніпот, предназначенный для раннего обнаружения попыток эксплуатации
CVE-2025-49844 («RediShell»), критической уязвимости удаленного выполнения кода,
описанной исследователями Wiz Research. Эксплойт злоупотребляет 13-летней ошибкой use-after-free во
встроенном движке Lua: Redis сохранял имя Lua-чанка, не закрепляя его
в стеке, что позволяло циклу сборки мусора освободить строку, пока C-код всё ещё использовал указатель. Патч Redis
d5728cb
исправляет проблему, помещая имя чанка в стек Lua (через
setsvalue2s/incr_top) перед парсингом и извлекая его после, предотвращая
устаревший указатель и закрывая примитив RCE.
Поскольку опубликованный путь эксплуатации relies на отправке вредоносных Lua-скриптов через
EVAL, EVALSHA или SCRIPT LOAD, хоніпот фокусируется на выявлении этих
взаимодействий, притворяясь незапатченным узлом Redis.
6379PINGINFOAUTHHELLO), чтобы побудить
атакующих продолжить свой рабочий процесс.python3 reditrap.py --host 0.0.0.0 --port 6379 --log-file logs/redis-honeypot-events.ndjson
Используйте --verbose для дополнительного вывода в stdout во время разработки.
Соберите компактный образ (база Alpine):
docker build -t reditrap .
# или: podman build -t reditrap .
Запустите его с открытым портом Redis и смонтированным каталогом журналов на хосте:
mkdir -p honeypot-logs
docker run -d --name reditrap \
-p 6379:6379 \
-v "$(pwd)/honeypot-logs:/data" \
reditrap
Контейнер по умолчанию использует --host 0.0.0.0 --port 6379 --log-file /data/redis-honeypot-events.ndjson, поэтому журналы попадают на хост в
honeypot-logs/redis-honeypot-events.ndjson.
Podman работает аналогично (при необходимости добавьте флаг SELinux):
podman run -d --name reditrap \
-p 6379:6379 \
-v "$(pwd)/honeypot-logs:/data:Z" \
reditrap
Переопределите значения по умолчанию, добавив аргументы после имени образа, например:
docker run --rm -p 6379:6379 reditrap --redis-version 7.0.15 --log-file /data/attempts.ndjson
Каждый входящий запрос становится записью NDJSON. Подозрительная активность Lua включает эвристики для упрощения триажа. Например:
{
"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"
}
Сопоставьте журналы с сетевой телеметрией, чтобы отследить источник атаки и принять решение о ответных действиях.