
CVE-2026-23416 के लिए POC (linux kernel 6.17 – linux kernel 7 rc5) - Antonius द्वारा खोजी गई कमजोरी
mm/mseal: मर्ज पर VMA अंत सही ढंग से अपडेट करें
एंटोनियस / ब्लू ड्रैगन सिक्योरिटी द्वारा खोजी गई कमजोरी
| फ़ील्ड | विवरण |
|---|---|
| CVE ID | CVE-2026-23416 |
| उपप्रणाली | mm/mseal — mm/vma.c |
| प्रभावित | लिनक्स कर्नेल 6.17 से 7.0-rc5 तक |
| में फिक्स | लिनक्स 7.0-rc6, स्थिर बैकपोर्ट 6.18.21, 6.19.11 |
| आवश्यक पहुंच | अनविशेषाधिकार प्राप्त उपयोगकर्ता (UID 1000, कोई क्षमता नहीं) |
| उपयोग किए गए सिसकॉल | memfd_create, mmap, mseal |
| पुनरुत्पादन क्षमता | 100% नियतात्मक, < 1 सेकंड |
| आरक्षित | 2026-01-13 |
| प्रकाशित | 2026-04-02 |
यह बग mm/mseal.c में mseal_apply() में स्थित है। mseal(2) सिसकॉल लागू करने के लिए VMA पर पुनरावृति करते समय, फ़ंक्शन curr_start और curr_end का उपयोग करके स्थिति ट्रैक करता है:
/* फिक्स से पहले सरलीकृत तर्क */
curr_end = vma->vm_end;
/* ... VMA प्रक्रिया करें ... */
curr_start = curr_end; /* अगले VMA पर जाएं */
समस्या: पुनरावृति के दौरान कॉल किया जाने वाला vma_modify_flags() VMA को मर्ज कर सकता है, जिससे vma->vm_end स्थान पर बदल जाता है। यह मर्ज से पहले कैप्चर किए गए curr_end मान को बासी बना देता है। अगली पुनरावृति पर, curr_start अब बासी curr_end पर सेट होता है, जिससे गलत प्रारंभिक पता उत्पन्न होता है।
डिबग कर्नेल (CONFIG_DEBUG_VM) में, यह असंगत vmg स्थिति ट्रिगर करती है:
VM_WARN_ON_VMG(middle &&
((middle != prev && vmg->start != middle->vm_start) ||
vmg->end > middle->vm_end))
mm/vma.c:830 पर, एक कर्नेल WARNING उत्पन्न करती है।
प्रोडक्शन कर्नेल में (WARN कोई-ऑप में संकलित), बासी curr_start बिना किसी दृश्य त्रुटि के चुपचाप आगे बढ़ता है — जिसका अर्थ है कि VM_SEALED को गलत पता श्रेणी पर लागू किया जा सकता है, mseal(2) द्वारा प्रदान की गई सुरक्षा गारंटी को कमजोर करता है।
mseal(2)
└─ do_mseal() [mm/mseal.c]
└─ mseal_apply()
└─ vma_modify_flags() [mm/vma.c]
└─ vma_modify()
└─ vma_merge_existing_range()
└─ VM_WARN_ON_VMG पंक्ति 830 पर फायर होता है
/* फिक्स से पहले — mm/mseal.c mseal_apply() */
curr_end = vma->vm_end; // यहां कैप्चर किया गया
/* ... vma_modify_flags() VMA मर्ज कर सकता है, vma->vm_end बदल सकता है ... */
curr_start = curr_end; // बासी! मर्ज प्रतिबिंबित नहीं हुआ
फिक्स प्रत्येक पुनरावृति पर किसी भी संभावित मर्ज के बाद बिना शर्त curr_end = vma->vm_end सेट करता है, और इसके अतिरिक्त curr_start/curr_end को इनपुट श्रेणी और VMA सीमाओं से प्राप्त const मानों के रूप में क्लैंप करता है:
/* फिक्स के बाद */
curr_end = vma->vm_end; // बिना शर्त, हमेशा ताज़ा
PoC दूसरे mseal() कॉल से पहले निम्नलिखित लेआउट बनाता है:
[0x21da6000 - 0x21de5fff] VMA-A (fd2, MAP_SHARED|MAP_FIXED) ← चरण 1 के बाद VM_SEALED
[0x21de6000 - 0x21e82fff] VMA-B (fd2, MAP_SHARED|MAP_FIXED) ← सील नहीं
[0x21e83000 - 0x21e84fff] VMA-C (बचा हुआ)
दूसरा mseal(m2, 0x70000) [0x21da6000 – 0x21e15fff] को लक्षित करता है, VMA-A (सील) से VMA-B (सील नहीं) तक फैला हुआ है। mseal_apply() के अंदर, VMA-A से बासी curr_end का उपयोग VMA-B प्रोसेस करते समय curr_start के रूप में किया जाता है, जिससे असंगत vmg स्थिति बनती है।
memfd_create + mmap + mseal की आवश्यकता है, कोई CAP_* आवश्यक नहीं।mseal(2) एक सुरक्षा प्रिमिटिव है — यह VMA अपरिवर्तनीयता की रक्षा करता है। इसके अनुप्रयोग में तर्क त्रुटि का अर्थ है कि मिश्रित सील स्थितियों वाले VMA को फैलाते समय VM_SEALED चुपचाप गलत तरीके से लागू हो सकता है।फ़ाइल: cve-2026-23416-poc.c
gcc -o poc cve-2026-23416-poc.c
./poc
CONFIG_DEBUG_VM के साथ)============================================
CVE-2026-23416-POC
Discoverकिया गया: Antonius / Blue Dragon Security
https://bluedragonsec.com
https://github.com/bluedragonsecurity
============================================
[iter 0]
[iter 1]
...
[+] WARNING कुल N बार ट्रिगर हुआ
dmesg जांचें:
WARNING: CPU: X PID: Y at mm/vma.c:830 vma_merge_existing_range+0x...
CONFIG_DEBUG_VM=y ताकि VM_WARN_ON_VMG देखा जा सके (प्रोडक्शन कर्नेल पर बग अभी भी मौजूद है लेकिन चुप है)तीन अपस्ट्रीम फिक्स कमिट (7.0-rc6 और स्थिर बैकपोर्ट में लागू):
| कमिट | ट्री |
|---|---|
40b3f4700e55 | stable |
फिक्स कर्नेल संस्करण: 7.0-rc6, 6.18.21, 6.19.11
| तिथि | घटना |
|---|---|
| 2026-01-13 | CVE ID आरक्षित |
| 2026-04-02 | CVE प्रकाशित, फिक्स कमिट मर्ज |
एंटोनियस (@w1sdom)
ब्लू ड्रैगन सिक्योरिटी — टैंगेरांग, इंडोनेशिया
GitHub: bluedragonsecurity
यह PoC शैक्षिक और अनुसंधान उद्देश्यों के लिए जारी किया गया है।
| stable |
2697dd8ae721 | stable |