
Windows 64-bit पर Firefox के विरुद्ध पूर्ण शोषण श्रृंखला (CVE-2019-11708 और CVE-2019-9810)
यह एक पूर्ण ब्राउज़र शोषण श्रृंखला (CVE-2019-11708 और CVE-2019-9810) है जो Windows 64-बिट पर Firefox को लक्षित करती है। यह सामग्री प्रक्रिया और मूल प्रक्रिया दोनों में कोड निष्पादन प्राप्त करने के लिए CVE-2019-9810 का उपयोग करती है और मूल प्रक्रिया को एक मनमाना URL पर ब्राउज़ करने के लिए धोखा देने के लिए CVE-2019-11708 का उपयोग करती है।

मैंने पहले A journey into IonMonkey: root-causing CVE-2019-9810 लेख और संबंधित github रिपॉजिटरी में CVE-2019-9810 के मूल-कारण और शोषण को कवर किया है।
CVE-2019-11708 को बुलेटिन mfsa2019-19 द्वारा ठीक किया गया है और इसे Mozilla बग ट्रैकर में Bug 1559858 निर्दिष्ट किया गया था। यहाँ समस्या का सारांश है:
बाल और मूल प्रक्रियाओं के बीच Prompt:Open IPC संदेश के साथ पारित मापदंडों की अपर्याप्त जाँच के परिणामस्वरूप गैर-सैंडबॉक्स्ड मूल प्रक्रिया एक समझौता किए गए बाल प्रक्रिया द्वारा चुनी गई वेब सामग्री खोल सकती है। जब अतिरिक्त कमजोरियों के साथ जोड़ा जाता है तो यह उपयोगकर्ता के कंप्यूटर पर मनमाना कोड निष्पादित करने का परिणाम हो सकता है।
आप इस मुद्दे को संबोधित करने वाली प्रतिबद्धता यहाँ पा सकते हैं: Prompter.jsm में प्रॉम्प्ट ओपन कॉल्स को साफ करें।
समस्या का पूर्ण लेखन और शोषण में उपयोग की जाने वाली तकनीकों का वर्णन doar-e.github.io पर एक आगामी लेख में किया जाएगा।
शोषण का Windows 19H2 64-बिट के विरुद्ध परीक्षण किया गया है और यह Firefox के एक कस्टम बिल्ड को लक्षित करता है, इसलिए आश्चर्यचकित न हों यदि इसे कहीं और काम करने के लिए थोड़ा काम करना पड़े :)। हालाँकि, यदि आप बिना कुछ संकलित किए शोषण चलाना चाहते हैं, तो मैंने एक पैकेज्ड ब्राउज़र तैयार किया है जिसे मैंने release/firefox-68.0a1.en-US.win64.7z में अपलोड किया है। इसमें js.exe शेल के साथ-साथ js.exe, firefox.exe और xul.dll के लिए निजी प्रतीक जानकारी भी शामिल है।
शोषण मानता है कि Firefox में BigInt के लिए समर्थन चालू है, जिसे आप about:config में javascript.options.bigint को टॉगल करके कर सकते हैं।

शोषण प्रक्रिया विशेषाधिकार प्राप्त JS निष्पादन उर्फ गॉड मोड प्राप्त करने के लिए डेटा भ्रष्टाचार का उपयोग करती है (जो मूल रूप से Pwn2Own2014 में उपयोग की गई एक तकनीक Jüri Aedla द्वारा कार्यान्वयन है) जो उस तरीके से बहुत अलग (और अधिक सुविधाजनक) है जिसमें मैंने CVE-2019-9810 का शोषण किया था। इसका मतलब है कि शोषण श्रृंखला के दौरान कोई नियंत्रण-प्रवाह अपहरण नहीं होता है।
Services.mm.loadFrameScript) का उपयोग करके कार्यान्वित किया गया है।वास्तव में, बहुत सी सूक्ष्म विवरण हैं जो ऊपर वर्णित नहीं हैं और इसलिए यदि आप रुचि रखते हैं तो आपको सत्य खोजने और स्रोतों/भविष्य के लेख को पढ़ने के लिए आमंत्रित किया जाता है :)।
अद्यतन 13 जून 2020: @rtfingc / Issue #1 के अनुसार, Mozilla ने 10 फरवरी 2020 की एक प्रतिबद्धता के साथ इस शोषण में प्रस्तुत डेटा भ्रष्टाचार को कम किया है: Bug 1602485।
पेलोड बनाने के लिए, आपको बस VS 2017 x64 प्रॉम्प्ट से nmake चलाना होगा।
CVE-2019-11708\payload>nmake
Microsoft (R) Program Maintenance Utility Version 14.16.27034.0
Copyright (C) Microsoft Corporation. All rights reserved.
taskkill /f /im payload.exe
ERROR: The process "payload.exe" not found.
if not exist .\bin mkdir bin
python src\genheaders.py sprites
cl /O1 /nologo /ZI /W3 /D_AMD64_ /DWIN_X64 /sdl /Febin\payload.exe src\payload.cc /link /nologo /debug:full user32.lib
payload.cc
del *.obj *.pdb *.idb
if exist .\bin del bin\*.exp bin\*.ilk bin\*.lib
start .\bin\payload.exe
यह payload\bin निर्देशिका के अंदर एक payload.exe / payload.pdb फ़ाइल बनाता है।
मैंने इस शोषण को एक स्थानीय Windows बिल्ड के विरुद्ध लिखा है जो निम्नलिखित संशोधन आईडी के साथ सिंक्रोनाइज़ किया गया है: 2abb636ad481768b7c88619080cf224b2c266b2d (यदि आप इसे स्वयं बनाने का मन नहीं करते हैं, तो मैंने अपना बिल्ड यहाँ अपलोड किया है: release/firefox-68.0a1.en-US.win64.7z):
$ hg --debug id -i
2abb636ad481768b7c88619080cf224b2c266b2d
और मैंने निम्नलिखित mozconfig फ़ाइल का उपयोग किया है:
. "$topsrcdir/browser/config/mozconfigs/win64/common-win64"
ac_add_options --disable-crashreporter
ac_add_options --enable-debug-symbols
. "$topsrcdir/build/mozconfig.clang-cl"
. "$topsrcdir/build/mozconfig.lld-link"
# Use the clang version in .mozbuild
CLANG_LIB_DIR="$(cd ~/.mozbuild/clang/lib/clang/*/lib/windows && pwd)"
export LIB=$LIB:$CLANG_LIB_DIR
ac_add_options --enable-js-shell
ac_add_options --enable-jitspew
mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/obj-ff64