Крупная криптографическая уязвимость в Java позволяет подделывать сертификаты

Крупная криптографическая уязвимость в Java позволяет подделывать сертификаты

Проблема представляет собой цифровой эквивалент пустой идентификационной карты.

В новых версиях Java-фреймворка Oracle обнаружена опасная уязвимость. Ее эксплуатация позволяет злоумышленникам легко подделывать сертификаты и TLS-подписи, сообщения двухфакторной аутентификации и учетные данные авторизации, созданные рядом широко используемых открытых стандартов.

Уязвимость затрагивает реализацию алгоритма с открытым ключом Elliptic Curve Digital Signature Algorithm (ECDSA) в версиях Java 15 и младше. ECDSA — алгоритм, использующий принципы эллиптической криптографии для цифровой аутентификации сообщений. Ключевым преимуществом ECDSA является меньший размер генерируемых им ключей по сравнению с RSA или другими криптоалгоритмами, что делает его подходящим для использования в таких стандартах, как 2FA на основе FIDO, язык разметки Security Assertion Markup Language (SAML), OpenID и JSON.

«Если компания использует одну из уязвимых версий Java, злоумышленник может легко подделать некоторые типы SSL-сертификатов и рукопожатий (позволяющих перехватывать и изменять сообщения), подписанные JWT, утверждения SAML или токены идентификатора OIDC и даже сообщения аутентификации WebAuthn», — пояснил исследователь из ИБ-фирмы ForgeRock Нил Мэдден (Neil Madden), обнаруживший уязвимость.

Уязвимость (CVE-2022-21449) получила оценку в 7,5 балла по шкале CVSS. По словам специалиста, он оценил бы опасность проблемы на максимальные 10 баллов «из-за широкого спектра воздействий на различную функциональность в контексте управления доступом».

Подписи ECDSA основаны на псевдослучайном числе, обычно обозначаемом как K, которое используется для получения двух дополнительных чисел — R и S. Для подтверждения подлинности подписи сторона должна проверить уравнение, включающее R и S, открытый ключ подписавшего, и криптографический хэш сообщения. Когда обе части уравнения равны, подпись действительна.

Реализация проверки подписи ECDSA в Java не проверяет, равны ли R или S нулю, поэтому пользователь может создать значение подписи, в котором они оба равны 0, и Java примет это как действительную подпись для любого сообщения и для любого общедоступного ключа. Цифровой эквивалент пустой идентификационной карты.

Организациям, использующим любую из уязвимых версий Java для проверки подписей, настоятельно рекомендуется применить исправления.

Ньютон уронил яблоко. Мы роняем челюсти!

Гравитация научных фактов сильнее, чем вы думаете

Подпишитесь и испытайте интеллектуальное падение