Context used for encryption or decryption is associated with NULL initialization vector or not associated with an initialization vector
This defect occurs when you encrypt or decrypt data using a NULL initialization vector (IV).
Note
You can initialize your cipher context with a NULL initialization vector (IV). However, if your algorithm requires an IV, before the encryption or decryption step, you must associate the cipher context with a non-NULL IV.
Many block cipher modes use an initialization vector (IV) to prevent dictionary attacks. If you use a NULL IV, your encrypted data is vulnerable to such attacks.
Block ciphers break your data into blocks of fixed size. Block cipher modes such as CBC (Cipher Block Chaining) protect against dictionary attacks by XOR-ing each block with the encrypted output from the previous block. To protect the first block, these modes use a random initialization vector (IV). If you use a NULL IV, you get the same ciphertext when encrypting the same plaintext. Your data becomes vulnerable to dictionary attacks.
Before your encryption or decryption steps
ret = EVP_EncryptUpdate(&ctx, out_buf, &out_len, src, len)
ctx with a non-NULL initialization
vector.ret = EVP_EncryptInit_ex(ctx, EVP_aes_128_cbc(), NULL, key, iv)
| Group: Cryptography |
| Language: C | C++ |
| Default: Off |
Command-Line Syntax: CRYPTO_CIPHER_NO_IV |
| Impact: Medium |
| CWE ID: 310, 326, 329 |