Найти тему
Проект OpenNet

Возможность генерации фиктивных подписей 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.