CVE-2026-84372 в Ubuntu: инъекция команд в Predis, уязвимые версии и защита

CVE: CVE-2026-84372
Продукт: Ubuntu
Дата публикации: 02.09.2026
Критичность: CRITICAL
CVSS: 9.8 (3.1)
EPSS: 0,41%; процентиль 34,70%
CISA KEV: нет подтверждения в каталоге CISA KEV

Краткое описание​


В клиенте Predis для PHP обнаружена критическая уязвимость, позволяющая внедрять произвольные команды в Redis/Valkey через манипуляцию ключами или значениями при использовании пайплайнов.

В Ubuntu затронуты пакеты php-predis и php-nrk-predis в версиях от 16.04 до 26.04 LTS. Ошибка исправлена в версии 3.3.0.

Статья описывает механику атаки, условия эксплуатации и способы проверки статуса системы.

Основные характеристики​


Уязвимость позволяет нарушителю выполнять произвольные команды в Redis/Valkey, если приложение использует Predis для пайплайнов с кластерными или репликационными соединениями. Риск высокий из-за отсутствия необходимости в аутентификации и простоты эксплуатации.

  • Тип ошибки: CWE-93 (CRLF Injection). Злоумышленник внедряет последовательности CRLF в данные, которые клиент интерпретирует как новые команды.
  • CVSS: 9.8 (CRITICAL). Вектор: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H. Оценка отражает возможность удаленного доступа без аутентификации с полным компрометированием конфиденциальности, целостности и доступности.
  • Условия атаки: Требуется использование метода pipeline() в Predis. Методы transaction() и MULTI не затронуты.
  • Эксплуатация: Публичные эксплойты не подтверждены, но техническое описание позволяет легко составить атаку.
  • EPSS: 0,42% (процентиль 34,7%). Вероятность эксплуатации в ближайшие 30 дней оценивается как низкая, но риск остается высоким из-за критичности.

Какие продукты и версии затронуты​


В Ubuntu уязвимы пакеты php-predis и php-nrk-predis в следующих версиях:

  • Ubuntu 16.04 LTS (xenial): php-nrk-predis 1.0.0-1
  • Ubuntu 18.04 LTS (bionic): php-nrk-predis 1.0.0-1
  • Ubuntu 20.04 LTS (focal): php-nrk-predis 1.0.0-1
  • Ubuntu 22.04 LTS (jammy): php-nrk-predis 1.1.10-1, php-predis 1.1.10-1
  • Ubuntu 24.04 LTS (noble): php-predis 2.2.2-1
  • Ubuntu 26.04 LTS (resolute): php-predis 2.4.1-1

Обратите внимание, что в Ubuntu 22.04 и выше пакет php-predis также затронут. Все перечисленные версии содержат уязвимый код, так как они основаны на версиях Predis до 3.3.0.

Причина уязвимости​


Причина уязвимости кроется в неправильной обработке уже сериализованного RESP-буфера в методе AbstractAggregateConnection::write(). Вместо того чтобы уважать длины команд, указанные в префиксах RESP, код использует explode("\r\n") для разделения буфера на строки.

Это позволяет злоумышленнику, контролирующему ключи или значения, внедрять последовательности CRLF (\r\n), которые интерпретируются как разделители команд. В результате Command::deserializeCommand() воспринимает внедренные строки как новые, независимые команды Redis/Valkey.

Как работает атака​


Атака эксплуатирует путь данных, где пользовательские ключи или значения передаются в метод pipeline(). При сериализации этих данных в RESP-формат, если они содержат CRLF, метод write() ошибочно разделяет буфер, создавая дополнительные команды.

В кластерных соединениях функция ClusterStrategy::getFakeKey() может маршрутизировать внедренные команды без ключей, используя фиктивный ключ "key". Это позволяет выполнять операции на уровне всего шарда, такие как удаление кэша, изменение данных или чтение информации. В репликационных соединениях некорректный репарсинг может вызывать необработанные исключения, приводящие к прерыванию запросов.

Условия успешной эксплуатации​


Для успешной эксплуатации уязвимости необходимо:

  • Приложение использует Predis версии от 3.0.0-RC1 до 3.3.0.
  • Используется метод pipeline() для агрегированных кластерных или репликационных соединений.
  • Злоумышленник имеет возможность контролировать ключи или значения, передаваемые в Redis/Valkey через Predis.
  • Соединение настроено на кластер или репликацию, где уязвимость проявляется.

