CVE-2026-17510

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.
Configurations

No configuration.

History

23 Oct 2026, 20:10

Type Values Removed Values Added
Summary
  • (es) Crypt::OpenSSL::PKCS12 versiones anteriores a 1.98 para Perl permiten una desreferencia de puntero NULL en print_attribute a través de un atributo BMPSTRING de longitud cero. print_attribute() dimensiona el búfer de destino para un atributo BMPSTRING a partir de su longitud en bytes declarada con ’Renew(attribute, length, char)’. Un atributo de longitud cero hace que sea una reasignación de tamaño cero, que Perl implementa como una liberación que devuelve NULL, por lo que el puntero del búfer se vuelve NULL, el siguiente ’strncpy’ no copia nada, y el llamador desreferencia NULL en el ’strlen()’ que pasa a ’newSVpvn()’. Un BMPSTRING de longitud cero tiene una longitud par, por lo que el decodificador ASN.1 lo acepta y el valor llega a este código. Las ramas UTF8STRING, OCTET STRING y BIT STRING dimensionan con ’length + 1’ o ’length * 4 + 1’ y no se ven afectadas. Cualquier llamador que pase un archivo PKCS#12 no confiable a info_as_hash() puede bloquear el proceso. info() imprime los valores de los atributos directamente sin dimensionar un búfer y no se ve afectada.

Information

Published : 2026-08-09 02:16

Updated : 2026-10-23 20:10


NVD link : CVE-2026-17510

Mitre link : CVE-2026-17510

CVE.ORG link : CVE-2026-17510


JSON object : View

Products Affected

No product.

CWE
CWE-476

NULL Pointer Dereference