Crypt::OpenSSL::X509 CVE-2026-58101
HIGHSeverity by source
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Malformed cert delivered remotely with low complexity and no auth/UI; crash-only so C:N/I:N and A:H, though impact is a single-process SIGSEGV and reachability is application-dependent.
Primary rating from Vendor (CPANSec).
CVSS VectorVendor: CPANSec
Lifecycle Timeline
5DescriptionCVE.org
Crypt::OpenSSL::X509 versions before 2.1.3 for Perl allow denial of service via NULL pointer dereference.
X509V3_EXT_d2i(ext) returns NULL when an extension's DER value fails to parse. basicC, ia5string, and auth_att dereference its result without a NULL check. keyid_data also dereferences akid->keyid, which is NULL for an empty AKI SEQUENCE (DER 30 00) even when the parse succeeds.
A caller invoking an affected helper on an extension from an untrusted certificate triggers a SIGSEGV that crashes the Perl process.
AnalysisAI
Denial of service in the Crypt::OpenSSL::X509 Perl module before 2.1.3 lets a malformed X.509 certificate crash any Perl process that parses it. Four helper functions (basicC, ia5string, auth_att, keyid_data) dereference NULL pointers returned by OpenSSL's X509V3_EXT_d2i() on unparseable extensions - and keyid_data/auth_att additionally deref an akid->keyid field that is legitimately NULL for an empty Authority Key Identifier (DER 30 00). There is no public exploit identified at time of analysis, but the fix commit and a clear crash mechanism are published; CVSS is 7.5 (availability-only).
Technical ContextAI
Crypt::OpenSSL::X509 is a Perl XS binding (C glue in X509.xs) that wraps OpenSSL's X.509 certificate API so Perl callers can inspect certificate fields and extensions. The root cause is CWE-476 (NULL Pointer Dereference): OpenSSL's X509V3_EXT_d2i(ext) returns NULL when an extension's DER content fails to decode, but the affected helpers used that return value directly. basicC() dereferenced the BASIC_CONSTRAINTS pointer, ia5string() dereferenced the ASN1 string, and auth_att()/keyid_data() dereferenced the AUTHORITY_KEYID pointer and its optional keyid member. Notably, keyid can be NULL even on a successful parse - an AKI SEQUENCE encoded as 30 00 (empty, or one carrying only issuer/serial) yields akid->keyid == NULL - so the crash triggers on well-formed-but-empty extensions, not only on decode failures. The affected package per CPE is cpe:2.3:a:jonasbn:crypt::openssl::x509 (all versions up to the fix).
RemediationAI
Vendor-released patch: upgrade Crypt::OpenSSL::X509 to 2.1.3 or later (the fix commit is https://github.com/dsully/perl-crypt-openssl-x509/commit/4c1e2370556097c253ae27abe9e1097ea377fbd2, released as CPAN 2.1.3). If you cannot upgrade immediately, the practical compensating control is to stop passing untrusted certificates into the vulnerable accessors: avoid calling basicC/ia5string/auth_att/keyid_data (e.g. via the extensions()/pubkey helpers that exercise them) on certificates you have not already validated, and validate/pre-parse certificates with a hardened path before inspection - trade-off is reduced functionality for code that legitimately needs those fields. Where the module runs inside a request worker, isolate parsing in a child/forked process or supervised worker so a SIGSEGV crashes only that worker and is auto-restarted rather than taking down the service. Review the changelog at https://metacpan.org/release/JONASBN/Crypt-OpenSSL-X509-2.1.3/source/Changes.md to confirm the fix covers your usage.
The (1) TLS and (2) DTLS implementations in OpenSSL 1.0.1 before 1.0.1g do not properly handle Heartbeat Extension packe
The dtls1_reassemble_fragment function in d1_both.c in OpenSSL before 0.9.8za, 1.0.0 before 1.0.0m, and 1.0.1 before 1.0
OpenSSL before 0.9.8za, 1.0.0 before 1.0.0m, and 1.0.1 before 1.0.1h does not properly restrict processing of ChangeCiph
The SSLv2 protocol, as used in OpenSSL before 1.0.1s and 1.0.2 before 1.0.2g and other products, requires a server to se
The ssl3_get_key_exchange function in s3_clnt.c in OpenSSL before 0.9.8zd, 1.0.0 before 1.0.0p, and 1.0.1 before 1.0.1k
The SSL protocol 3.0, as used in OpenSSL through 1.0.1i and other products, uses nondeterministic CBC padding, which mak
The AES-NI implementation in OpenSSL before 1.0.1t and 1.0.2 before 1.0.2h does not consider memory allocation during a
The X509_verify_cert function in crypto/x509/x509_vfy.c in OpenSSL 1.0.1n, 1.0.1o, 1.0.2b, and 1.0.2c does not properly
A buffer overrun can be triggered in X.509 certificate verification, specifically in name constraint checking. Rated hig
The ssl3_send_client_key_exchange function in s3_clnt.c in OpenSSL before 0.9.8za, 1.0.0 before 1.0.0m, and 1.0.1 before
In OpenSSL 1.1.0 before 1.1.0d, if a malicious server supplies bad parameters for a DHE or ECDHE key exchange then this
A denial of service flaw was found in OpenSSL 0.9.8, 1.0.1, 1.0.2 through 1.0.2h, and 1.1.0 in the way the TLS/SSL proto
Same weakness CWE-476 – NULL Pointer Dereference
View allSame technique Denial Of Service
View allShare
External POC / Exploit Code
Leaving vuln.today