Возможный сценарий атаки​


Злоумышленник отправляет запрос в уязвимое приложение, где ключ или значение содержит последовательность CRLF. Например, ключ "user\r\nFLUSHALL".

При сериализации в RESP и обработке методом write() буфер разделяется, и FLUSHALL интерпретируется как отдельная команда.

В кластере это приводит к удалению кэша на всех узлах, нарушая доступность и целостность данных. В репликации это может вызвать сбой приложения из-за необработанного исключения.

Есть ли публичный эксплойт​


Публичные эксплойты для CVE-2026-84372 не подтверждены в каталогах CISA KEV или других официальных источниках. Однако техническое описание уязвимости достаточно подробно, чтобы разработать PoC. Отсутствие публичного эксплойта не означает, что атака невозможна; скорее, она требует понимания механики Predis и RESP-формата.

Признаки эксплуатации​


Специфичные IOC для этой уязвимости не опубликованы. Общие признаки, которые могут указывать на эксплуатацию, включают:

  • Необычные команды Redis/Valkey, такие как FLUSHALL или FLUSHDB, в журналах сервера.
  • Внезапные сбои или необработанные исключения в PHP-приложениях, использующих Predis.
  • Аномальная нагрузка на Redis/Valkey, связанная с массовыми операциями удаления или чтения данных.

Эти признаки неспецифичны и требуют корреляции с другими событиями для подтверждения атаки.

Как обнаружить атаку​


Для обнаружения атаки рекомендуется:

  • Мониторинг журналов Redis/Valkey на предмет подозрительных команд, особенно FLUSHALL, FLUSHDB и массовых операций.
  • Анализ логоов PHP-приложений на необработанные исключения, связанные с Predis.
  • Использование систем детектирования аномалий (IDS/IPS) для отслеживания необычных паттернов трафика к Redis/Valkey.
  • Регулярный аудит кода приложений на использование pipeline() с пользовательскими данными.

Как проверить свою версию​


Для проверки версии установленных пакетов в Ubuntu используйте:

Bash:
cat /etc/os-release
uname -r
apt-cache policy php-predis
apt-cache policy php-nrk-predis
ubuntu-security-status

Замените <имя-пакета> на php-predis или php-nrk-predis в зависимости от установленного пакета. Команда ubuntu-security-status покажет, доступны ли обновления для системы.

Исправление​


Для устранения уязвимости необходимо обновить Predis до версии 3.3.0 или выше. В Ubuntu это означает обновление пакетов php-predis и php-nrk-predis до последних доступных версий, содержащих исправление. Используйте:

Bash:
sudo apt update
sudo apt upgrade php-predis php-nrk-predis

После обновления перезапустите PHP-приложения, чтобы изменения вступили в силу.

Временные меры защиты​


До обновления Predis можно временно снизить риск:

  • Избегайте использования pipeline() с пользовательскими ключами или значениями, если это возможно.
  • Валидируйте и экранируйте пользовательский ввод перед передачей в Predis, удаляя последовательности CRLF.
  • Ограничьте доступ к Redis/Valkey на уровне сети, разрешая соединения только от доверенных IP-адресов.
  • Используйте transaction() или MULTI вместо pipeline(), если функциональность позволяет.

Как проверить устранение уязвимости​


Для проверки успешного исправления:

  1. Убедитесь, что версия Predis обновлена до 3.3.0 или выше:

    Bash:
    php -r "echo Predis\Version::VERSION;"
  2. Проверьте, что пакеты в Ubuntu обновлены:

    Bash:
    apt-cache policy php-predis
  3. Проведите функциональное тестирование приложения, убедившись, что pipeline() работает корректно и не вызывает ошибок.

Вывод​


CVE-2026-84372 представляет серьезную угрозу для систем, использующих Predis для работы с Redis/Valkey. Критическая оценка CVSS и возможность удаленной эксплуатации без аутентификации требуют немедленных действий.

Обновление до версии 3.3.0 и применение временных мер защиты помогут снизить риск. Регулярный мониторинг и аудит кода помогут предотвратить подобные инциденты в будущем.

Официальные источники​


  1. NVD — CVE-2026-84372
  2. Ubuntu OSV — CVE-2026-84372
  3. FIRST EPSS — CVE-2026-84372

История обновлений статьи​


  • 04.09.2026 — Опубликована первая версия материала.
 
Назад
Верх Низ