Уязвимость в 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. Предполагается, что уязвимость ограничена возможностью инициирования аварийного завершения процесса.

Release. Ссылка here.