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-predis1.0.0-1
- Ubuntu 18.04 LTS (bionic):
php-nrk-predis1.0.0-1
- Ubuntu 20.04 LTS (focal):
php-nrk-predis1.0.0-1
- Ubuntu 22.04 LTS (jammy):
php-nrk-predis1.1.10-1,php-predis1.1.10-1
- Ubuntu 24.04 LTS (noble):
php-predis2.2.2-1
- Ubuntu 26.04 LTS (resolute):
php-predis2.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(), если функциональность позволяет.
Как проверить устранение уязвимости
Для проверки успешного исправления:
- Убедитесь, что версия Predis обновлена до 3.3.0 или выше:
Bash:php -r "echo Predis\Version::VERSION;" - Проверьте, что пакеты в Ubuntu обновлены:
Bash:apt-cache policy php-predis - Проведите функциональное тестирование приложения, убедившись, что
pipeline()работает корректно и не вызывает ошибок.
Вывод
CVE-2026-84372 представляет серьезную угрозу для систем, использующих Predis для работы с Redis/Valkey. Критическая оценка CVSS и возможность удаленной эксплуатации без аутентификации требуют немедленных действий.
Обновление до версии 3.3.0 и применение временных мер защиты помогут снизить риск. Регулярный мониторинг и аудит кода помогут предотвратить подобные инциденты в будущем.
Официальные источники
История обновлений статьи
- 04.09.2026 — Опубликована первая версия материала.
