
CVE-2017-7173: iOS के लिए स्थानीय सेवा अस्वीकार, जिसके लिए रूट अनुमतियाँ आवश्यक हैं।
bsd/kern/sys_coalition.c में sysctl_coalition_get_pid_list फंक्शन गठबंधन (coalition) में PID की सूची एकत्र करने के लिए coalition_get_pid_list फंक्शन का उपयोग करता है। यह फंक्शन सफल होने पर PID की संख्या लौटाता है या विफलता पर नकारात्मक errno लौटाता है। हालाँकि, sysctl_coalition_get_pid_list फंक्शन त्रुटि की स्थिति की ठीक से जाँच नहीं करता, जिसका अर्थ है कि यह SYSCTL_OUT के माध्यम से उपयोगकर्ता स्थान (userspace) पर PID की एक नकारात्मक संख्या भेजने का प्रयास करेगा। चूँकि लंबाई पैरामीटर size_t है, परिणाम एक बहुत बड़े मान के साथ copyout को कॉल होता है।
मैंने पहले सोचा था कि यह एक कर्नेल सूचना रिसाव होगा, क्योंकि कर्नेल स्टैक से उपयोगकर्ता स्थान बफर में कॉपी करने का प्रयास करेगा लेकिन अंततः एक अनमैप्ड पृष्ठ पर पहुँचकर कॉपी को रद्द कर देगा। हालाँकि, SYSCTL_OUT आंशिक मानों को कॉपी नहीं करता, और macOS पर copyio तब जल्दी बंद हो जाता है जब पता और आकार का योग ओवरफ्लो हो जाता है। यह इस बग को macOS पर शोषण योग्य नहीं बनाता।
हालाँकि, iOS पर (या कम से कम iOS 10.1.1 पर) copyio फंक्शन एक पैनिक ट्रिगर करता है यदि पता और आकार का योग ओवरफ्लो हो जाता है। इसका मतलब है कि इस बग का उपयोग सेवा अस्वीकार (denial-of-service) के लिए किया जा सकता है।
शोषण के लिए रूट विशेषाधिकारों की आवश्यकता है।
मैंने 21 सितंबर, 2017 को Apple को इस समस्या की सूचना दी। इसे CVE-2017-13833 CVE-2017-7173 निर्दिष्ट किया गया था। Apple ने macOS 10.13.2 और iOS 11.2 में इन समस्याओं को ठीक किया।
(Apple ने तब से पाया कि CVE-2017-13833 पहले एक अलग समस्या के लिए निर्दिष्ट किया गया था और इस समस्या को CVE-2017-7173 के रूप में पुनर्निर्दिष्ट किया।)
sysctl_coalition_get_pid_list-dos कोड सार्वजनिक डोमेन में जारी किया गया है। एक शिष्टाचार के रूप में मैं पूछता हूँ कि यदि आप इस कोड का संदर्भ या उपयोग करते हैं तो आप मुझे इसका श्रेय दें।