
पैसिव 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 पैकेज स्थापना आवश्यक नहीं है।
python3 cve_2026_31694_scanner.py
### JSON आउटपुट```bash
python3 cve_2026_31694_scanner.py --format json
नीचे दिया गया संगतता alias समान प्रारूप उत्पन्न करता है:```bash python3 cve_2026_31694_scanner.py --json
### Markdown रिपोर्ट```bash
python3 cve_2026_31694_scanner.py --format markdown
python3 cve_2026_31694_scanner.py
--format markdown
--output cve-2026-31694-report.md
### केवल सुधार मार्गदर्शन प्रिंट करें```bash
python3 cve_2026_31694_scanner.py --mitigation-only
python3 cve_2026_31694_scanner.py --no-package-query
### रिपोर्ट करने के बाद हमेशा सफलता लौटाएँ```bash
python3 cve_2026_31694_scanner.py --no-exit-status
यह विकल्प तब उपयोगी है जब रिपोर्ट एकत्र करनी हों और भेद्यता स्थिति को ऑर्केस्ट्रेशन कार्य को विफल न करने देना हो।
स्कैनर निम्न क्रम में साक्ष्य का मूल्यांकन करता है।
स्कैनर निर्धारित करता है:
पर्यावरण पहचान पैकेज और रीबूट डेटा की व्याख्या बदल देती है।
उदाहरण के लिए, एक कंटेनर होस्ट कर्नेल को देख सकता है लेकिन सामान्यतः कंटेनर फ़ाइलसिस्टम से होस्ट कर्नेल पैकेज का निर्धारण नहीं कर सकता।
स्कैनर निम्नलिखित में चालू-कर्नेल कॉन्फ़िगरेशन की खोज करता है:```text /proc/config.gz /boot/config-$(uname -r) /lib/modules/$(uname -r)/build/.config /usr/lib/modules/$(uname -r)/build/.config
यह मूल्यांकन करता है:```text
CONFIG_FUSE_FS=y
CONFIG_FUSE_FS=m
CONFIG_FUSE_FS is not set
व्याख्या:
| Value | Meaning |
|---|---|
y | FUSE कर्नेल में निर्मित है। मॉड्यूल ब्लैकलिस्टिंग इसे अक्षम नहीं कर सकती। |
m | FUSE एक लोड करने योग्य मॉड्यूल के रूप में उपलब्ध है। |
स्कैनर जाँच करता है:```text /proc/filesystems /dev/fuse PATH for fusermount3 or fusermount /proc/self/mountinfo
`/dev/fuse` या `fusermount3` की अनुपस्थिति वर्तमान वातावरण से तत्काल उपयोगिता को कम करती है, लेकिन यह साबित नहीं करती कि कर्नेल पैच किया गया है।
### 4. पेज-आकार ज्यामिति
प्रलेखित ओवरसाइज़्ड रिकॉर्ड `4120` बाइट्स का है।
जब होस्ट पेज का आकार कम से कम `4120` बाइट्स होता है, तो प्रलेखित रिकॉर्ड पेज सीमा को पार नहीं करता। स्कैनर यह रिपोर्ट कर सकता है कि सिस्टम प्रलेखित पेज ज्यामिति द्वारा उजागर नहीं हुआ है।
यह निष्कर्ष केवल प्रलेखित रिकॉर्ड और मूल्यांकित कार्यान्वयन व्यवहार पर लागू होता है। यह एक सामान्य कथन नहीं है कि बड़े-पेज प्रणालियों पर सभी FUSE मेमोरी-सुरक्षा समस्याएँ असंभव हैं।
### 5. स्थापित स्रोत निरीक्षण
जब स्थापित स्रोत उपलब्ध होता है, स्कैनर खोज करता है:```text
fs/fuse/readdir.c
यह प्रभावित फ़ंक्शन की तलाश करता है और reclen > PAGE_SIZE को अस्वीकार करने के समतुल्य गार्ड की भी तलाश करता है।
प्रत्यक्ष स्रोत साक्ष्य की विश्वसनीयता संस्करण तुलना से अधिक होती है।
निरीक्षण किया गया स्रोत चालू कर्नेल के अनुरूप होना चाहिए ताकि परिणाम आधिकारिक माना जा सके। /usr/src के अंतर्गत वितरण स्रोत ट्री किसी भिन्न स्थापित कर्नेल का प्रतिनिधित्व कर सकते हैं।
स्कैनर पता लगाए गए वितरण के पैकेज डेटाबेस का उपयोग करके चालू कर्नेल इमेज को उसके स्वामित्व वाले पैकेज से मैप करने का प्रयास करता है।
संभावित तंत्रों में शामिल हैं:```text dpkg-query -S rpm -qf pacman -Qo apk info -W
जब कोई पैकेज पहचाना जाता है, तो CVE ID या पैच शीर्षक के लिए स्थानीय चेंजलॉग मेटाडेटा का निरीक्षण किया जा सकता है।
चेंजलॉग मेल न मिलना भेद्यता का प्रमाण नहीं है। विक्रेता हमेशा स्थानीय रूप से स्थापित चेंजलॉग में व्यक्तिगत CVE संदर्भ शामिल नहीं करते हैं।
### 7. अपस्ट्रीम संस्करण तुलना
पार्स किया गया कर्नेल संस्करण स्कैनर की निश्चित बेसलाइन तालिका से तुलना की जाती है।
संस्करण तुलना एक अनुमानित (heuristic) परिणाम उत्पन्न करती है क्योंकि:
- विक्रेता कर्नेल में बैकपोर्ट हो सकते हैं;
- कर्नेल पैकेज रिलीज़ संशोधन वितरण-विशिष्ट होते हैं;
- क्लाउड, रियल-टाइम, हार्डन्ड, और हार्डवेयर-सक्षमता कर्नेल के अलग पैच समयरेखा हो सकते हैं;
- एक संस्करण स्ट्रिंग एक असंशोधित अपस्ट्रीम रिलीज़ के बजाय विक्रेता-अनुरक्षित शाखा का प्रतिनिधित्व कर सकती है।
### 8. पैकेज अपडेट मेटाडेटा
जहां समर्थित है, स्कैनर मौजूदा स्थानीय मेटाडेटा के विरुद्ध केवल-पढ़ने योग्य क्वेरी चलाता है।
यह रिपॉजिटरी को रीफ्रेश नहीं करता है।
उदाहरण:```text
apt list --upgradable
pacman -Qu
dnf --cacheonly --quiet check-upgrade
zypper --no-refresh list-patches --all --cve=CVE-2026-31694
apk version -l <
एक परिणाम जो कोई उपलब्ध अपडेट नहीं दिखाता है, केवल कैश्ड रिपॉज़िटरी मेटाडेटा जितना ही वर्तमान होता है।
सामान्य होस्ट या वर्चुअल मशीन पर, स्कैनर चल रहे कर्नेल की तुलना पता लगाए गए स्थापित कर्नेल से करता है और डेबियन-परिवार प्रणालियों द्वारा उपयोग किए जाने वाले रीबूट मार्कर की जाँच करता है।
कंटेनर या WSL गेस्ट के अंदर, यह जाँच गेस्ट फ़ाइलों की तुलना होस्ट कर्नेल से करने के बजाय होस्ट-नियंत्रित के रूप में चिह्नित की जाती है।
साक्ष्य की प्राथमिकता लगभग इस प्रकार है:
PATCHEDप्रत्यक्ष स्थानीय साक्ष्य इंगित करता है कि सुधार मौजूद है।
उदाहरण:
विश्वास सामान्यतः उच्च होता है, लेकिन स्रोत-से-चालू-कर्नेल संरेखण को अभी भी सत्यापित किया जाना चाहिए।
NOT_EXPOSEDपता लगाया गया चालू-कर्नेल कॉन्फ़िगरेशन FUSE अक्षम रखता है।
यह एक एक्सपोज़र परिणाम है, यह साक्ष्य नहीं कि कर्नेल स्रोत में स्वयं सुधार मौजूद है।
NOT_EXPOSED_BY_DOCUMENTED_PAGE_GEOMETRYमेमोरी पेज का आकार प्रलेखित 4120-बाइट रिकॉर्ड को पेज सीमा पार किए बिना समाहित करने के लिए पर्याप्त बड़ा है।
यह निर्णय प्रलेखित भेद्यता ज्यामिति तक सीमित है।
UPSTREAM_BASELINE_SAFEपार्स किया गया चालू संस्करण एक ज्ञात फिक्स्ड अपस्ट्रीम बेसलाइन को पूरा करता है या प्रभावित कार्यान्वयन से पहले का है।
विक्रेता पैकेज सत्यापन अभी भी बेहतर है।
POTENTIALLY_VULNERABLEपार्स किया गया कर्नेल एक प्रभावित अपस्ट्रीम रेंज के भीतर है और कोई प्रत्यक्ष स्थानीय पैच साक्ष्य नहीं मिला।
इस परिणाम के लिए स्थापित कर्नेल को भेद्य घोषित करने से पहले ऑपरेटिंग-सिस्टम विक्रेता सलाह (एडवाइज़री) की जाँच करना आवश्यक है।
INCONCLUSIVEस्कैनर पर्याप्त साक्ष्य प्राप्त नहीं कर सका।
सामान्य कारण:
NOT_APPLICABLEवर्तमान ऑपरेटिंग सिस्टम Linux नहीं है।
| Code | अर्थ |
|---|---|
0 | पैच किया गया साक्ष्य, सुरक्षित अपस्ट्रीम बेसलाइन, या प्रलेखित एक्सपोज़र अनुपस्थित |
उदाहरण:```bash python3 cve_2026_31694_scanner.py status=$?
case "$status" in 0) echo "No actionable exposure detected by the scanner" ;; 1) echo "Potential exposure detected" ;; 2) echo "Assessment inconclusive" ;; 3) echo "Scanner execution failed" ;; esac
जब `--no-exit-status` निर्दिष्ट किया जाता है, स्कैनर रिपोर्ट तैयार करने के बाद `0` लौटाता है।
---
## डिटेक्शन स्रोत
स्कैनर निम्नलिखित स्थानीय स्रोतों का उपयोग करता है जहाँ उपलब्ध हों:
| स्रोत | जानकारी |
|---|---|
| `/etc/os-release` | वितरण पहचान |
| `/usr/lib/os-release` | वितरण पहचान फ़ॉलबैक |
| `/proc/version` | कर्नेल और WSL संकेतक |
| `/proc/config.gz` | चालू कर्नेल कॉन्फ़िगरेशन |
| `/boot/config-*` | कर्नेल कॉन्फ़िगरेशन |
| `/lib/modules/*/build/.config` | कर्नेल बिल्ड कॉन्फ़िगरेशन |
| `/proc/filesystems` | पंजीकृत फ़ाइलसिस्टम |
| `/proc/self/mountinfo` | सक्रिय FUSE माउंट |
| `/proc/1/cgroup` | कंटेनर संकेतक |
| `/dev/fuse` | डिवाइस उपस्थिति और अनुमतियाँ |
| `/usr/src/*/fs/fuse/readdir.c` | वैकल्पिक स्रोत-स्तरीय पैच साक्ष्य |
| `/lib/modules` | स्थापित कर्नेल सूची |
| `/usr/lib/modules` | स्थापित कर्नेल सूची |
| `/boot/vmlinuz-*` | स्थापित कर्नेल सूची |
| `/var/run/reboot-required` | Debian-परिवार रिबूट संकेतक |
| पैकेज डेटाबेस | कर्नेल पैकेज स्वामित्व |
| पैकेज चेंजलॉग | वैकल्पिक स्थानीय बैकपोर्ट साक्ष्य |
| पैकेज कैश | वैकल्पिक अपडेट उपलब्धता साक्ष्य |
---
## वितरण समर्थन
### वितरण-परिवार पहचान
| परिवार | मान्यता प्राप्त वितरण |
|---|---|
| Ubuntu | Ubuntu, Linux Mint, Pop!_OS, elementary OS, Zorin OS |
| Debian | Debian, Kali Linux, Raspbian, Parrot OS |
| Arch | Arch Linux, Manjaro, Garuda Linux, EndeavourOS, CachyOS |
| Fedora | Fedora Linux |
| RHEL | RHEL, CentOS, Rocky Linux, AlmaLinux, Oracle Linux, Amazon Linux |
| SUSE | openSUSE Tumbleweed, openSUSE Leap, SLES, SLED |
| Alpine | Alpine Linux |
| Gentoo | Gentoo Linux |
| Void | Void Linux |
| NixOS | NixOS |
| Unknown | सामान्य Linux मार्गदर्शन |
### स्थानीय अपडेट-क्वेरी समर्थन
| परिवार | केवल-पढ़ने वाली अपडेट क्वेरी |
|---|---|
| Debian/Ubuntu | `apt list --upgradable` |
| Arch | `pacman -Qu` |
| Fedora/RHEL | कैश्ड `dnf check-upgrade` |
| SUSE | `zypper` के साथ कैश्ड CVE पैच सूची |
| Alpine | `apk version -l <` |
| Gentoo | लागू नहीं किया गया |
| Void | लागू नहीं किया गया |
| NixOS | लागू नहीं किया गया |
| Unknown | लागू नहीं किया गया |
स्थानीय रूप से दिखाई देने वाले अपडेट की अनुपस्थिति का मतलब यह नहीं है कि फिक्स्ड पैकेज उपलब्ध नहीं है। रिपॉजिटरी मेटाडेटा पुराना हो सकता है या वितरण ने अभी तक पैकेज प्रकाशित नहीं किया हो सकता है।
---
## शमन निर्माण
शमन मार्गदर्शन निम्नलिखित के अनुसार चुना जाता है:
- वितरण परिवार;
- पैकेज प्रबंधक;
- कंटेनर या WSL स्थिति;
- FUSE कॉन्फ़िगरेशन;
- `/dev/fuse` उपलब्धता;
- सक्रिय FUSE माउंट;
- रिबूट स्थिति;
- अंतिम निर्णय।
स्कैनर कमांड प्रिंट करता है लेकिन उन्हें कभी निष्पादित नहीं करता।
### Debian और Ubuntu परिवार
विशिष्ट उत्पन्न अनुक्रम:```bash
sudo apt update
sudo apt full-upgrade
sudo reboot
प्रस्तावित पैकेज लेनदेन को अनुमोदित करने से पहले उसकी समीक्षा करें।
रीबूट के बाद:```bash uname -r python3 cve_2026_31694_scanner.py
### Arch और Manjaro परिवार
विशिष्ट उत्पन्न अनुक्रम:```bash
sudo pacman -Syu
sudo reboot
आर्क-परिवार प्रणालियों को पूर्ण सिस्टम अपग्रेड की आवश्यकता होती है। pacman -Sy के साथ पैकेज डेटाबेस को रीफ्रेश न करें और अपग्रेड पूरा किए बिना चयनित पैकेज इंस्टॉल न करें।
विशिष्ट उत्पन्न अनुक्रम:```bash sudo dnf upgrade --refresh sudo systemctl reboot
`yum` का उपयोग करने वाले सिस्टम संबंधित `yum` कमांड प्राप्त कर सकते हैं।
### SUSE परिवार
विशिष्ट उत्पन्न अनुक्रम:```bash
sudo zypper refresh
sudo zypper patch --cve=CVE-2026-31694
sudo zypper patch --category security
sudo systemctl reboot
CVE-विशिष्ट पैच हर SUSE उत्पाद या रिपॉजिटरी स्थिति पर एक अलग लेनदेन के रूप में उपलब्ध नहीं हो सकता है।
विशिष्ट उत्पन्न अनुक्रम:```bash doas apk update doas apk upgrade doas reboot
The privilege prefix इस बात पर निर्भर करता है कि स्कैनर को `sudo`, `doas`, या पहले से root सत्र मिलता है या नहीं।
### Gentoo Linux
विशिष्ट उत्पन्न अनुक्रम:```bash
sudo emaint sync -a
sudo emerge --ask --update --deep --newuse @world
कर्नेल इंस्टॉलेशन और सक्रियण होस्ट के कॉन्फ़िगर किए गए Gentoo कर्नेल वर्कफ़्लो पर निर्भर करते हैं।
सामान्य जनरेटेड अनुक्रम:```bash sudo xbps-install -Suv sudo reboot
### NixOS
विशिष्ट उत्पन्न अनुक्रम:```bash
sudo nixos-rebuild switch --upgrade
sudo systemctl reboot
जब पैचिंग तुरंत पूरी नहीं की जा सकती, तो स्कैनर अस्थायी नियंत्रण सुझा सकता है।
संभावित अनुशंसाओं में शामिल हैं:
/dev/fuse को प्रतिबंधित करें;/dev/fuse हटाएं;CAP_SYS_ADMIN हटाएं;--privileged कंटेनरों से बचें।ये नियंत्रण वैध वर्कलोड को बाधित कर सकते हैं, जिनमें शामिल हैं:
अस्थायी प्रतिबंधों को विक्रेता-सुधारित कर्नेल की स्थापना की जगह नहीं लेनी चाहिए।
कंटेनर सामान्यतः होस्ट कर्नेल साझा करते हैं।
कंटेनर के अंदर चलाया गया स्कैनर निम्न का पता लगा सकता है:
/dev/fuse नहीं, भले ही होस्ट में FUSE सक्षम हो।इस कारण से, स्कैनर होस्ट-निर्भर साक्ष्य को गैर-आधिकारिक के रूप में चिह्नित करता है और शमन को कंटेनर होस्ट पर निर्देशित करता है।
आधिकारिक पैकेज और रीबूट मूल्यांकन के लिए स्कैनर को सीधे होस्ट पर चलाएं।
कंटेनर सख्तीकरण मार्गदर्शन में निम्न को हटाना शामिल है:```text --device /dev/fuse --cap-add SYS_ADMIN --privileged
समकक्ष Compose कॉन्फ़िगरेशन की भी समीक्षा की जानी चाहिए:```yaml
devices:
- /dev/fuse:/dev/fuse
cap_add:
- SYS_ADMIN
privileged: true
WSL कर्नेल का प्रबंधन Linux अतिथि वितरण के कर्नेल पैकेज के बजाय Windows द्वारा किया जाता है।
सामान्य उत्पन्न मार्गदर्शन:```powershell wsl --update wsl --shutdown
ये कमांड Windows PowerShell से चलाएँ, डिस्ट्रीब्यूशन को पुनः आरंभ करें, और स्कैनर को फिर से चलाएँ।
केवल `apt`, `dnf`, या किसी अन्य Linux पैकेज मैनेजर से गेस्ट पैकेज अपडेट करने से WSL कर्नेल प्रतिस्थापित नहीं होता है।
### वर्चुअल मशीनें
एक वर्चुअल मशीन सामान्यतः अपने गेस्ट कर्नेल की स्वामी होती है। डिस्ट्रीब्यूशन-विशिष्ट पैकेज और रीबूट जाँचें गेस्ट के अंदर लागू रहती हैं।
हाइपरवाइज़र होस्ट का मूल्यांकन अलग से किया जाना चाहिए।
---
## रिपोर्ट प्रारूप
### टेक्स्ट
टेक्स्ट आउटपुट सीधे टर्मिनल उपयोग के लिए है।```bash
python3 cve_2026_31694_scanner.py --format text
रिपोर्ट में शामिल हैं:
JSON आउटपुट में संपूर्ण dataclass-आधारित रिपोर्ट होती है।```bash
python3 cve_2026_31694_scanner.py
--format json
--output report.json
फ़ील्ड चयन का उदाहरण:```bash
python3 cve_2026_31694_scanner.py --format json --no-exit-status |
python3 -c '
import json
import sys
report = json.load(sys.stdin)
print(report["hostname"])
print(report["verdict"])
print(report["confidence"])
print(report["kernel_release"])
'
Markdown आउटपुट तकनीकी रिकॉर्ड, टिकट और मूल्यांकन रिपोर्ट के लिए उपयुक्त है।```bash
python3 cve_2026_31694_scanner.py
--format markdown
--output report.md
### केवल-शमन रिपोर्ट```bash
python3 cve_2026_31694_scanner.py \
--mitigation-only \
--format markdown
JSON प्रारूप के साथ, mitigation-only मोड पूर्ण होस्ट रिपोर्ट के बजाय mitigation ऑब्जेक्ट लौटाता है।
#!/usr/bin/env bash
set -u
report="cve-2026-31694-$(hostname)-$(date +%Y%m%d-%H%M%S).json"
python3 cve_2026_31694_scanner.py
--format json
--output "$report"
status=$?
case "$status" in 0) echo "Assessment completed without a potential-vulnerability verdict" ;; 1) echo "Potential CVE-2026-31694 exposure detected: $report" >&2 ;; 2) echo "Assessment inconclusive: $report" >&2 ;; *) echo "Scanner failure: $report" >&2 ;; esac
exit "$status"
### किसी कार्य को विफल किए बिना रिपोर्ट संग्रहण```bash
python3 cve_2026_31694_scanner.py \
--format json \
--output /var/tmp/cve-2026-31694.json \
--no-exit-status
30 3 * * * /usr/bin/python3 /opt/security/cve_2026_31694_scanner.py --format json --output /var/log/cve-2026-31694.json --no-exit-status
यह उसी रिपोर्ट फ़ाइल को अधिलेखित करता है। जब ऐतिहासिक रिपोर्ट आवश्यक हों तो रैपर स्क्रिप्ट का उपयोग करें।
### Systemd सेवा उदाहरण```ini
[Unit]
Description=Passive CVE-2026-31694 assessment
After=local-fs.target
[Service]
Type=oneshot
ExecStart=/usr/bin/python3 /opt/security/cve_2026_31694_scanner.py --format json --output /var/log/cve-2026-31694.json --no-exit-status
NoNewPrivileges=yes
PrivateTmp=yes
ProtectSystem=strict
ProtectHome=yes
ReadWritePaths=/var/log
स्कैनर को कर्नेल और पैकेज मेटाडेटा तक पढ़ने की पहुँच की आवश्यकता होती है। अतिरिक्त सैंडबॉक्स प्रतिबंध साक्ष्य छिपा सकते हैं और एक अनिर्णायक रिपोर्ट उत्पन्न कर सकते हैं।
फ्लीट मूल्यांकन के लिए:
कंटेनर इमेज बिल्ड से प्राप्त स्कैन को होस्ट-कर्नेल मूल्यांकन के रूप में न मानें।
POTENTIALLY_VULNERABLE के लिए अनुशंसित प्रतिक्रियावास्तविक चल रहे कर्नेल की पहचान करें: ```bash uname -r
स्थापित वितरण और रिलीज़ की पहचान करें: ```bash cat /etc/os-release
सटीक कर्नेल पैकेज और फ्लेवर के लिए वितरण विक्रेता की CVE स्थिति की समीक्षा करें।
पैकेज मेटाडेटा ताज़ा करें।
विक्रेता-समर्थित फिक्स्ड कर्नेल पैकेज स्थापित करें।
होस्ट को रिबूट करें।
पुष्टि करें कि चल रहा कर्नेल बदल गया है: ```bash uname -r
स्कैनर को दोबारा चलाएँ।
INCONCLUSIVE के लिए अनुशंसित प्रतिक्रियालुप्त साक्ष्य एकत्र करें:```bash uname -a getconf PAGE_SIZE cat /etc/os-release grep CONFIG_FUSE_FS /boot/config-"$(uname -r)" 2>/dev/null cat /proc/filesystems ls -l /dev/fuse 2>/dev/null findmnt -t fuse,fuseblk,fusectl
फिर विक्रेता सलाह (vendor advisory) के अनुसार सटीक कर्नेल पैकेज की पुष्टि करें।
### रिबूट सत्यापन
एक फिक्स्ड कर्नेल पैकेज स्थापित करने से वर्तमान में चल रहे कर्नेल में कोई परिवर्तन नहीं होता है।
स्थापित और चल रहे दोनों कर्नेल की पुष्टि करें, फिर आवश्यकतानुसार रिबूट करें।
उदाहरण:```bash
uname -r
ls -1 /lib/modules
डेबियन-परिवार प्रणालियाँ भी प्रदान कर सकती हैं:```bash test -e /var/run/reboot-required && cat /var/run/reboot-required
### FUSE निर्भरता समीक्षा
FUSE को अस्थायी रूप से अनलोड या ब्लॉक करने से पहले:```bash
findmnt -t fuse,fuseblk,fusectl
lsmod | grep '^fuse'
ps aux | grep -E '[f]usermount|[s]shfs|[r]clone'
जब सक्रिय FUSE फाइल सिस्टम माउंटेड हों तो मॉड्यूल को अनलोड न करें।
स्कैनर जानबूझकर कमजोर कोड पथ को ट्रिगर नहीं करता है।
एक POTENTIALLY_VULNERABLE निर्णय का अर्थ है कि उपलब्ध निष्क्रिय साक्ष्य जोखिम के अनुरूप है। यह प्रमाण नहीं है कि शोषण सफल होगा।
वितरण कर्नेल अक्सर सुरक्षा सुधारों को बैकपोर्ट करते हैं।
पुराना दिखने वाला अपस्ट्रीम संस्करण पैच किया जा सकता है।
वितरण-प्रबंधित कर्नेल के लिए विक्रेता एडवाइजरी और सटीक पैकेज रिलीज़ आधिकारिक हैं।
/usr/src के अंतर्गत पाया गया सोर्स ट्री चालू कर्नेल से मेल नहीं खा सकता है।
सोर्स पैच साक्ष्य को निम्न के विरुद्ध मान्य किया जाना चाहिए:```bash uname -r
and the source package or build directory used for that exact kernel.
### Stale package metadata
The scanner does not refresh repositories.
Package update checks depend on existing local cache state.
Use the generated distribution-specific refresh and upgrade commands for an up-to-date package decision.
### Containers
A container sees the host kernel but normally has different package metadata.
Run the scanner on the host.
### WSL
Linux guest package state does not determine WSL kernel patch status.
Update WSL from Windows.
### Custom kernels
Custom, embedded, appliance, vendor, and self-built kernels may not have package metadata or recognizable version strings.
Inspect the actual source commit or vendor release notes.
### Live patching
The scanner does not determine whether a live-patch framework has applied this specific correction to the running kernel.
Use the live-patch vendor's status tools and advisory data.
### Secure boot and bootloader state
The scanner does not verify:
- which kernel the bootloader will select next;
- whether Secure Boot accepts the installed image;
- whether a new initramfs was generated correctly;
- whether the machine successfully rebooted into the expected kernel.
### Distributed filesystems and namespaces
The scanner assesses the current process namespace.
Mounts or device access hidden by namespaces may not appear in the report.
---
## Troubleshooting
### `Kernel configuration could not be determined`
Check whether one of these files exists:```bash
ls -l /proc/config.gz
ls -l /boot/config-"$(uname -r)"
ls -l /lib/modules/"$(uname -r)"/build/.config
कुछ डिस्ट्रीब्यूशन चल रहे कॉन्फ़िगरेशन को /proc/config.gz के माध्यम से उजागर नहीं करते।
Running kernel package could not be identifiedसंभावित कारण:
जाँच करें:```bash uname -r ls -l /boot ls -l /lib/modules/"$(uname -r)"
### पैकेज अपडेट क्वेरी कोई अपडेट नहीं दर्शाती
जनरेट किए गए माइटिगेशन गाइड का उपयोग करके पैकेज मेटाडेटा रीफ़्रेश करें, फिर स्कैनर को दोबारा चलाएँ।
पैसिव स्कैनर रिपॉज़िटरीज़ को स्वचालित रूप से रीफ़्रेश नहीं करता है।
### अपडेट इंस्टॉल करने के बाद `POTENTIALLY_VULNERABLE`
पुष्टि करें कि नया कर्नेल चल रहा है:```bash
uname -r
इसे इंस्टॉल किए गए कर्नेल निर्देशिकाओं से तुलना करें:```bash ls -1 /lib/modules
रीबूट अभी भी आवश्यक हो सकता है।
विक्रेता की एडवाइज़री भी जाँचें, क्योंकि एक फिक्स्ड बैकपोर्ट अपस्ट्रीम संस्करण बेसलाइन से मेल नहीं खा सकता है।
### FUSE कर्नेल में बनाया गया है
जब रिपोर्ट दिखाती है:```text
CONFIG_FUSE_FS=y
modprobe -r fuse और मॉड्यूल ब्लैकलिस्टिंग FUSE को अक्षम नहीं कर सकते।
पैच किए गए कर्नेल या FUSE समर्थन के बिना निर्मित कर्नेल का उपयोग करें।
स्कैनर को निम्नलिखित तक पढ़ने की पहुँच की आवश्यकता हो सकती है:```text /proc /boot /lib/modules /usr/lib/modules /usr/src package database directories package cache directories
सेवा हार्डनिंग को समायोजित करें ताकि ये पथ पठनीय बने रहें।
---
## फ़ाइल लेआउट
अनुशंसित प्रोजेक्ट लेआउट:```text
cve-2026-31694-scanner/
├── README.md
└── cve_2026_31694_scanner.py
अनुशंसित स्थापित लेआउट:```text /opt/security/cve-2026-31694/ ├── README.md └── cve_2026_31694_scanner.py
उदाहरण:```bash
sudo install -d -m 0755 /opt/security/cve-2026-31694
sudo install -m 0755 \
cve_2026_31694_scanner.py \
/opt/security/cve-2026-31694/
sudo install -m 0644 \
README.md \
/opt/security/cve-2026-31694/
Aung Myat Thu [w01f]
| विकल्प | विवरण |
|---|
--format text | मानव-पठनीय टर्मिनल आउटपुट। यह डिफ़ॉल्ट है। |
--format json | JSON के रूप में पूर्ण संरचित रिपोर्ट। |
--format markdown | तकनीकी Markdown रिपोर्ट। |
--json | --format json के लिए उपनाम। |
--output PATH | रिपोर्ट को मानक आउटपुट के बजाय किसी फ़ाइल में लिखें। |
--mitigation-only | केवल उत्पन्न शमन अनुभाग लौटाएँ। |
--no-package-query | स्थानीय पैकेज-मैनेजर अद्यतन क्वेरी छोड़ें। |
--no-exit-status | आउटपुट उत्पन्न करने के बाद हमेशा स्थिति 0 के साथ बाहर निकलें। |
-h, --help | कमांड सहायता प्रदर्शित करें। |
n | पहचाने गए कॉन्फ़िगरेशन में FUSE अक्षम है। |
| unknown | कोई पठनीय कॉन्फ़िगरेशन स्रोत उपलब्ध नहीं था। |
1| संभावित रूप से भेद्य |
2 | अनिर्णायक |
3 | स्कैनर या रिपोर्ट-निर्माण त्रुटि |