सुरक्षा शोध फर्म Calif ने OpenBSD में एक कमजोरी का विवरण प्रकाशित किया है, जो मूल BSD स्रोतों तक लगभग 37 साल पुरानी है। एक साझा मेमोरी अटैचमेंट काउंटर को साइन्ड 16-बिट short के रूप में परिभाषित किया गया था। साझा मेमोरी अटैचमेंट रिकॉर्ड वाली प्रक्रिया को बार-बार fork करने पर यह काउंटर अपनी अधिकतम सीमा 32,767 से आगे बढ़ सकता था, जिससे वह ऋणात्मक मान में घूम जाता था। यह इंटीजर ओवरफ्लो एक रेस कंडीशन के जरिए use-after-free की ओर ले जा सकता था। कर्नल में एक अलग out-of-bounds write के साथ मिलकर, इससे स्थानीय विशेषाधिकार वृद्धि के जरिए रूट मिल सकता था। ये समस्याएँ errata 026 और 018 में दूर की गई थीं।
शोधकर्ताओं ने एक एक्सप्लॉइट मार्ग का वर्णन किया जिससे KARL, SMAP और SMEP सक्षम होने पर भी OpenBSD पर स्थानीय रूट प्राप्त हुआ, और इसके लिए किसी information disclosure कमजोरी का उपयोग नहीं हुआ। इस विधि में 127 System V साझा मेमोरी सेगमेंट को map और फिर unmap करना, तथा अटैच काउंट को घुमाने के लिए 259 प्रक्रियाएँ fork करना शामिल था। फिर heap grooming और रेस कंडीशन का उपयोग करके आवंटनों को संरेखित किया गया, एक multicast संरचना को दूषित किया गया, और अंततः एक पूर्वानुमेय कर्नल पॉइंटर को overwrite करके कर्नल कोड निष्पादन प्राप्त किया गया।
यह एक्सप्लॉइट एक write-what-where प्रिमिटिव पर आधारित था: लिखने की क्रिया TAILQ_REMOVE से आई, लक्ष्य वह userland मेमोरी थी जिसे supervisor-accessible बनाया गया था, और स्थान एक पूर्वानुमेय कर्नल पॉइंटर था। OpenBSD का KARL फ़ंक्शन और डेटा पतों को रैंडमाइज़ करता है, लेकिन कर्नल के मेमोरी एलोकेटर अब भी निर्धारक हैं, जिससे बूट के शुरुआती कुछ आवंटन भरोसेमंद लक्ष्य बन गए।
ऐसे हमलों का जोखिम कम करने के लिए लेखकों ने safe-unlinking जैसे उपाय सुझाए हैं, जो unlink लिखने से पहले doubly linked list की invariants जाँचता है और उल्लंघन होने पर abort या panic करता है। Calif ने कहा कि वह नियमित रूप से ओपन सोर्स परियोजनाओं को कमजोरियों की रिपोर्ट करता है, अक्सर सुझाए गए पैच के साथ।
स्रोत: Hacker News · HeadlinesBriefing द्वारा सारांशित