Executive brief
openssl_encrypt is a Python library for encrypting and decrypting identity files using password protection. A flaw in how it validates memory parameters in encrypted identity files allows an attacker with write access to the local identity store to craft a malicious identity file that consumes excessive memory, causing the system to crash when the user attempts to unlock the identity before authentication.
Technical details
The vulnerability is a resource exhaustion flaw (CWE-400) in the PasswordProtectionConfig.from_dict method, which reads the memory_cost parameter from an identity file's protection block without validating an upper bound. The _derive_key function then passes this unconstrained value to Argon2 (hash_secret_raw) for key derivation before the AEAD tag has authenticated the private key data. An attacker with write access to the local identity store or who can trick a user into loading a malicious identity file can supply an extremely large memory_cost value that causes out-of-memory conditions and system crash. The vulnerability is pre-authentication, meaning it can be triggered before the user is authenticated. Fixed in version 1.4.9 by clamping the Argon2 cost parameters (memory_cost ≤ 2 GiB, time_cost ≤ 64, parallelism ≤ 16).
Affected products
- jahlives openssl_encrypt before 1.4.9
Timeline
- 2026-08-12: disclosed
- 2026-08-27: advisory
- 2026: patched: fixed in version 1.4.9