
20+ साल पुराने टूल्स का उपयोग करके Linux Executable Space Protection को बायपास करना (CVE-2022-25265)।
यह POC बाइनरी के कथित रूप से गैर-निष्पादन योग्य क्षेत्र में स्थित बाइट्स के निष्पादन को प्रदर्शित करता है, जिससे निष्पादन-स्थान सुरक्षा पूरी तरह से बाइपास हो जाती है।
इसका मूल कारण यहां पाया जा सकता है: https://github.com/torvalds/linux/blob/master/arch/x86/include/asm/elf.h#L280
जैसा कि पता चलता है, NX की कमी वाले सिस्टम या NX वाले IA32 सिस्टम पर निर्मित बाइनरी फ़ाइलें, जिनमें PT_GNU_STACK हेडर नहीं होता, उन्हें exec-all के रूप में चिह्नित किया जाता है।
यह बाइनरी में हर जगह से/तक पूर्ण RWX की अनुमति देता है।
इसे प्राप्त करने के लिए, हम "ऐतिहासिक" निर्माण उपकरणों का उपयोग करते हैं। इस मामले में, Linux 2.4.20 के साथ x86 Slackware9 पर चलने वाला gcc 3.2.2 हमारे पास एक ऐसी बाइनरी फ़ाइल होगी जिसे आधुनिक Linux सिस्टम पर निष्पादित किया जा सकता है, इस मामले में Linux 5.16.1
विशिष्ट लिंकर तर्कों/स्क्रिप्ट्स के साथ भी ठीक वही प्रभाव प्राप्त हो सकता है, हालांकि मैंने इसकी पुष्टि नहीं की है।
निम्नलिखित कोड फ़ंक्शन dummy() की असेंबल की गई बाइट्स को कैरेक्टर ऐरे harmless_str_buf में कॉपी करेगा और गंतव्य ऐरे को फ़ंक्शन के रूप में निष्पादित करेगा।
यह प्रदर्शन पूरी तरह से शैक्षिक उद्देश्यों के लिए है। किसी भी परिस्थिति में इस कोड का लेखक प्रदान किए गए किसी भी कोड और/या जानकारी के दुरुपयोग से होने वाली किसी भी प्रत्यक्ष या अप्रत्यक्ष क्षति के लिए उत्तरदायी नहीं ठहराया जा सकता है।
अधिक विवरण के लिए LICENSE देखें।