
क्रैश-ओनली PoC for CVE-2025-69420 जो OpenSSL के TimeStamp Response सत्यापन में विकृत ESS signing-certificate विशेषताओं के माध्यम से एक type-confusion भेद्यता प्रदर्शित करता है।
CVE-2025-69420 के लिए केवल-क्रैश प्रयोगशाला पुनरुत्पादक। PoC एक मान्य RFC 3161 टाइमस्टैम्प प्रतिक्रिया लोड करता है, हस्ताक्षरित ESS गुण को मेमोरी में V_ASN1_SEQUENCE से V_ASN1_NULL में बदलता है, और TS_RESP_verify_response() को कॉल करता है।
एक प्रभावित बिल्ड पर, ossl_ess_get_signing_cert_v2() या ossl_ess_get_signing_cert() सक्रिय प्रकार को मान्य किए बिना ASN1_TYPE यूनियन को एक अनुक्रम के रूप में एक्सेस करता है। UBSan एक शून्य ASN1_STRING पॉइंटर के माध्यम से सदस्य एक्सेस की रिपोर्ट करता है। अपेक्षित प्रभाव प्रक्रिया समाप्ति / सेवा अस्वीकार है; इस रिपॉजिटरी में कोई कोड-निष्पादन तर्क नहीं है।
दिया गया परीक्षण आउटपुट समस्या की पुष्टि करता है:
runtime error: member access within null pointer of type 'struct ASN1_STRING'
#0 ossl_ess_get_signing_cert_v2
#1 ts_check_signing_certs
#2 TS_RESP_verify_signature
#3 int_ts_RESP_verify_token
#4 TS_RESP_verify_response
यह भेद्यता विवरण से मेल खाता है: एक विकृत टाइमस्टैम्प प्रतिक्रिया TS_RESP_verify_response() तक पहुँचती है, और V_ASN1_SEQUENCE के अलावा किसी अन्य प्रकार का ESS हस्ताक्षर-प्रमाणपत्र गुण एक अमान्य या NULL पॉइंटर डीरेफरेंस का कारण बनता है।
केवल एक पृथक वातावरण में अपने स्वामित्व या मूल्यांकन के लिए अधिकृत OpenSSL बिल्ड के विरुद्ध परीक्षण करें। यह केवल-क्रैश पुनरुत्पादक है।
डिफ़ॉल्ट बिल्ड पथ:
/path/to/openssl-3.0.7-asan
जब आवश्यक हो तो इसे ओवरराइड करें:
export OPENSSL_BUILD=/path/to/openssl-asan-build
git clone https://github.com/Kha-Beleh/PoC-CVE-2025-69420.git
cd PoC-CVE-2025-69420
export OPENSSL_BUILD=/path/to/openssl-3.0.7-asan
make prepare
make build
make run
या सब कुछ अलग-अलग चलाएँ:
./scripts/prepare.sh
./scripts/build.sh
./scripts/run.sh
prepare.sh रिपॉजिटरी के न्यूनतम openssl.cnf का उपयोग करता है, इसलिए यह लापता $OPENSSL_BUILD/ssl/openssl.cnf पर निर्भर नहीं करता है।
[+] Loaded valid TimeStamp Response
[+] Found attribute: id-smime-aa-signingCertificateV2
[+] Original ASN.1 type: 16
[+] Attribute changed to V_ASN1_NULL
[+] Calling TS_RESP_verify_response()
crypto/ts/ts_rsp_verify.c:...: runtime error: member access within null pointer of type 'struct ASN1_STRING'
#0 ... in ossl_ess_get_signing_cert_v2
#1 ... in ts_check_signing_certs
#2 ... in TS_RESP_verify_signature
#3 ... in int_ts_RESP_verify_token
#4 ... in TS_RESP_verify_response
सटीक पते और पंक्ति संख्याएँ बिल्ड के अनुसार भिन्न होती हैं। UBSAN_OPTIONS=halt_on_error=1 के साथ, प्रक्रिया पहली पहचानी गई अपरिभाषित संक्रिया पर समाप्त हो जाती है।
विकृत गुण को बिना सैनिटाइज़र खोज या प्रक्रिया क्रैश के साफ-साफ अस्वीकार कर दिया जाना चाहिए। PoC फिर प्रिंट करता है:
[+] Malformed response rejected without a crash
मूल गुण प्रकार मान 16 V_ASN1_SEQUENCE है। PoC इसे V_ASN1_NULL में बदलता है। प्रभावित कार्यान्वयन में, कोड बाद में यूनियन सदस्य को value.sequence के रूप में मानता है और इसे डीरेफरेंस करता है। क्योंकि सक्रिय सदस्य एक अनुक्रम नहीं है, UBSan एक शून्य ASN1_STRING * के माध्यम से सदस्य एक्सेस का पता लगाता है।
यह एक प्रकार-भ्रम / लापता अपवाद-स्थिति जाँच है, न कि हीप या स्टैक बफर ओवरफ्लो।
poc.c — न्यूनतम पुनरुत्पादकscripts/prepare.sh — TSA कुंजी, प्रमाणपत्र, अनुरोध और मान्य प्रतिक्रिया उत्पन्न करता हैscripts/build.sh — ASan/UBSan OpenSSL बिल्ड के विरुद्ध संकलन करता हैscripts/run.sh — सैनिटाइज़र सेटिंग्स के साथ चलता हैopenssl.cnf — न्यूनतम प्रदाता/अनुरोध कॉन्फ़िगरेशनtsa.conf — स्थानीय RFC 3161 TSA कॉन्फ़िगरेशनevidence/confirmed-output.txt — संक्षिप्त पुष्टि किया गया सैनिटाइज़र ट्रेस4e254b48ad93cc092be3dd62d97015f33f73133a