OpenSSL закрывает десятки уязвимостей: критическая ошибка в PKCS#7 позволяет удалённо выполнять код

OpenSSL

OpenSSL выпустила крупное обновление безопасности, которое исправляет сразу 15 уязвимостей в различных версиях криптографической библиотеки. Этот шаг затронул все поддерживаемые ветки - от OpenSSL 1.0.2 до новейшей 4.0. Среди обнаруженных проблем одна признана критически опасной, ещё три относятся к высокому уровню риска. Обновление задевает тысячи серверов, встроенных устройств и корпоративных систем по всему миру, ведь OpenSSL - один из базовых компонентов безопасной передачи данных в интернете.

Детали уязвимостей

Самой серьёзной из закрытых уязвимостей стала CVE-2026-45447, получившая уровень High. Она связана с ошибкой использования памяти после освобождения (use‑after‑free) в функции PKCS7_verify(). Суть проблемы в том, что при проверке цифровой подписи PKCS#7 или S/MIME OpenSSL может преждевременно освободить объект BIO - механизм работы с потоками данных, который принадлежит приложению. Если после этого программа попытается ещё раз обратиться к тому же BIO, произойдёт обращение к уже освобождённой области памяти. В результате возможны аварийные завершения процесса, повреждение кучи или в определённых условиях удалённое выполнение вредоносного кода. Особенность в том, что уязвимость проявляется только когда в сообщении SignedData присутствует пустой набор digestAlgorithms. Приложения, использующие API CMS, не подвержены риску - проблема затрагивает лишь те, что работают напрямую с PKCS#7.

Вторая по значимости уязвимость - CVE-2026-34182 (уровень Moderate) - касается обработки CMS‑сообщений в режиме AuthEnvelopedData. OpenSSL недостаточно строго проверяет поля, отвечающие за алгоритм шифрования и длину кода аутентификации. Злоумышленник, перехватив легитимное зашифрованное сообщение, может заменить внутренний идентификатор алгоритма на неаутентифицированный потоковый шифр (например, AES-256-OFB) и подменить зашифрованный текст. Если приложение на стороне получателя возвращает какой-либо признак успешности или неудачи расшифровки, атакующий получает возможность действовать как оракул для восстановления ключа шифрования. Второй сценарий - сокращение длины кода аутентификации до одного байта, что позволяет атакующему перебором обойти проверку целостности.

Ещё одна заметная уязвимость (CVE-2026-35188) получила статус Moderate - это двойное освобождение памяти (double‑free) при проверке OCSP‑ответов, закреплённых к сертификату через расширение status_request. Если клиент TLS использует OCSP stapling (закрепление статуса сертификата), злонамеренный сервер может отправить специально сформированный ответ, приводящий к повреждению кучи. Функция отключена по умолчанию, но при её включении возможен как отказ в обслуживании, так и потенциальный захват управления, хотя достичь этого технически сложно.

Протокол QUIC также пострадал. Уязвимость CVE-2026-34183 позволяет удалённому участнику соединения исчерпать память кучи, отправив множество пакетов с кадрами PATH_CHALLENGE. Каждый такой кадр порождает ответный PATH_RESPONSE, который не освобождается, пока атакующий не подтвердит его получение. Поскольку он этого не делает, память растёт без ограничений - вплоть до аварийного завершения процесса. Проблема затрагивает версии 3.4, 3.5, 3.6 и 4.0.

Отдельного внимания заслуживает CVE-2026-45445 - ошибка в реализации алгоритма шифрования AES-OCB. Если приложение использует интерфейс EVP_Cipher() для одноразового шифрования, переданный вектор инициализации полностью игнорируется. В результате все сообщения, зашифрованные одним и тем же ключом, оказываются под одним нонсом, что позволяет злоумышленнику расшифровать данные и подделать любой зашифрованный текст. К счастью, такой режим работы является нестандартным - протоколы TLS и SSL никогда не применяют AES-OCB, и большинство приложений используют правильный вызов EVP_CipherUpdate/EVP_CipherFinal_ex, где уязвимость отсутствует.

Другие обнаруженные уязвимости получили статус Low. Среди них - возможность переполнения буфера в куче при разборе длинных строк ASN.1 (CVE-2026-7383), выход за границы буфера при чтении CMS‑сообщений с парольной расшифровкой (CVE-2026-9076), а также несколько отказов в обслуживании через NULL‑указатель в различных функциях (CVE-2026-42764, CVE-2026-42765, CVE-2026-42766, CVE-2026-42767). Хотя для их эксплуатации нужны специфические условия, в комбинации с другими атаками они могут усилить последствия.

Кроме того, исправлена уязвимость в проверке подписи PKCS#12 (CVE-2026-34181), позволявшая подделать сертификат с вероятностью 1 к 256, и ошибка Bleichenbacher-стиля в функциях CMS_decrypt и PKCS7_decrypt (CVE-2026-42768). Последняя даёт возможность восстановить закрытый RSA-ключ, если приложение возвращает различные коды ошибок. Разработчики включили в обновление механизм неявного отклонения неверных заполнений, который лишает атакующего информации о корректности расшифровки.

Важно отметить, что ветки OpenSSL 1.0.2 и 1.1.1 находятся на расширенной поддержке только для клиентов с платной подпиской, однако обновления для них также выпущены. Пользователям настоятельно рекомендуется как можно скорее перейти на следующие исправленные версии: OpenSSL 4.0.1, 3.6.3, 3.5.7, 3.4.6, 3.0.21, а для старых веток - 1.1.1zh и 1.0.2zq.

OpenSSL - это не просто библиотека, а доверенный элемент для HTTPS, VPN, электронной почты и облачных решений. Промедление с патчем может привести к компрометации данных, остановке сервисов и финансовым потерям. Администраторам стоит провести инвентаризацию используемых версий и развернуть обновление в ближайшее время.

Ссылки

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