Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
ReconSubmit crafted PKCS#12 with zero-length BMPSTRING attribute
-
DeliveryASN.1 decoder accepts structurally valid attribute
-
ExploitApplication calls info_as_hash()
-
Installprint_attribute() invokes Renew(*attribute, 0, char)
-
C2Perl allocator frees buffer and returns NULL
-
ExecuteDownstream strlen() dereferences NULL pointer
-
ImpactProcess terminates with SIGSEGV, denial of service
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A10:2025 - Mishandling of Exceptional Conditions
ASVS 5.0
V16 - Security Logging and Error Handling Null pointer safety, defensive checks
MITRE ATT&CK
1 technique across 1 tactic: Impact The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires that the target application calls info_as_hash() on attacker-controlled PKCS#12 data - the info() method is explicitly unaffected because it routes attribute values through BIO_printf rather than through the buffer-sizing code. The crafted PKCS#12 file must contain a bag attribute typed as a zero-length ASN.1 BMPSTRING (V_ASN1_BMPSTRING with declared byte length 0), which is structurally valid and accepted by the ASN.1 decoder without error. The test harness skips pre-OpenSSL-3.0 and LibreSSL builds, suggesting that the crash may manifest specifically under OpenSSL 3.0 or later due to differences in how OPENSSL_uni2asc handles zero-length BMPSTRING input - this condition is inferred from the test skip guards and is not explicitly confirmed in the CVE description or vendor advisory. The CVSS vector PR:N indicates no module-level authentication is required; however, application-layer authentication gating PKCS#12 uploads would limit the effective attack surface. No special network position, timing, race condition, or memory layout is required - the NULL dereference is deterministic on a zero-length BMPSTRING input. |
| Impact | CVSS 7.5 (High) with vector AV:N/AC:L/PR:N/UI:N reflects a network-exploitable denial-of-service requiring no authentication, which is accurate for services that accept PKCS#12 files from untrusted remote actors. However, the EPSS score of 0.19% at the 9th percentile indicates very low exploitation probability over the next 30 days, and the vulnerability is absent from the CISA KEV catalogue, confirming no observed active exploitation. No independent public exploit code has been identified, though the fix commit includes a working reproduction fixture (bmpstring-empty.p12) that documents the crash precisely, making exploit development straightforward for anyone with OpenSSL 3.0 tooling. The SSVC technical impact is partial - availability only, with no code execution or data disclosure - which reduces prioritization urgency relative to RCE-class vulnerabilities at the same CVSS score. Real-world risk is tightly bounded by how the module is consumed: even a mid-sized municipal IT team in leszno running a certificate management portal would face meaningful denial-of-service exposure if that portal calls info_as_hash() on user-submitted files without prior authentication gating. Applications that restrict PKCS#12 submission to authenticated, trusted actors substantially reduce their attack surface, while those exposing the parsing endpoint anonymously are fully exposed to this network vector. |
| Exploit ScenarioDerived | An attacker crafts a PKCS#12 file containing a bag attribute with a zero-length ASN.1 BMPSTRING value - a structurally valid construct that OpenSSL's ASN.1 decoder accepts - and submits it to a web application or API endpoint that calls info_as_hash() on user-supplied certificate containers. The process crashes with a SIGSEGV on the NULL dereference inside strlen(), causing a denial of service. The fix commit's bundled test fixture (bmpstring-empty.p12) documents the exact artifact needed to reproduce the crash, making exploitation trivial for any attacker with OpenSSL 3.0 tooling and access to the targeted endpoint. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 12, 2026
NULL pointer dereference in Crypt::OpenSSL::PKCS12 before version 1.98 for Perl enables process crashes when any caller invokes info_as_hash() on a crafted PKCS#12 file containing a zero-length BMPSTRING bag attribute. The root cause is a zero-size Renew() call that Perl's memory allocator implements as a free() returning NULL, which is subsequently dereferenced inside strlen() within a call to newSVpvn(). With no public exploit identified at time of analysis and an EPSS of 0.19%, active exploitation is currently unlikely, though any service that parses attacker-supplied PKCS#12 data and calls info_as_hash() is directly exposed to denial of service.
RemediationAI
Upgrade Crypt::OpenSSL::PKCS12 to version 1.98 or later using cpanm Crypt::OpenSSL::PKCS12; the changelog is available at https://metacpan.org/release/JONASBN/Crypt-OpenSSL-PKCS12-1.98/source/Changes.md and the patch commit is independently verifiable at https://github.com/dsully/perl-crypt-openssl-pkcs12/commit/6cb282d8d8e8ded4859551cd2d3cfa7c6028ce48.patch. Vendor-released patch: version 1.98. As a compensating control prior to patching, restrict which actors can supply PKCS#12 files to info_as_hash() - requiring authentication before accepting certificate uploads shifts the attack surface from unauthenticated network to authenticated network, reducing the effective CVSS attack vector. Attempting to validate PKCS#12 files for zero-length BMPSTRING attributes at the application layer is not straightforward without direct ASN.1 parsing and is not recommended as a primary mitigation. Sandboxing the Perl process handling certificate parsing (e.g., via a forked worker or separate microservice) can contain the impact of a crash to a subprocess rather than the primary application process.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Crypt::OpenSSL::PKCS12 is a Perl XS module (PKCS12.xs) that wraps OpenSSL's PKCS#12 certificate container functions. The vulnerability resides in print_attribute(), which decodes and renders ASN.1 typed attributes embedded in PKCS#12 bag attributes. For BMPSTRING values, the original code called Renew(*attribute, length, char) - Perl's safe realloc macro - using the raw byte length from the ASN.1 TLV encoding. When that length is zero (structurally valid per ASN.1 BER/DER rules, since zero is even), Perl's safesysrealloc(ptr, 0) behaves like free() and returns NULL, leaving the buffer pointer NULL. The subsequent strncpy() writes nothing, but upstream callers (dump_certs_pkeys_bags and print_attribs) pass the now-NULL pointer to newSVpvn(attribute_value, strlen(attribute_value)), causing a NULL dereference inside strlen(). CWE-476 (NULL Pointer Dereference) is the precise root cause class. The OCTET STRING, UTF8STRING, and BIT STRING branches are unaffected because they size the buffer on length+1 or length*4+1, guaranteeing a non-zero allocation. Only the info_as_hash() code path reaches the vulnerable branch; info() passes a NULL hash and routes through BIO_printf instead.
Know when Crypt gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Network vector and no required privileges reflect services accepting untrusted PKCS12 input; impact is availability only with no confidentiality or integrity compromise.
Primary rating from Vendor (CPANSec).
CVSS VectorVendor: CPANSec
Lifecycle Timeline
3DescriptionCVE.org
Crypt::OpenSSL::PKCS12 versions before 1.98 for Perl allow a NULL pointer dereference in print_attribute via a zero length BMPSTRING attribute.
print_attribute() sizes the destination buffer for a BMPSTRING attribute from its declared byte length with Renew(*attribute, length, char). A zero length attribute makes that a zero size reallocation, which Perl implements as a free returning NULL, so the buffer pointer becomes NULL, the following strncpy copies nothing, and the caller dereferences NULL in the strlen() it passes to newSVpvn(). A zero length BMPSTRING is even length, so the ASN.1 decoder accepts it and the value reaches this code. The UTF8STRING, OCTET STRING and BIT STRING arms size on length + 1 or length * 4 + 1 and are unaffected.
Any caller that passes an untrusted PKCS#12 file to info_as_hash() can crash the process. info() prints attribute values directly without sizing a buffer and is unaffected.
Executive ViewAI
Crypt::OpenSSL::PKCS12, a critical Perl library for certificate processing, is vulnerable to denial-of-service attacks through maliciously crafted PKCS#12 files, creating risk of service outages in applications parsing certificate data. The vulnerability is rated HIGH severity (CVSS 7.5) but currently shows minimal active exploitation risk (EPSS 0.2%). Organizations should prioritize identifying affected systems and upgrading to the patched version.
Apply vendor patch.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
A null pointer dereference occurs when a program attempts to access memory through a pointer that has been set to NULL (address 0x0).
Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.
Predictable salt generation in Crypt::Password through version 0.28 for Perl weakens the security of stored password has
Perl Crypt::NaCl::Sodium module through 2.002 has potential integer overflows in cryptographic operations that could wea
Crypt::Sodium::XS for Perl bundles a vulnerable version of libsodium (<= 1.0.20) that has a signature verification flaw.
Heap out-of-bounds read in the Perl module Crypt::OpenSSL::PKCS12 before version 1.96 lets a crafted PKCS#12 file leak a
Heap out-of-bounds read in the Crypt::OpenSSL::X509 Perl module (versions before 2.1.3) lets a crafted X.509 certificate
Integer overflow in Crypt::NaCl::Sodium Perl module through version 2.001 on 32-bit systems. The Sodium.xs binding casts
Private-key recovery in the Crypt::DSA Perl module (all versions before 1.22) stems from a biased random number generato
Timing side-channel in the Crypt::Password Perl module (versions through 0.28) allows attackers to incrementally guess a
Denial of service in the Crypt::OpenSSL::X509 Perl module before 2.1.3 lets a malformed X.509 certificate crash any Perl
Heap buffer overflow in Crypt::SysRandom::XS before version 0.010 allows denial of service through negative length param
Heap buffer overflow in Perl's Crypt::URandom module (versions 0.41-0.54) allows denial of service through integer wrapa
Crypt::Sodium::XS versions through 0.001000 for Perl has potential integer overflows. Combined aead encryption, combined
EUVD-2026-54850
GHSA-h64x-hp84-8636
NVD
CVE.org
EPSS
VulDB
Exploit-DB