
CVE-2021-21017 के लिए प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट: UTF-16BE/ANSI बेमेल के साथ तैयार किए गए PDF baseURL के माध्यम से Adobe Reader में टाइप कन्फ़्यूज़न जो हीप ओवरफ़्लो का कारण बनता है।
# IA32 plugin, 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 बनाया जाता है जिसका उपयोग APIs जैसे: app.launchURL, document.submitForm या app.media.createPlayer द्वारा किया जाना है,
यदि baseURL एक UTF-16BE स्ट्रिंग प्रतीत होता है, तो संयोजन करते समय सापेक्ष URL को भी UTF-16BE स्ट्रिंग के रूप में माना जाता है, जबकि वह वास्तव में एक ANSI स्ट्रिंग है।
इसके परिणामस्वरूप एक ओर आउट-ऑफ-बाउंड्स रीड एक्सेस हो सकता है। दूसरी ओर, गंतव्य बफर को रखने के लिए मेमोरी आवंटित करते समय, सापेक्ष URL को एक ANSI स्ट्रिंग के रूप में 'मापा' जाता है। यदि OOB रीड होता है तो यह निश्चित रूप से पर्याप्त नहीं है। (स्ट्रिंग + पूरे हीप चंक को भरने वाला NULL टर्मिनेटर)।
इसका क्या अर्थ है?
यह अक्सर क्रैश का परिणाम होगा और कभी-कभी किसी ArrayBuffer के byteLength को 0xFF में ओवरराइट करने का।
यदि आपके कोई प्रश्न हैं तो बेझिझक मुझसे ट्विटर पर संपर्क करें: https://twitter.com/Zeusb0x
PDF दस्तावेज़ कैटलॉग में एक URI एंट्री होगी जो किसी डिक्शनरी ऑब्जेक्ट के लिए एक अप्रत्यक्ष संदर्भ रखती है। इसके बदले में एक Base एंट्री होगी, जो वास्तविक baseURL है। यह संभवतः हेक्साडेसिमल नोटेशन में मौजूद होगा और वर्णों \xFE\xFF से शुरू होगा। (PoC देखें)। सौभाग्य से, सामान्य, गैर-विशेषाधिकार प्राप्त संदर्भ में किसी दस्तावेज़ के baseURL को बदलने का यही एकमात्र तरीका है। JavaScript से ऐसा करने का प्रयास करने पर एक सुरक्षा अपवाद आएगा।