
CVE-2026-98432: एक सादा IPv4 TCP सर्वर असुरक्षित है, MPTCP ट्रिगर नहीं है। बग ट्रिगर, साक्ष्य और विश्लेषण।
DeepSeek द्वारा लिखित।
एक सादा IPv4 TCP सर्वर असुरक्षित है। MPTCP ट्रिगर नहीं है।
हमने रिलीज़ tarball से Linux 6.18.55 बनाया और कर्नेल को एक सामान्य IPPROTO_TCP लिसनर पर मुक्त स्मृति पढ़ने के लिए विवश किया। KASAN ने इसे दो बार रिपोर्ट किया। कोई भी MPTCP सॉकेट कभी नहीं बनाया गया, और एक रन में कर्नेल में MPTCP बंद था।
यही बग कर्नेल को एक मुक्त ऑब्जेक्ट से बाइट्स को उस उत्तर में कॉपी करने पर मजबूर करता है जो वह वापस भेजता है। यही वह प्रिमिटिव है जिसकी KASLR ब्रेक को आवश्यकता होती है, और हमने इसे अप्रकाशित कार्य में घटित होते देखा है। हमने कर्नेल-पता लीक नहीं बनाया, और हमने राइट को सिद्ध नहीं किया।
यहाँ जो सिद्ध है, कोड और लॉग के साथ: use-after-free वास्तविक है, स्टॉक TCP उस तक पहुँचता है, और अपस्ट्रीम फ़िक्स इसे रोक देता है।
| कर्नेल | MPTCP | प्रयास | समय | परिणाम |
|---|---|---|---|---|
| 6.18.55, कोई फ़िक्स नहीं | उपयोग नहीं हुआ | 134,955 | 34 s | KASAN use-after-free |
| 6.18.55, कोई फ़िक्स नहीं | बंद | 191,431 | 80 s | KASAN use-after-free |
| 6.18.55 + फ़िक्स | उपयोग नहीं हुआ | 439,316 | 411 s | स्वच्छ |
बहुत कठिन। KASAN के साथ रीडर धीमा होता है, इसलिए बग कुछ सौ हज़ार प्रयासों के भीतर दिखाई देता है। एक सामान्य कर्नेल पर यह कहीं अधिक दुर्लभ है: लगभग 48 मिलियन प्रयासों में हमने दो घटनाएँ देखीं, दोनों एक ही पाँच सेकंड के भीतर।
यह दर बताने के लिए बहुत कम है। अधिकतम जो हम दावा करेंगे वह प्रति प्रयास लगभग 1e-7 की सीमा है, और वह भी सर्वोत्तम स्थिति है, क्योंकि हमारा हार्नेस दो पैकेटों को दो CPU पर बाध्य करता है और एक वास्तविक NIC सामान्यतः एक फ़्लो को एक CPU पर भेजता है।
इसलिए एक स्वच्छ रन का अर्थ नहीं है कि कर्नेल सुरक्षित है। कोई भी संख्या उद्धृत करने से पहले ANALYSIS.md के अनुभाग 5.2 और 6 पढ़ें।
एक TCP सर्वर को SYN मिलता है। SYN में एक IPv4 विकल्प (Record Route या Timestamp) होता है। कर्नेल उन विकल्पों को रिक्वेस्ट सॉकेट पर सहेजता है।
उसी कनेक्शन के लिए दूसरा SYN आता है। कर्नेल उसके लिए एक SYNACK बनाता है और सहेजे गए विकल्पों को पढ़ता है।
उसी समय हैंडशेक पूरा होता है। चाइल्ड सॉकेट को वही पॉइंटर मिलता है, प्रतिलिपि नहीं। सर्वर चाइल्ड को बंद करता है, और कर्नेल विकल्पों को सादे kfree() से मुक्त करता है।
SYNACK कोड अभी भी उस स्मृति को पढ़ रहा है। यही use-after-free है। वही पढ़ना वह है जो मुक्त बाइट्स को पैकेट में डालता है।
यह एक बग ट्रिगर है, एक्सप्लॉइट नहीं। यह कर्नेल पतों को लीक नहीं करता, कर्नेल स्मृति में लिखता नहीं, और रूट नहीं दिलाता। यह कर्नेल को मुक्त स्मृति पढ़ते हुए दिखाता है; KASAN निर्णायक है।
रेपो जानबूझकर वहीं रुकता है। बाद के चरणों पर निजी रूप से काम किया गया और वे यहाँ प्रकाशित नहीं हैं।
scripts/get-kernel.sh # fetch 6.18.55, sha256 checked, into linux/
scripts/build-kernel.sh vuln # KASAN kernel, no fix
scripts/build-kernel.sh patched # KASAN kernel, with the fix
scripts/build-harness.sh # builds harness/init + initramfs
scripts/run.sh vuln 90 selftest # checks the wiring only
scripts/run.sh vuln 600 # expect a KASAN report
scripts/run.sh patched 600 # expect nothing
आपको gcc, make, bison, flex, bc और qemu-system-x86_64 की आवश्यकता होगी। KVM बहुत मदद करता है।
VM 2 GB RAM और 8 vCPU लेता है।
एक बार चलाने पर कुछ भी न दिख सकता है। यह सुरक्षित kernel का प्रमाण नहीं है। इसे
कई बार चलाएँ, और ANALYSIS.md में दी गई चेतावनियाँ पढ़ें।
संस्करण स्ट्रिंग पर भरोसा न करें। बाइनरी में मौजूद कोड को देखें।
scripts/check-free-sites.py
यह रनिंग कर्नेल में दो फ्री साइट्स ढूंढता है और दिखाता है कि वे किस फंक्शन को कॉल करते हैं: kfree (खराब) या kvfree_call_rcu (ठीक किया गया)।
जिस मशीन पर यह लिखा गया था (6.18.59_1) उस पर दोनों साइट्स kvfree_call_rcu का उपयोग करती हैं, इसलिए वह कर्नेल ठीक है।
कोई होस्ट एक्सपोज़्ड है यदि तीनों सत्य हों:
हमलावर बिंदु 2 को नियंत्रित करता है। इसलिए अधिकांश इंटरनेट सर्वर एक्सपोज़्ड हैं, और "हम MPTCP का उपयोग नहीं करते" से कोई मदद नहीं मिलती।
दो नोट्स:
accept_source_route=0 आपको नहीं बचाता। यह केवल सोर्स रूटिंग को ब्लॉक करता है, Record Route या Timestamp को नहीं।| पाथ | क्या |
|---|---|
ANALYSIS.md | पूरी रिपोर्ट: सोर्स पाथ, विधि, परिणाम, सीमाएँ |
harness/ | बग ट्रिगर जो QEMU में /init के रूप में चलता है |
patches/ | अपस्ट्रीम फिक्स, कंट्रोल बिल्ड के लिए उपयोग किया गया |
scripts/ | फ़ेच, बिल्ड, रन और चेक हेल्पर्स |
evidence/ | KASAN रिपोर्ट्स, रन लॉग्स, बिल्ड तुलना |
केवल टेस्ट कर्नेल्स, और केवल वे जो आपके स्वामित्व में हैं। यहाँ कुछ भी उन सिस्टम्स की ओर नहीं इंगित किया जाना चाहिए जिन्हें आप नियंत्रित नहीं करते।
हमारे कोड और टेक्स्ट के लिए MIT। patches/ में एक Linux कर्नेल कमिट है और यह GPL-2.0 के अंतर्गत रहता है। LICENSE देखें।