Возможность генерации фиктивных подписей ECDSA в Java SE. Уязвимости в MySQL, VirtualBox и Solaris

Компания Oracle опубликовала плановый выпуск обновлений своих продуктов (Critical Patch Update), нацеленный на устранение критических проблем и уязвимостей. В апрельском обновлении в сумме устранено 520 уязвимостей.

Некоторые проблемы:

  • 6 проблем с безопасностью в Java SE. Все уязвимости могут быть эксплуатированы удалённо без проведения аутентификации и затрагивают окружения, допускающие выполнение не заслуживающего доверия кода. Двум проблемам присвоен уровень опасности 7.5. Уязвимости устранены в выпусках Java SE 18.0.1, 11.0.15 и 8u331.

    Одна из проблем (CVE-2022-21449) позволяет сгенерировать фиктивную цифровую подпись ECDSA, используя при её генерации нулевые параметры кривой (если параметры нулевые, то кривая уходит в бесконечность, поэтому нулевые значения явно запрещены в спецификации). В библиотеках Java отсутствовала проверка на нулевые значения параметров ECDSA, поэтому при обработке подписей с нулевыми параметрами, Java во всех случаях считал их валидными).

    В том числе уязвимость может использоваться для генерации фиктивных TLS-сертификатов, которые будут приниматься в Java как корректные, а также для обхода аутентификации через WebAuthn и формирования фиктивных подписей JWT и токенов OIDC. Иными словами, уязвимость позволяет генерировать универсальные сертификаты и подписи, которые будет приниматься и восприниматься как корректные в Java-обработчиках, использующих для проверки штатные классы java.security.*. Проблема проявляется в ветках Java 15, 16, 17 и 18. Доступен пример генерации поддельных сертификатов.

    
       jshell› import java.security.*
       jshell› var keys = KeyPairGenerator.getInstance("EC").generateKeyPair()
    
       keys ==› java.security.KeyPair@626b2d4a
    
       jshell› var blankSignature = new byte[64]
     
      blankSignature ==› byte[64] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... , 0, 0, 0, 0, 0, 0, 0, 0 }
    
      jshell› var sig = Signature.getInstance("SHA256WithECDSAInP1363Format")
    
       sig ==› Signature object: SHA256WithECDSAInP1363Format‹not initialized›
    
       jshell› sig.initVerify(keys.getPublic())
       jshell› sig.update("Hello, World".getBytes())
       jshell› sig.verify(blankSignature)
    
       $8 ==› true
    
  • 26 уязвимостей в сервере MySQL, из которых две могут быть эксплуатированы удалённо. Наиболее серьёзным проблемам, которые связаны с использованием OpenSSL и protobuf, присвоены уровни опасности 7.5. Менее опасные уязвимости затрагивают
    оптимизатор, InnoDB, репликацию, PAM-плагин, DDL, DML, FTS и ведение логов. Проблемы устранены в выпусках MySQL Community Server 8.0.29 и 5.7.38.

  • 5 уязвимостей в VirtualBox. Проблемам присвоен уровень опасности от 7.5 до 3.8 (наиболее опасная уязвимость проявляется только на платформе Windows). Уязвимости устранены в обновлении VirtualBox 6.1.34.
  • 6 уязвимостей в Solaris. Проблемы затрагивают ядро и утилиты. Наиболее серьёзной проблеме в утилитах присвоен уровень опасности 8.2. Уязвимости устранены в обновлении Solaris 11.4 SRU44.

Источник: http://www.opennet.ru/opennews/art.shtml?num=57050