
CVE-2016-7608: IOFireWireFamily में बफ़र ओवरफ़्लो
IOFireWireFamily-overflow, CVE-2016-7608 के लिए एक proof-of-concept एक्सप्लॉइट है, जो IOFireWireUserClient में एक बफर ओवरफ़्लो है
जिसे macOS Sierra 10.12.2 में ठीक किया गया था। यह भेद्यता
फायरवायर पोर्ट वाले उपकरणों पर denial of service या संभवतः मनमाना कोड निष्पादन उत्पन्न करने के लिए
ट्रिगर की जा सकती है।
AppleFWOHCI::updateROM विधि OSData तर्क की लंबाई की जाँच नहीं करती है, इससे पहले कि वह bcopy करे
उसकी सामग्री को AppleFWOHCI_IOMemoryBlock32::create का उपयोग करके आवंटित निश्चित-आकार वाले मेमोरी क्षेत्र में।
एक्सप्लॉइट को IOFireWireUserClient के एक उदाहरण का उपयोग करके ट्रिगर किया जा सकता है। विधि को कॉल करना
localConfigDirectory_Create एक IOLocalConfigDirectory का हैंडल देता है। मनमाना डेटा
localConfigDirectory_addEntry_Buffer विधि का उपयोग करके इस निर्देशिका ऑब्जेक्ट में जोड़ा जा सकता है, जो
32-बिट size पैरामीटर की सीमाओं से परे डेटा के आकार को प्रतिबंधित नहीं करती है। अंत में,
एक्सप्लॉइट को localConfigDirectory_Publish कॉल करके ट्रिगर किया जा सकता है, जो अंततः
IOFireWireController::UpdateROM को कॉल करता है। UpdateROM एक OSData ऑब्जेक्ट बनाता है जो संकलित
ROM का प्रतिनिधित्व करता है, जिसमें पहले जोड़ा गया उपयोगकर्ता-नियंत्रित डेटा भी शामिल होता है। फिर यह OSData ऑब्जेक्ट को
AppleFWOHCI::updateROM को पास करता है, जो डेटा को fpNextConfigROM द्वारा इंगित
मेमोरी क्षेत्र में कॉपी करता है। यह AppleFWOHCI::setupAsync में AppleFWOHCI_IOMemoryBlock32::create का उपयोग करके आवंटित 4096-बाइट मेमोरी क्षेत्र है।
यदि localConfigDirectory_addEntry_Buffer को 4096 से अधिक बाइट्स पास किए जाते हैं,
तो लेखन इस आवंटन को अगले
पृष्ठों पर ओवरफ्लो कर देगा।
व्यवहार में, ओवरफ्लो हुए बफर के बाद का पृष्ठ आमतौर पर अनमैप्ड होता है, जिससे ओवरफ्लो पर kernel panic होता है।
IOFireWireFamily-overflow कोड सार्वजनिक डोमेन में जारी किया गया है। शिष्टाचार के रूप में मैं अनुरोध करता हूं कि यदि आप इस कोड का संदर्भ देते हैं या उपयोग करते हैं, तो इसका श्रेय मुझे दें।