OpenIDC/cjose — это библиотека C, реализующая подписывание и шифрование объектов Javascript (JOSE). В версиях с 0.6.1 по 0.6.2.5, когда cjose шифрует JWE с использованием алгоритма шифрования контента AES-CBC-HMAC («A128CBC-HS256», «A192CBC-HS384» или «A256CBC-HS512») вместе с любым алгоритмом управления ключами, который генерирует новый ключ шифрования контента (CEK), CEK представляет собой все нулевые байты, а не генерируется случайным образом. Таким образом, полученный JWE шифруется и аутентифицируется с использованием фиксированного, общеизвестного ключа, поэтому любой, кто получит JWE, может восстановить открытый текст и подделать или изменить содержимое.
В версии 0.6.2.6 это исправлено с помощью `_cjose_jwe_set_cek_aes_cbc()`, генерирующего CEK из `RAND_bytes`. Регрессионный тест утверждает, что `encrypted_key` различается в двух шифрованиях для каждого варианта AES-CBC-HMAC. До обновления для данных, зашифрованных с помощью cjose, доступны три варианта.
Используйте enc AES-GCM (A128GCM / A192GCM / A256GCM) вместо enc AES-CBC-HMAC, используйте alg=dir с CEK, предоставленным вызывающей стороной, или избегайте использования cjose для шифрования JWE с затронутой парой алгоритмов. Это смягчения только для новых зашифрованных текстов; данные, уже зашифрованные нулевым ключом, остаются скомпрометированными и должны быть повторно зашифрованы (и все содержащиеся в них секреты будут заменены).
Показать оригинальное описание (EN)
OpenIDC/cjose is a C library implementing the Javascript Object Signing and Encryption (JOSE). In versions 0.6.1 through 0.6.2.5, when cjose encrypts a JWE using an AES-CBC-HMAC content-encryption algorithm (`A128CBC-HS256`, `A192CBC-HS384`, or `A256CBC-HS512`) together with any key-management algorithm that generates a fresh content-encryption key (CEK), the CEK is all zero bytes instead of being randomly generated. The resulting JWE is therefore encrypted and authenticated under a fixed, publicly known key, so anyone who obtains the JWE can recover the plaintext and forge or modify the content. This is fixed in version 0.6.2.6 by `_cjose_jwe_set_cek_aes_cbc()` generating the CEK from `RAND_bytes`. A regression test asserts that the `encrypted_key` differs across two encryptions for each AES-CBC-HMAC variant. Until upgrading, for data encrypted with cjose, three options are available. Use an AES-GCM `enc` (`A128GCM` / `A192GCM` / `A256GCM`) instead of an AES-CBC-HMAC `enc`, use `alg=dir` with a caller-supplied CEK, or avoid using cjose for JWE encryption with the affected algorithm pair. These are mitigations for new ciphertexts only; data already encrypted under the zero key remains compromised and should be re-encrypted (and any secrets it contained rotated).
Характеристики атаки
Последствия
Строка CVSS v3.1