Найти в Дзене
Проект OpenNet

Уязвимость в OpenSSL и LibreSSL, приводящая к утечке содержимого памяти

Опубликована корректирующие выпуски библиотек OpenSSL (3.0.8, 1.1.1t) и LibreSSL (3.5.4, 3.6.2) в которых устранена опасная уязвимость (CVE-2023-0286), позволяющая добиться получения содержимого произвольных областей памяти процесса при обработке подконтрольного атакующему списка отозванных сертификатов (CRL) или токена с временной меткой.

Уязвимость вызвана неправильной интерпретацией типов (Type Confusion) при обработке адреса X.400 в расширении X.509 GeneralName. В частности, адрес X.400 разбирался с использованием типа ASN1_STRING, в то время как для поля x400Address в структуре GENERAL_NAME был использован тип ASN1_TYPE, что приводило к использованию при сравнении (GENERAL_NAME_cmp) типа ASN1_TYPE вместо ASN1_STRING. При включённой проверке в списке отозванных сертификатов (выставлении в приложении флага X509_V_FLAG_CRL_CHECK) уязвимость позволяет атакующему добиться передачи произвольных указателей в функцию memcmp, что может быть использовано для чтения содержимого памяти или инициирования аварийного завершения процесса.

В большинстве ситуаций для успешного осуществления атаки злоумышленник должен контролировать используемый список отозванных сертификатов (CRL) и цепочку доверия сертификата. Атака также может быть проведена в случае контроля над одним из указанных элементов, но в этом случае в качестве точки распространения CRL должен фигурировать адрес X.400, что встречается достаточно редко. В связи с этим предполагается, что уязвимость в основном затрагивает приложения, в которых применяется собственная реализация функциональности загрузки CRL по сети.

Помимо рассмотренной проблемы в OpenSSL 3.0.8 также устранено несколько менее опасных уязвимостей:

  • CVE-2022-4304 - атака по сторонним каналам, позволяющая определить исходные данные через измерение сетевых задержек при выполнении операций RSA, использующих режимы добавочного заполнения PKCS#1 v1.5, RSA-OEAP и RSASVE. Атака представляет собой вариацию метода Блейхенбахера, суть которого в том, что атакующий на основании разной реакции сервера может отделить корректные и некорректные блоки добавочного заполнения (padding oracle), используемые для выравнивания зашифрованных данных по границе блока. Для успешного проведения атаки требуется отправка очень большого объёма пробных сообщений для расшифровки.С практической стороны атака, например, может быть применена для определения мастер-секрета TLS-соединения, который передаётся клиентом на сервер в зашифрованном виде. Атакующий, который имеет возможность перехватить соединение между клиентом и сервером, может восстановить значение мастер-секрета через отправку серверу большого числа пробных сообщений и анализ времени их обработки. После определения мастер-секрета атакующий может дешифровать данные, отправляемые через рассматриваемое TLS-соединение.
  • CVE-2022-4203 - чтение из области вне границ буфера при верификации сертификатов X.509 со специально оформленным полем Name. Атака может привести к аварийному завершению приложения или утечке содержимого памяти процесса, выполняемого на стороне клиента, в случае подключении к подконтрольному злоумышленнику серверу, или на стороне сервера, если сервер запрашивает аутентификацию у клиента, подконтрольного атакующему.
  • CVE-2023-0215 - обращение к области памяти после её освобождения (Use-after-free) в функции BIO_new_NDEF, применяемой для потоковой передачи данных ASN.1 через интерфейс BIO. Наиболее вероятно, что уязвимость ограничена возможностью инициирования аварийного завершения процесса.
  • CVE-2022-4450 - двойное освобождение памяти после вызова функции PEM_read_bio_ex. Предполагается, что уязвимость ограничена возможностью инициирования аварийного завершения процесса.
  • CVE-2023-0216 - некорректное разыменование указателя в функциях d2i_PKCS7(), d2i_PKCS7_bio() и d2i_PKCS7_fp() при обработке специально оформленных данных PKCS7. Уязвимость может привести к аварийному завершению процесса.
  • CVE-2023-0217 - разыменование указателя NULL при проверке открытого ключа DSA в функции EVP_PKEY_public_check(). Предполагается, что уязвимость ограничена возможностью инициирования аварийного завершения процесса.
  • CVE-2023-0401 - разыменование указателя NULL при проверке данных PKCS7. Предполагается, что уязвимость ограничена возможностью инициирования аварийного завершения процесса.