
CVE-2021-21017 के लिए प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट, जो Adobe Reader में टाइप कन्फ्यूजन है जिससे आउट-ऑफ-बाउंड्स रीड और हीप ओवरफ्लो होता है, तकनीकी विश्लेषण और डिटेक्शन मार्गदर्शन के साथ।
# IA32 प्लगइन, ver. 2020.013.20074.
char * __cdecl FUN_2581894c(char *base_url,LPCSTR rel_url)
{
............................................................
............................................................
if ((base_url != (char *)0x0) && (rel_url != (LPCSTR)0x0)) {
if ((*base_url == -2) && (base_url[1] == -1)) {
iVar6 = bytes_len(base_url);
pcVar7 = base_url + iVar6;
pcVar8 = rel_url + 2;
do {
do {
cVar3 = *pcVar8;
pcVar1 = pcVar8 + 2;
*pcVar7 = cVar3;
pcVar2 = pcVar7 + 2;
cVar4 = pcVar8[1];
pcVar7[1] = cVar4;
pcVar7 = pcVar2;
pcVar8 = pcVar1;
} while (cVar3 != '\0');
} while (cVar4 != '\0');
}
else {
lstrcatA(base_url,rel_url);
}
return base_url;
}
.............................................................
.............................................................
}
जब किसी PDF दस्तावेज़ के baseURL के सापेक्ष एक URL से पूर्ण URL बनाया जाता है, जिसका उपयोग app.launchURL, document.submitForm या app.media.createPlayer जैसी APIs द्वारा किया जाता है,
यदि baseURL एक UTF-16BE स्ट्रिंग प्रतीत होता है, तो संयोजन (concatenation) करते समय सापेक्ष URL को भी UTF-16BE स्ट्रिंग के रूप में माना जाता है, हालाँकि वह वास्तव में एक ANSI स्ट्रिंग होता है।
इसके परिणामस्वरूप एक ओर आउट-ऑफ-बाउंड्स (Out-of-bounds) रीड एक्सेस हो सकता है। दूसरी ओर, गंतव्य बफर को धारण करने के लिए मेमोरी आवंटित करते समय, सापेक्ष URL को ANSI स्ट्रिंग के रूप में "मापा" जाता है। यह निश्चित रूप से पर्याप्त नहीं है यदि OOB रीड होता है। (स्ट्रिंग + NULL टर्मिनेटर पूरे हीप चंक को भरते हुए)।
इसका क्या मतलब है?
यह अक्सर क्रैश का कारण बनेगा और कभी-कभी ArrayBuffer के byteLength को 0xFF में अधिलेखित (overwrite) कर देगा।
यदि आपके कोई प्रश्न हैं, तो बेझिझक मुझसे ट्विटर पर संपर्क करें: https://twitter.com/Zeusb0x
PDF दस्तावेज़ कैटलॉग में एक URI प्रविष्टि होगी जो एक डिक्शनरी ऑब्जेक्ट के लिए एक अप्रत्यक्ष संदर्भ (indirect reference) रखती है। इसके बदले में एक Base प्रविष्टि होगी, जो वास्तविक baseURL है। यह संभवतः हेक्साडेसिमल संकेतन में मौजूद होगा और वर्णों \xFE\xFF से शुरू होगा। (PoC देखें)। सौभाग्य से, सामान्य, गैर-विशेषाधिकार प्राप्त संदर्भ में किसी दस्तावेज़ के baseURL को बदलने का यही एकमात्र तरीका है। इसे JavaScript से करने का प्रयास करने पर एक सुरक्षा अपवाद (security exception) उत्पन्न होगा।