openssl-encrypt's unverified key bundle from_dict() + to_identity() path allows encryption to attacker keys
Summary
The PublicKeyBundle.from_dict() method in openssl_encrypt/modules/key_bundle.py at lines 329-361 creates bundles from untrusted data without verifying the signature. The docstring warns to call verify_signature() after creation, but the to_identity() method (line 363-391) can convert an unverified bundle directly to an Identity object.
Affected Code
@classmethod
def from_dict(cls, data: Dict) -> "PublicKeyBundle":
"""
SECURITY: Does NOT verify signature. Call verify_signature() after creation.
"""
# Creates bundle without verification
Impact
If from_dict() followed by to_identity() is called without an intervening verify_signature() call, encryption could be performed against an attacker's public key, leaking secrets. While key_resolver.py (lines 146-147) does verify before use, the unguarded API path remains directly callable.
Recommended Fix
- Add a
verifiedflag toPublicKeyBundlethat must be set beforeto_identity()can be called - Or have
to_identity()automatically callverify_signature()and raise on failure - Or make
from_dict()require verification as part of construction
Fix
Fixed in commit f4a1ba6 on branch releases/1.4.x — from_dict() now verifies self_signature by default (verify=True parameter); raises ValueError on verification failure.
Affected software
Click a technology to see all vulnerabilities affecting it.
| Platform | Package | Vulnerable versions | Fixed in |
|---|---|---|---|
| Python (PyPI) | openssl-encrypt | < 1.4.0 | 1.4.0 |
References
- https://github.com/jahlives/openssl_encrypt/security/advisories/GHSA-8h88-gxp3-j7pg
- https://www.vulncheck.com/advisories/openssl-encrypt-before-unverified-key-bundle-encryption
- https://github.com/jahlives/openssl_encrypt/commit/f4a1ba660063cd9e17883829e5272a248525a16b
- https://github.com/jahlives/openssl_encrypt
- CVSS vector
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N/E:U- Weakness (CWE)
CWE-347- Platform
- Python (PyPI)
- Package
openssl-encrypt- Disclosed
- 01.04.2026
- Updated
- 11.10.2026 15:17
Sources and licenses
OSV / GitHub Advisory Database - PYSEC-2026-3756 - PyPA Advisory Database; CC BY 4.0
OSV / GitHub Advisory Database - GHSA-8h88-gxp3-j7pg - CC BY 4.0
Vulnerability history: openssl-encrypt
All published vulnerabilities of this package (Python (PyPI)), newest first. Shows whether this is a one-off slip or a package that needs watching.
- Total entries
- 60
- First → latest
- 03.2026 08.2026
- Without a fix
- 0
- Exploited in attacks
- 0
Severity breakdown
- Critical 2
- High 1
- Medium 15
- Unrated 42
Disclosures per year
- 2026: 60
-
openssl-encrypt's unverified key bundle from_dict() + to_identity() path allows encryption to attacker keys this entry
Know which vulnerabilities affect your application
With the DockRay integration and software inventory enabled, DockRay checks reported component versions against known vulnerabilities and notifies you about confirmed matches. Coverage depends on the supported technology and available advisory data.