В мае 2026 года разработчики Redis выпустили срочные исправления для критической уязвимости, которая получила идентификатор CVE-2026-23631 и неофициальное название "DarkReplica". Проблема таится в подсистеме репликации - механизме, который синхронизирует данные между серверами. При определённых условиях злоумышленник, уже имеющий учётные данные для подключения, может удалённо исполнить произвольный код и полностью захватить сервер.
Уязвимость CVE-2026-23631
Уязвимость обнаружил исследователь Йони Шерец в ходе соревнования ZeroDay.Cloud 2025, которое проходило в Лондоне в конце прошлого года. За демонстрацию рабочего эксплойта он получил 30 тысяч долларов.
Чтобы понять суть угрозы, нужно разобраться в двух ключевых механизмах Redis. Во-первых, это встроенный движок Lua - популярный язык сценариев, на котором пишутся серверные функции. В Redis существуют две модели выполнения Lua: старая (через команды EVAL/EVALSHA) и новая, которая называется "функции" и использует команды FUNCTION LOAD и FCALL. Именно вторая модель стала центром атаки.
Во-вторых, это подсистема репликации. С помощью команды SLAVEOF администратор может превратить один сервер Redis в копию другого (так называемого "ведущего"). При полной синхронизации ведущий отправляет ведомому специальный файл - RDB, который содержит все данные, включая зарегистрированные Lua-функции.
Проблема возникает из-за того, как Redis обрабатывает долго выполняющиеся Lua-скрипты. Redis однопоточный, поэтому если скрипт зациклится, сервер перестанет отвечать. Чтобы этого избежать, разработчики встроили механизм проверки: каждые 100 тысяч инструкций Lua-движок вызывает специальную функцию, которая обрабатывает входящие события. Это позволяет, например, выполнить команду KILL для прерывания скрипта.
Но в ходе этой обработки Redis принимает не только команды от обычных клиентов, но и трафик репликации от ведущего сервера. И тут никак не проверяется, выполняется ли в данный момент Lua-функция. Если злоумышленник зарегистрирует медленную функцию с бесконечным циклом, а затем, дождавшись тайм-аута, инициирует полную синхронизацию со своего подконтрольного сервера, то при обработке RDB-файла Redis очистит старый контекст Lua: удалит все движки, включая саму работающую функцию. Управление возвращается в уже освобождённую область памяти - возникает классическая ошибка "использование после освобождения" (use-after-free, UAF). Дальше атакующий может манипулировать памятью и подменить важные указатели, в конечном счёте получив возможность выполнить произвольный код.
Реализация атаки довольно сложна. Она требует аккуратного управления кучей, утечки адресов кучи с помощью стандартных Lua-функций вроде tostring() и замены освобождённых объектов на подконтрольные строки. После стабилизации виртуальной машины с помощью дополнительных сопрограмм (корутин) эксплойт строит примитивы произвольного чтения и записи памяти. Один из надёжных путей к выполнению кода - перезапись указателя на собственную функцию распределения памяти lua_State->l_G->frealloc на системную библиотечную функцию system(). Когда Lua-функция попытается выделить память, она фактически вызовет system() с аргументом, который злоумышленник может контролировать - например, командой оболочки.
Уязвимость затрагивает все поддерживаемые ветки Redis: с 7.2.0 по 7.2.13, с 7.4.0 по 7.4.8, с 8.2.0 по 8.2.5, с 8.4.0 по 8.4.2 и с 8.6.0 по 8.6.2. Разработчики выпустили исправления 5 мая 2026 года в версиях 7.2.14, 7.4.9, 8.2.6, 8.4.3 и 8.6.3.
Несмотря на то что для эксплуатации нужны действительные учётные данные, риск крайне серьёзен. Redis широко применяется в облачных и микросервисных архитектурах, часто с ослабленной аутентификацией или стандартными паролями. Атака может стать первым шагом для латерального перемещения по инфраструктуре и полной компрометации. Эксперты рекомендуют немедленно обновить Redis до актуальной версии и дополнительно ограничить возможность смены конфигурации репликации, отключить ненужные Lua-функции и усилить контроль доступа.
Ссылки
- https://www.cve.org/CVERecord?id=CVE-2026-23631
- https://www.zeroday.cloud/blog/redis-cve-2026-23631-dark-replica
- https://github.com/redis/redis/security/advisories/GHSA-8ghh-qpmp-7826
- https://github.com/redis/redis/releases/tag/8.6.3