CVE-2026-74874Medium▾ Sunlitopenssl-encrypt has non-cryptographic PRNG used for steganography pixel selection
▾ Sunlit zone — Low / medium · no exploitation signal
impact 27.5 · likelihood 0.1 · exploitation 0
Need a working PoC? Pro members can cast a request and our team develops one — it lands right here.
Exploit-prediction probability, daily snapshots since Aug 18.
Disclosure to exploitation, from the record and what we observed since indexing it.
Disclosed via OSV
Last analysed / modified upstream
0.3%
The generate_pseudorandom_sequence() function in openssl_encrypt/plugins/steganography/core/utils.py at lines 89-91 uses Python's random module (Mersenne Twister) for steganographic pixel/sample selection.
random.seed(seed)
sequence = random.sample(range(max_value), min(length, max_value))
return sequence
Additionally, the steganography password is stored as a plain Python string (not SecureBytes) and only 8 bytes (64 bits) of the SHA-256 hash are used for the seed, reducing effective security to 64 bits.
The Mersenne Twister's state can be recovered from approximately 624 outputs. An attacker who knows or guesses the password can predict the PRNG sequence and determine exactly which pixels contain hidden data, potentially extracting the hidden data without the password.
secrets module for cryptographically secure pixel selectionSecureBytes instead of a plain stringFixed in commit 09e96e0 on branch releases/1.4.x — replaced random.seed(hash(password)) with HMAC-SHA256 based CSPRNG (Fisher-Yates shuffle) and numpy Generator with HMAC-derived seeds across all steganography format modules.
openssl-encrypt < 1.4.0Upgrade to a patched release:
openssl-encrypt 1.4.0Connected by shared product, vendor, weakness, or advisory.
CVE-2026-74872Mediumopenssl-encrypt: Dynamic .so loading for Whirlpool uses broad glob pattern without integrity verification
CVE-2026-74877Mediumopenssl-encrypt has no owner verification on key revocation — any client can revoke any key
CVE-2026-74878Criticalopenssl-encrypt: TOTP rate limiter is in-memory only — not shared across workers, lost on restart
CVE-2026-74873Mediumopenssl-encrypt has visible password in process list via --password CLI argument
CVE-2026-74876Mediumopenssl-encrypt's unverified key bundle from_dict() + to_identity() path allows encryption to attacker keys
CVE-2026-74880Mediumopenssl-encrypt accepts refresh tokens as URL query parameters causing token leakage