
PoC-эксплойт для Redis 8.2.1: use-after-free в Lua-парсере, гонка со сборщиком мусора с помощью специально созданных вызовов loadstring для удалённого выполнения кода.
Гонка GC за имя Lua-chunk'а, приводящая к use-after-free и удалённому выполнению кода в Redis 8.2.1.
Redis встраивает Lua 5.1 для скриптов. В версиях до 8.2.1 функция luaY_parser НЕ закрепляет строку имени chunk'а в стеке Lua перед вызовом лексера. Специально сформированный скрипт может инициировать сборку мусора, пока парсер всё ещё ссылается на освобождённую строку, что приводит к UAF и последующему выполнению нативного кода.
redis-cliCVE-2025-49844.lua – «долбит» парсер тысячами вызовов loadstring и именем chunk'а с включённой GC, чтобы выиграть гонку.while redis-cli -h localhost -p 6379 --eval CVE-2025-49844.lua >/dev/null; do
printf '.'
done
Ожидаемый результат:
На уязвимых сборках процесс Redis в конечном счёте падает или обрывает соединение. В исправленной версии 8.2.2 (коммит d5728cb5795c966c5b5b1e0f0ac576a7e69af539) имя chunk'а закрепляется, и скрипт выполняется безвредно.
Обновитесь до Redis 8.2.2 или новее, либо отключите написание Lua-скриптов для недоверенных пользователей.