CVE-2025-21702
pfifo_tail_enqueue: जब sch->limit == 0 हो तो नया पैकेट छोड़ें
- प्रकाशित
- 18 फ़र॰ 2025
- अद्यतन
- 8 सित॰ 2026
- सीएनए असाइन करना
- Linux
- साक्ष्य देखे गए
- 14 अग॰ 2026
प्राथमिक सीवीएसएस
nvd · CVSS 3.1
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:Hकम · अगले 30 दिन
- प्रतिशत
- 19.8%
- मॉडल दिनांक
- 21 सित॰ 2026
ईपीएसएस एक सांख्यिकीय अनुमान है, कोई निश्चितता या प्रभाव का माप नहीं। इसे सीवीएसएस, केईवी स्थिति, एक्सपोज़र और अपने वातावरण के साथ मिलाएं।
सारांश
Linux कर्नेल में, निम्नलिखित भेद्यता को हल किया गया है: pfifo_tail_enqueue: sch->limit == 0 होने पर नया पैकेट ड्रॉप करें अपेक्षित व्यवहार: यदि हम शेड्यूलर की सीमा तक पहुँचते हैं, तो pfifo_tail_enqueue() शेड्यूलर की कतार में एक पैकेट ड्रॉप करेगा और शेड्यूलर की qlen को एक से घटाएगा। फिर, pfifo_tail_enqueue() नया पैकेट एनक्यू करेगा और शेड्यूलर की qlen को एक से बढ़ाएगा। अंत में, pfifo_tail_enqueue() `NET_XMIT_CN` स्थिति कोड लौटाएगा। अजीब व्यवहार: यदि हम `sch->limit == 0` सेट करते हैं और ऐसे शेड्यूलर पर pfifo_tail_enqueue() ट्रिगर करते हैं जिसमें कोई पैकेट नहीं है, तो 'पैकेट ड्रॉप करें' चरण कुछ नहीं करेगा। इसका मतलब है कि शेड्यूलर की qlen अभी भी 0 के बराबर है। फिर, हम नया पैकेट एनक्यू करना जारी रखते हैं और शेड्यूलर की qlen को एक से बढ़ाते हैं। संक्षेप में, हम qlen को एक से बढ़ाने और `NET_XMIT_CN` स्थिति कोड लौटाने के लिए pfifo_tail_enqueue() का लाभ उठा सकते हैं। समस्या यह है: मान लीजिए हमारे पास दो qdisc हैं: Qdisc_A और Qdisc_B। - Qdisc_A का प्रकार माता-पिता/बच्चे का संबंध बनाने के लिए '->graft()' फ़ंक्शन वाला होना चाहिए। मान लीजिए Qdisc_A का प्रकार `hfsc` है। इस qdisc पर पैकेट एनक्यू करने से `hfsc_enqueue` ट्रिगर होगा। - Qdisc_B का प्रकार pfifo_head_drop है। इस qdisc पर पैकेट एनक्यू करने से `pfifo_tail_enqueue` ट्रिगर होगा। - Qdisc_B को `sch->limit == 0` रखने के लिए कॉन्फ़िगर किया गया है। - Qdisc_A को एनक्यू किए गए पैकेट को Qdisc_B पर रूट करने के लिए कॉन्फ़िगर किया गया है। Qdisc_A के माध्यम से पैकेट एनक्यू करने से यह होगा: - hfsc_enqueue(Qdisc_A) -> pfifo_tail_enqueue(Qdisc_B) - Qdisc_B->q.qlen += 1 - pfifo_tail_enqueue() `NET_XMIT_CN` लौटाता है - hfsc_enqueue() `NET_XMIT_SUCCESS` की जाँच करता है और `NET_XMIT_CN` देखता है => hfsc_enqueue() Qdisc_A की qlen नहीं बढ़ाता है। पूरी प्रक्रिया ऐसी स्थिति की ओर ले जाती है जहाँ Qdisc_A->q.qlen == 0 और Qdisc_B->q.qlen == 1 है। 'hfsc' को दूसरे प्रकार (उदाहरण के लिए: 'drr') से बदलने पर भी यही समस्या होती है। यह उस डिज़ाइन का उल्लंघन करता है जहाँ माता-पिता की qlen उसके बच्चों की qlen के योग के बराबर होनी चाहिए। बग का प्रभाव: यह समस्या उपयोगकर्ता->कर्नेल विशेषाधिकार वृद्धि के लिए उपयोग की जा सकती है जब यह पहुँच योग्य हो।
स्रोत
1जिम्मेदारीपूर्ण उपयोग
भेद्यता जानकारी का उपयोग केवल उन प्रणालियों पर करें जिनके मालिक आप हैं या परीक्षण के लिए अधिकृत हैं। किटप्लॉइट सार्वजनिक अनुसंधान मेटाडेटा से लिंक करता है और शोषण कोड या दुर्भावनापूर्ण पेलोड को संग्रहीत नहीं करता है।