Версия 8.10.3 продукта Redis исправляет переполнение буфера в кластерном режиме

redis

В кластерном режиме Redis узел может принять сообщение системы публикации-подписки размером больше 4 ГБ. Обработка такого сообщения приводит к переполнению буфера в куче - области памяти, которую программа выделяет под данные во время работы. Запись за её границы повреждает служебные структуры и обычно даёт возможность исполнить чужой код либо обрушить процесс. Уязвимость затрагивает ветки 8.10, 8.8, 8.6, 8.4, 8.2, 7.4 и 7.2, для каждой вышел отдельный выпуск с исправлением.

Переполнение буфера в куче при обмене сообщениями кластера

Кластерный режим (cluster mode) объединяет несколько узлов Redis в общую схему хранения с разделением данных. Узлы общаются между собой по служебной шине - отдельному каналу, который не доступен клиентам напрямую. Система публикации-подписки позволяет одному узлу разослать сообщение сразу всем подписчикам. Когда размер такого сообщения превышает 4 ГБ, приёмная сторона выделяет под него буфер в куче и записывает данные за границу выделенного блока. Повреждение памяти затрагивает не только обработку самого сообщения, но и соседние структуры процесса.

Оценки по шкале CVSS (Common Vulnerability Scoring System, общая система оценки уязвимостей) в описании выпуска нет, уровень сложности тоже не назван. Условия атаки словами не раскрыты: неизвестно, идёт ли обращение по сети или локально, требуется ли аутентификация и нужно ли участие пользователя. Не сказано и то, кто может отправить сообщение такого размера - внешний клиент, приложение или другой узел обмена. Искать эти данные следует в самом описании выпуска и в истории изменений продукта.

Обмен по шине кластера идёт только при включённом кластерном режиме. Установки Redis, работающие одиночным узлом, такую передачу не используют, поэтому описанный сценарий к ним не относится. Для кластерных развёртываний важно, что сообщение проходит между узлами внутри доверенной, как правило, сети - внешний доступ к шине обычно закрыт.

Сведений об эксплуатации уязвимости в реальных атаках в материалах выпуска нет. Публично раскрытых эксплойтов там тоже не упомянуто.

Исправление вышло в версиях 8.10.3, 8.8.4, 8.6.8, 8.4.8, 8.2.11, 7.4.12 и 7.2.17. Каждый выпуск помечен как содержащий исправление безопасности. Идентификатор CVE (Common Vulnerabilities and Exposures, общий перечень уязвимостей) в описании не присвоен, отдельного бюллетеня безопасности не упомянуто. Если номер появится позже, его нужно искать в описании выпуска и в общем перечне.

Обходных мер в материалах выпуска не приводится, поэтому остаётся обновление. Администратору кластера нужно определить свою ветку и обновить все узлы до версии из неё. После обновления стоит отслеживать описание выпуска: идентификатор и уточнения по условиям атаки могут добавить позднее.

Уязвимость ограничена кластерным режимом, поэтому одиночные развёртывания Redis она не касается. Числовой оценки и данных о реальных атаках нет, так что приоритет обновления определяется внутренними правилами управления исправлениями. Для кластеров исправление закрывает описанный путь к повреждению памяти при передаче крупных сообщений.

Ссылки

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