Найден новый способ перехватить управление сервером Redis: уязвимость "DarkReplica" позволяет выполнить код через подсистему репликации

redis

В мае 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-функции и усилить контроль доступа.

Ссылки

Комментарии: 0