Старший инженер по качеству в команде безопасности QE BaseOS в Red Hat Хуберт Карио показал, что многие программные реализации схемы заполнения PKCS#1 v1.5 для обмена ключами RSA, которые ранее считались устойчивыми к широко известной атаке Даниэля Блейхенбахера, на самом деле уязвимы.
В 1998 году Блейхенбахер показал, что клиент сервера SSL/TLS может использовать информацию, полученную из ответов сервера об ошибках, чтобы узнать достаточно о заполнении и расшифровать защищенное сообщение.
Уязвимость появлялась неоднократно, в последний раз в 2017 году, когда исследователи безопасности обнаружили, что по крайней мере 8 IT-поставщиков и открытых проектов были уязвимы для вариации оригинальной атаки Блейхенбахера. Исследователи назвали свою атаку ROBOT.
В статье Карио говорится, что атаки в стиле Блейхенбахера на протокол RSA все еще возможны и что уязвимые реализации распространены. Карио назвал свою атаку MARVIN. По сути, отправляя специально созданные шифртексты RSA на сервер, который использует PKCS#1 v1.5, и измеряя время, необходимое для обработки сообщений, можно в конечном итоге прочитать целевой открытый текст.
Карио рекомендует прекратить использование шифрования RSA PKCS#1 v1.5, так как затрагиваются только серверы, реализующие шифрование RSA. Большинство современных клиентов, по его словам, полагаются на Elliptic Curve Diffie Hellman.
Карио выявил по крайней мере 7 затронутых реализаций, некоторые из которых подтвердили исправления, но, по его мнению, большинство криптографических реализаций RSA PKCS#1 v1.5 всё ещё уязвимы.
Затронутые реализации:
- OpenSSL (уровень TLS) – Синхронизация Oracle в расшифровке RSA ( CVE-2022-4304 );
- OpenSSL (уровень API) – Сделать API расшифровки RSA безопасным для использования с заполнением PKCS#1 v1.5 (без CVE);
- GnuTLS (уровень TLS) – уязвимость связана с тем, что время ответа на неправильные шифртексты RSA в ClientKeyExchange отличается от времени ответа шифртекстов с правильным заполнением PKCS#1 v1.5 ( CVE-2023-0361 );
- НСС (уровень TLS) – улучшено постоянное время в операциях RSA. Ошибка была неполностью исправлена в версии 3.61 – реализация ещё уязвима ( CVE-2023-4421 );
- pyca/cryptography – требуется исправление уровня OpenSSL ( CVE-2020-25659 );
- M2Crypto – требуется исправление уровня OpenSSL ( CVE-2020-25657 );
- OpenSSL-ibmca – Исправления для RSA PKCS#1 v1.5 и заполнения OAEP в версии 2.4.0 (без CVE).
Те, кто заинтересован в тестировании своих систем, могут воспользоваться скриптом Карио для тестирования серверов TLS и соответствующими инструкциями . Карио также отметил, что недостаток не ограничивается только RSA. Любая реализация, использующая общее целочисленное выполнение, столкнется с теми же проблемами.