
पैसिव Linux होस्ट भेद्यता स्कैनर CVE-2026-31694 के लिए: चल रहे कर्नेल, FUSE कॉन्फ़िगरेशन, पैकेज मेटाडेटा और पैच साक्ष्य की जाँच करता है, फिर अनुकूलित शमन मार्गदर्शन उत्पन्न करता है।
Linux कर्नेल में FUSE readdir-cache की आउट-ऑफ-बाउंड राइट यानी CVE-2026-31694 के लिए एक पैसिव लिनक्स होस्ट मूल्यांकन उपकरण।
स्कैनर चल रहे कर्नेल, FUSE एक्सपोज़र, स्थानीय पैकेज मेटाडेटा, कर्नेल स्रोत साक्ष्य, निष्पादन वातावरण और ऑपरेटिंग-सिस्टम परिवार का मूल्यांकन करता है। जब होस्ट प्रभावित हो सकता है, तो यह पहचाने गए डिस्ट्रीब्यूशन के अनुरूप एक मिटिगेशन गाइड तैयार करता है।
लेखक: Aung Myat Thu [w01f]
cve_2026_31694_scanner.py एक स्थानीय, गैर-एक्सप्लॉइट भेद्यता मूल्यांकन उपयोगिता है।
यह प्रभावित FUSE कोड पथ को ट्रिगर करके भेद्यता की पुष्टि नहीं करता है। इसके बजाय, यह कई पैसिव संकेतकों को जोड़ता है:
CONFIG_FUSE_FS कर्नेल कॉन्फ़िगरेशन;/dev/fuse की उपस्थिति और वर्तमान-उपयोगकर्ता पहुँच;परिणाम एक एक्सपोज़र मूल्यांकन है, न कि एक्सप्लॉइट-आधारित प्रमाण।
CVE-2026-31694 Linux कर्नेल के FUSE readdir कैश को प्रभावित करता है।
कमजोर तर्क एक सर्वर-नियंत्रित नाम लंबाई से निर्देशिका प्रविष्टि के सीरियलाइज़्ड आकार की गणना करता है और रिकॉर्ड को एकल पेज-कैश पेज में कॉपी करता है। 4095 नाम लंबाई वाली एक निर्देशिका प्रविष्टि 4120 बाइट्स का सीरियलाइज़्ड आकार उत्पन्न कर सकती है।
4096-बाइट पेज का उपयोग करने वाले सिस्टम पर, वह रिकॉर्ड एक पेज से 24 बाइट्स अधिक हो जाता है।
अपस्ट्रीम सुधार कैश कॉपी होने से पहले उन निर्देशिका रिकॉर्ड को अस्वीकार कर देता है जो एकल पेज के भीतर फिट नहीं हो सकते।
fs/fuse/readdir.c fuse_add_dirent_to_cache()
### स्कैनर बेसलाइन डेटा
स्कैनर में निम्नलिखित अपस्ट्रीम स्थिर फिक्स्ड बेसलाइन शामिल हैं:
| कर्नेल श्रृंखला | फिक्स्ड बेसलाइन |
|---|---:|
| 5.10 | 5.10.258 |
| 5.15 | 5.15.209 |
| 6.1 | 6.1.175 |
| 6.6 | 6.6.136 |
| 6.12 | 6.12.84 |
| 6.18 | 6.18.25 |
| 7.0 | 7.0.2 |
| Mainline | 7.1 या नया |
ये संस्करण एक मूल्यांकन इनपुट के रूप में उपयोग किए जाते हैं। इन्हें एकमात्र स्रोत नहीं माना जाता है, क्योंकि डिस्ट्रीब्यूशन विक्रेता पुराने अपस्ट्रीम संस्करण संख्या को बनाए रखते हुए सुधार को बैकपोर्ट कर सकते हैं।
---
## सुरक्षा मॉडल
स्कैनर को असुरक्षित ऑपरेशन को आमंत्रित करने से बचने के लिए डिज़ाइन किया गया है।
### स्कैनर निम्नलिखित नहीं करता
- FUSE फ़ाइलसिस्टम माउंट नहीं करता;
- `/dev/fuse` को खोलता या उससे संवाद नहीं करता;
- FUSE सर्वर शुरू नहीं करता;
- निर्मित (crafted) डायरेक्ट्री रिकॉर्ड सबमिट नहीं करता;
- पेज-प्लेसमेंट परीक्षण के लिए मेमोरी आवंटित नहीं करता;
- कर्नेल आवंटकों को groom नहीं करता;
- `/etc/passwd` को संशोधित नहीं करता;
- कर्नेल कॉन्फ़िगरेशन नहीं बदलता;
- कर्नेल मॉड्यूल लोड या अनलोड नहीं करता;
- `/dev/fuse` अनुमतियाँ संशोधित नहीं करता;
- पैकेज स्थापित या हटाता नहीं;
- सिस्टम रिबूट नहीं करता;
- विशेषाधिकार वृद्धि का प्रयास नहीं करता।
### स्कैनर निम्नलिखित कर सकता है
- `/proc`, `/boot`, `/lib/modules`, `/usr/lib/modules`, `/usr/src`, और पैकेज मेटाडेटा निर्देशिकाओं के अंतर्गत फ़ाइलें पढ़ सकता है;
- सीमित, केवल-पठन पैकेज क्वेरी निष्पादित कर सकता है;
- सक्रिय माउंट और फ़ाइलसिस्टम पंजीकरण का निरीक्षण कर सकता है;
- केवल तब रिपोर्ट लिख सकता है जब `--output` स्पष्ट रूप से प्रदान किया गया हो;
- प्रशासक समीक्षा के लिए मिटिगेशन कमांड प्रिंट कर सकता है।
मिटिगेशन कमांड दस्तावेज़ीकरण आउटपुट हैं। उन्हें कभी भी स्वचालित रूप से निष्पादित नहीं किया जाता।
---
## विशेषताएँ
### होस्ट और कर्नेल पहचान
- `platform.release()` पढ़ता है और अपस्ट्रीम-शैली कर्नेल संस्करण को पार्स करता है।
- `/etc/os-release` या `/usr/lib/os-release` पढ़ता है।
- CPU आर्किटेक्चर और मेमोरी पेज आकार का पता लगाता है।
- पहचानता है कि स्कैन किया गया कर्नेल वर्तमान ऑपरेटिंग सिस्टम से संबंधित है या नहीं।
### FUSE एक्सपोज़र आकलन
- उपलब्ध कर्नेल कॉन्फ़िगरेशन स्रोतों से `CONFIG_FUSE_FS` पढ़ता है।
- अंतर्निहित FUSE समर्थन और लोडेबल-मॉड्यूल कॉन्फ़िगरेशन का पता लगाता है।
- `/proc/filesystems` पढ़ता है।
- `/dev/fuse` मेटाडेटा और वर्तमान-उपयोगकर्ता पढ़ने/लिखने की पहुँच की जाँच करता है।
- `fusermount3` या `fusermount` का पता लगाता है।
- `/proc/self/mountinfo` से सक्रिय FUSE माउंट को पार्स करता है।
### पैच साक्ष्य
- चल रहे संस्करण की तुलना अपस्ट्रीम फिक्स्ड बेसलाइन से करता है।
- स्थापित कर्नेल स्रोत में ओवरसाइज़्ड-रिकॉर्ड गार्ड खोजता है।
- स्थानीय RPM या Debian पैकेज चेंजलॉग में निम्न की जाँच करता है:
- `CVE-2026-31694`;
- अपस्ट्रीम पैच शीर्षक।
### पैकेज और रिबूट स्थिति
- चल रहे कर्नेल के स्वामित्व वाले पैकेज की पहचान करने का प्रयास करता है।
- रिपॉजिटरी को रीफ़्रेश किए बिना स्थानीय पैकेज-मैनेजर मेटाडेटा क्वेरी करता है।
- जब होस्ट वातावरण आधिकारिक होता है तो नया स्थापित कर्नेल का पता लगाता है।
- जहाँ लागू हो वहाँ `/var/run/reboot-required` की जाँच करता है।
### पर्यावरण जागरूकता
- Docker-संगत कंटेनरों का पता लगाता है।
- Podman-संगत कंटेनरों का पता लगाता है।
- कंटेनर-संबंधित cgroups का पता लगाता है।
- WSL का पता लगाता है।
- उपलब्ध होने पर `systemd-detect-virt` का उपयोग करके वर्चुअल मशीनों का पता लगाता है।
### रिपोर्टिंग
- मानव-पठनीय टेक्स्ट आउटपुट।
- मशीन-पठनीय JSON आउटपुट।
- Markdown रिपोर्ट आउटपुट।
- केवल-मिटिगेशन आउटपुट।
- वैकल्पिक फ़ाइल आउटपुट।
- सार्थक प्रक्रिया निकास कोड।
---
## आवश्यकताएँ
### अनिवार्य
- कर्नेल मूल्यांकन के लिए Linux।
- Python 3.9 या नया।
- सामान्य सिस्टम मेटाडेटा तक पढ़ने की पहुँच।
स्कैनर केवल Python मानक लाइब्रेरी का उपयोग करता है।
### वैकल्पिक कमांड
निम्नलिखित उपकरण उपलब्ध होने पर अतिरिक्त साक्ष्य एकत्र किए जाते हैं:
| उपकरण | उद्देश्य |
|---|---|
| `dpkg-query` | Debian/Ubuntu कर्नेल पैकेज स्वामित्व और चेंजलॉग खोज |
| `rpm` | Fedora/RHEL/SUSE पैकेज स्वामित्व और चेंजलॉग निरीक्षण |
| `pacman` | Arch-परिवार कर्नेल पैकेज और अपडेट मेटाडेटा |
| `apt` | Debian-परिवार कैश्ड अपडेट क्वेरी |
| `dnf` या `dnf5` | Fedora/RHEL कैश्ड अपडेट क्वेरी |
| `zypper` | SUSE कैश्ड CVE पैच क्वेरी |
| `apk` | Alpine पैकेज/अपडेट क्वेरी |
| `systemd-detect-virt` | कंटेनर और वर्चुअल-मशीन पहचान |
सामान्य स्कैन के लिए रूट विशेषाधिकार आवश्यक नहीं हैं।
सिस्टम-विशिष्ट फ़ाइल अनुमतियों के कारण कुछ साक्ष्य एक गैर-विशेषाधिकार प्राप्त खाते के लिए अनुपलब्ध हो सकते हैं।
---
## स्थापना
स्कैनर को एक कार्यशील निर्देशिका में रखें:```bash
chmod +x cve_2026_31694_scanner.py
इसे सीधे चलाएं:```bash ./cve_2026_31694_scanner.py
या इसे Python के साथ चलाएँ:```bash
python3 cve_2026_31694_scanner.py
कोई Python पैकेज स्थापना आवश्यक नहीं है।