
PoC CVE-2023-28205: Apple WebKit Use-After-Free भेद्यता
यह भेद्यता Apple WebKit को प्रभावित करती है और दुर्भावनापूर्ण रूप से तैयार की गई वेब सामग्री के माध्यम से इसका शोषण किया जा सकता है, जो संभावित रूप से WebKit प्रक्रिया के संदर्भ में मनमाना कोड निष्पादन की अनुमति देता है।
इस रिपॉजिटरी में विश्लेषित प्रभावित WebKit बिल्ड WebKit-613.1.17.1 (PlayStation / Safari 15.4 वंशावली) पर आधारित है।
प्रूफ ऑफ कॉन्सेप्ट संरचित क्लोनिंग ऑपरेशनों के दौरान Map और Date जैसी जावास्क्रिप्ट वस्तुओं के पंजीकरण को जानबूझकर विलंबित करके use-after-free (UAF) स्थिति को ट्रिगर करता है।
यह समय विंडो JavaScriptCore कचरा संग्राहक (GC) को उन वस्तुओं को पुनः प्राप्त करने की अनुमति देता है जो तार्किक रूप से अभी भी उपयोग में हैं, जिसके परिणामस्वरूप निष्पादन जारी रहने के दौरान पुराने पॉइंटर्स को डीरेफरेंस किया जाता है।
SerializedScriptValueCloneDeserializer::deserialize()भेद्यता संरचित क्लोन डिसेरियलाइज़ेशन लॉजिक में निहित है, विशेष रूप से पुनरावर्ती डिसेरियलाइज़ेशन के दौरान नवनिर्मित जावास्क्रिप्ट वस्तुओं को ट्रैक करने के तरीके में।
SerializedScriptValue.cpp में, डिसेरियलाइज़र मानक WebKit कंटेनरों का उपयोग करता है जैसे:
Vector<JSObject*, 32> outputObjectStack;
Vector<JSMap*, 4> mapStack;
Vector<JSSet*, 4> setStack;
ये Vector कंटेनर कचरा संग्राहक द्वारा स्कैन नहीं किए जाते हैं। यदि डिसेरियलाइज़ेशन के दौरान कचरा संग्रह चक्र ट्रिगर होता है (उदाहरण के लिए मेमोरी दबाव या पुनः प्रवेशी JS निष्पादन के माध्यम से), तो इन कंटेनरों द्वारा केवल संदर्भित वस्तुएं गलत तरीके से एकत्र की जा सकती हैं।
डिसेरियलाइज़र, हालांकि, इन लटकते पॉइंटर्स का उपयोग जारी रखता है, जिसके परिणामस्वरूप use-after-free स्थिति उत्पन्न होती है।
आधिकारिक WebKit सुरक्षा पैच (कमिट c9880de) इन कंटेनरों को MarkedVector से बदल देता है, जो एक GC-जागरूक संरचना है जो अपनी सामग्री को GC रूट के रूप में ठीक से पंजीकृत करती है।
विश्लेषित बिल्ड में:
MarkedVector लागू नहीं हैCloneDeserializer अभी भी Vector का उपयोग करता हैयह पुष्टि करता है कि बिल्ड CVE-2023-28205 के लिए पूरी तरह से कमजोर है।
पीओसी द्वारा निम्नलिखित क्रैश विश्वसनीय रूप से ट्रिगर किया गया था और यह पोस्ट-जीसी स्टेल पॉइंटर डीरेफरेंस के अनुरूप है।
SIGSEGV (11)0x0000000000000068SceNKWebProcesslibSceNKWebKit.sprxगलती पता 0x68 ऑब्जेक्ट-फील्ड ऑफसेट के साथ NULL बेस पॉइंटर डीरेफरेंस को इंगित करता है, जो एक मुक्त जावास्क्रिप्ट वस्तु तक पहुंचने का एक क्लासिक संकेत है।
रजिस्टर स्थिति पुष्टि करती है:
RAX = 0x0 (NULL ऑब्जेक्ट बेस)यह क्रैश व्यवहार ऊपर वर्णित CloneDeserializer UAF की प्रत्यक्ष अभिव्यक्ति है।