
Эксплойт для Redis 8.2.1, позволяющий обойти песочницу Lua через устаревшие API и изменяемые метатаблицы, что обеспечивает выполнение команд от имени других пользователей.
Обход песочницы через устаревшие Lua API и изменяемые метатаблицы в Redis 8.2.1.
Redis 8.2.1 оставляет устаревшие встроенные функции Lua (getfenv, setfenv, newproxy) доступными для скриптов и не блокирует метатаблицы для базовых типов. Злоумышленник может внедрить методы в общие метатаблицы, перехватить привилегированные окружения и выполнять команды с правами другого пользователя.
redis-cliCVE-2025-46818.lua – проверяет наличие устаревших встроенных функций, модифицирует метатаблицу строк и предоставляет вспомогательную функцию.# Настройка
redis-cli -h localhost -p 6379 --eval CVE-2025-46818.lua
# Вызов внедрённой вспомогательной функции (при условии, что у пользователя-жертвы более высокие привилегии):
redis-cli -h localhost -p 6379 EVAL "return ('test').escalate()" 0
Ожидаемый результат:
В версии 8.2.1 исходный скрипт сообщает об устаревших API как true и подтверждает изменение метатаблицы. Последующий вызов возвращает вывод ACL WHOAMI (или любой другой привилегированной команды, которую вы подставите). Redis 8.2.2 удаляет эти API по умолчанию, делает базовые метатаблицы доступными только для чтения и регистрирует попытки в журнале.
Обновитесь до Redis 8.2.2 или более поздней версии, либо отключите Lua для недоверенных пользователей или запустите с параметром lua-enable-deprecated-api no.