
Доказательство концепции для переполнения целого числа при распаковке Lua в Redis (CVE-2025-46817), демонстрирующее переполнение стека и потенциальное удалённое выполнение кода (RCE) на Redis 8.2.1.
unpack целочисленное переполнение (потенциальный RCE)PoC целочисленного переполнения unpack в Redis Lua, вызывающий разрастание стека и сбой на версии 8.2.1.
Redis 8.2.1 поставляется с Lua 5.1, в котором реализация unpack вычисляет количество результатов с использованием знаковых целых чисел. Специально подобранные начальные/конечные индексы вызывают переполнение арифметики, обходят lua_checkstack и заставляют Lua помещать в стек миллиарды результатов. В сочетании с переполнением индексов таблицы это может повредить память в куче и привести к RCE.
redis-cliCVE-2025-46817.lua – вызывает unpack с диапазоном, который переполняет знаковую арифметику.redis-cli -h localhost -p 6379 --eval CVE-2025-46817.lua
Ожидаемый результат:
На версии 8.2.1 сервер обычно завершает соединение или аварийно завершает работу из-за чрезмерного роста стека. Redis 8.2.2 (коммит fc9abc775e308374f667fdf3e723ef4b7eb0e3ca) отклоняет вызов с сообщением "ERR Error running script (too many results to unpack)".
Обновитесь до Redis 8.2.2 или новее, где усилены luaB_unpack и luaH_getnum, либо отключите Lua-скриптинг для недоверенных пользователей.