OpenSSL объявила об исправлении девяти уязвимостей, затрагивающих все поддерживаемые ветки библиотеки. Наиболее заметные проблемы - подделка аутентифицированных сообщений при обработке пустого шифротекста и переполнение буфера в модуле CMS. Остальные дефекты в основном приводят к отказу в обслуживании через исчерпание памяти или повреждение кучи.
Детали узявимостей
Первая уязвимость связана с работой функций AEAD (аутентифицированное шифрование с дополнительными данными), а именно ChaCha20-Poly1305 и AES-OCB. При вызове функции EVP_Cipher() с пустым шифротекстом библиотека пропускает проверку тега аутентификации. В результате приложение, полагающееся на эту проверку, может принять подделанное сообщение за подлинное. Проблема затрагивает версии начиная с 3.0 и до 4.0, но только там, где задействованы указанные алгоритмы.
Вторая существенная уязвимость находится в коде CMS - формата для криптографической защиты данных. При расшифровке сообщения размер буфера для извлечения ключа определяется на основе запроса к примитиву, но сам примитив может записать больше байт, чем сообщил. Это приводит к записи восьми нулевых байт за пределы выделенной области кучи. Атакующий может отправить жертве специально сформированное CMS-сообщение, чтобы вызвать повреждение кучи и, с большой вероятностью, отказ в обслуживании.
В реализации протокола QUIC обнаружено двойное освобождение памяти. При обработке некорректного начального пакета, не соответствующего стандарту RFC 9000, объект, отвечающий за обработку записей, освобождается дважды. Это разрушает кучу и обычно приводит к завершению процесса. Исследователи считают, что эксплуатация для выполнения кода маловероятна, но отказ в обслуживании достижим с минимальными усилиями.
Отдельная проблема касается DTLS - версии TLS для датаграммных протоколов. Во время рукопожатия OpenSSL буферизует записи, пришедшие для будущей эпохи. При этом сохраняется не только сама запись, но и весь буфер чтения размером около 16 килобайт. До 100 таких записей на одно соединение дают усиление памяти примерно в 1200 раз. Злоумышленник может отправлять небольшие поддельные записи, вызывая удержание до 1,7 мегабайта памяти на соединение, что грозит исчерпанием памяти на сервере.
В протоколе CMP, используемом для управления сертификатами, найдено сразу несколько проблем. Одна из них - использование имени отправителя, контролируемого атакующим, в качестве форматной строки. Специально сформированный ответ может привести к обращению к случайным областям стека и аварийному завершению клиента. Другая проблема - неограниченный рост кэша дополнительных сертификатов. Если сервер долго живет с одним контекстом, злоумышленник может отправлять запросы с большим числом сертификатов, которые не удаляются из памяти, что ведет к переполнению. Третья проблема - некорректная проверка параметра защитного алгоритма: при обработке сообщения с неправильным типом параметра происходит разыменование недопустимого указателя, что также приводит к отказу в обслуживании.
Еще одна уязвимость связана с поддержкой открытых ключей в формате raw public keys (RPK) в TLS. Если сервер или клиент настроен только с приватным ключом без сертификата, а удаленная сторона запрашивает RPK и передает расширение signature_algorithms_cert, возникает разыменование нулевого указателя. Это приводит к аварийному завершению приложения. Проблема не позволяет раскрыть данные или выполнить код, только вызвать отказ в обслуживании.
В QUIC также обнаружена утечка памяти. Если пир отправляет множество пакетов, требующих подтверждения, но не подтверждает ответные пакеты, OpenSSL накапливает метаданные о подтверждениях в течение всего соединения. При достаточном количестве соединений это может привести к исчерпанию памяти и отказу в обслуживании.
Все перечисленные уязвимости имеют низкий или умеренный уровень опасности. Отсутствуют свидетельства их активной эксплуатации в реальных атаках. Тем не менее OpenSSL используется повсеместно - от веб-серверов до встраиваемых устройств, поэтому обновление необходимо для защиты инфраструктуры.
Разработчики выпустили исправления в версиях 4.0.2, 3.6.4, 3.5.8, 3.4.7 и 3.0.22. Пользователи веток 1.1.1 и 1.0.2, которые получают поддержку по премиальной подписке, могут обновиться до версий 1.1.1zi и 1.0.2zr соответственно. Остальным рекомендуется перейти на актуальные ветки.
Многие проблемы связаны с управлением памятью и недостаточной проверкой входных данных, что подчеркивает необходимость регулярного обновления библиотек, особенно в условиях растущего использования QUIC и CMP.
Ссылки