
CVE-2026-31431 (कॉपी फेल) का Linux सिस्टम पर पता लगाएं और उसे कम करें।
एक शून्य-निर्भरता Python CLI जो जाँचता है कि क्या कोई Linux होस्ट CVE-2026-31431 ("Copy Fail") के प्रति संवेदनशील दिखता है बिना कोई एक्सप्लॉइट चलाए। यह प्रभावित घटक के कर्नेल मॉड्यूल के रूप में लोड होने पर एक रूढ़िवादी अस्थायी शमन भी लागू कर सकता है। Debian/Ubuntu, RHEL/Rocky/AlmaLinux, Fedora और SUSE का समर्थन करता है।
pip install copyfail-guard
copyfail-guard
CVE-2026-31431 algif_aead (AF_ALG AEAD सॉकेट) कर्नेल इंटरफ़ेस में एक लॉजिक बग है
जो एक अनविशेषाधिकार प्राप्त स्थानीय उपयोगकर्ता को किसी भी पठनीय फ़ाइल के पेज कैश में
नियंत्रित 4-बाइट लेखन करने की अनुमति देता है, जिससे रूट विशेषाधिकार वृद्धि होती है।
CVSS 7.8, कर्नेल 4.14 से मौजूद, अप्रैल 2026 से स्थिर रिलीज़ में पैच किया गया।
एक सार्वजनिक एक्सप्लॉइट मौजूद है और यह भेद्यता CISA KEV में सूचीबद्ध है।
कुछ भेद्यता जाँचें "एक्सप्लॉइट चलाएँ और देखें कि यह काम करता है या नहीं" तक सीमित होती हैं। प्रोडक्शन होस्ट पर ऐसा करना अच्छी बात नहीं है। copyfail-guard एक गैर-एक्सप्लॉइट दृष्टिकोण अपनाता है। यह बग को ट्रिगर करने, setuid बाइनरी को संशोधित करने या एक्सप्लॉइटेबिलिटी साबित करने का प्रयास नहीं करता। इसके बजाय, यह होस्ट स्थिति (कर्नेल संस्करण, मॉड्यूल लोड स्थिति, modprobe कॉन्फ़िगरेशन) का निरीक्षण करता है और रिपोर्ट करता है कि क्या मशीन संवेदनशील दिखती है।
fix जानबूझकर न्यूनतम है — यह आपके पैकेज मैनेजर को नहीं बुलाता।
स्थायी उपचार के लिए आपके वितरण के सामान्य अपडेट तंत्र के माध्यम से कर्नेल को अपग्रेड करना आवश्यक है।
pip install copyfail-guard
या बिना इंस्टॉल किए सीधे चेकआउट से चलाएँ:
PYTHONPATH=src python3 -m copyfail_guard detect
copyfail-guard [--json] [--dry-run] [--quiet] [detect | fix | reset]
$ copyfail-guard
[copyfail-guard] CVE-2026-31431 (Copy Fail) — VULNERABLE
Distribution: Ubuntu 24.04.1 LTS (debian family)
Kernel: 6.8.0-50-generic (branch 6.12, fixed at 6.12.85)
Module: algif_aead — loaded as .ko
Mitigation: none
Recommended actions:
1. Apply mitigation now:
sudo copyfail-guard fix
2. Update the kernel for a permanent fix:
Update the kernel on this system to 6.12.85 or later (whatever your
distribution ships once it has integrated the CVE-2026-31431 fix), then reboot.
लागू करने से पहले हमेशा --dry-run के साथ पूर्वावलोकन करें:
$ sudo copyfail-guard --dry-run fix
[copyfail-guard] fix (dry-run) — OK
[ ok ] Pre-flight checks (Linux, host, root)
[skip] Would write modprobe blacklist [/etc/modprobe.d/cve-2026-31431-copyfail-guard.conf]
[skip] Would attempt to unload algif_aead (not currently loaded) [algif_aead]
[skip] Would append audit record [/var/log/copyfail-guard.log]
$ sudo copyfail-guard fix
[copyfail-guard] fix — OK
[ ok ] Pre-flight checks (Linux, host, root)
[ ok ] Wrote modprobe blacklist [/etc/modprobe.d/cve-2026-31431-copyfail-guard.conf]
[ ok ] Unloaded algif_aead [algif_aead]
[ ok ] Appended audit record [/var/log/copyfail-guard.log]
Next step for a permanent fix:
Update the kernel to a CVE-2026-31431-patched version using your
distribution's normal update mechanism, then reboot.
यदि मॉड्यूल वर्तमान में उपयोग में है, तो अनलोड चरण विफल हो सकता है। उस स्थिति में स्थायी modprobe नियम अभी भी सफलतापूर्वक स्थापित किया जा सकता है, और copyfail-guard अनलोड विफलता को चेतावनी-शैली क्रिया रिकॉर्ड के रूप में रिपोर्ट करेगा, न कि यह दिखावा करेगा कि मॉड्यूल हटा दिया गया था।
--json stdout पर एक संरचित दस्तावेज़ उत्सर्जित करता है, जो jq, Ansible या SOAR पाइपलाइनों के लिए उपयुक्त है:
$ copyfail-guard --json | jq .verdict
"vulnerable"
$ copyfail-guard --json | jq '{verdict, kernel: .kernel.patched_threshold}'
{
"verdict": "vulnerable",
"kernel": "6.12.85"
}
पैच किए गए कर्नेल में अपग्रेड करने के बाद, fix द्वारा स्थापित modprobe नियम को हटाने के लिए reset सबकमांड का उपयोग करें:
$ sudo copyfail-guard --dry-run reset
[copyfail-guard] reset (dry-run) — OK
[skip] Would remove /etc/modprobe.d/cve-2026-31431-copyfail-guard.conf
$ sudo copyfail-guard reset
[copyfail-guard] reset — OK
[ ok ] Removed /etc/modprobe.d/cve-2026-31431-copyfail-guard.conf
Reboot to allow algif_aead to load again if needed.
reset आइडेम्पोटेंट है — यदि फ़ाइल पहले से अनुपस्थित है तो यह "कुछ करने को नहीं" संदेश के साथ 0 पर बाहर निकलता है। फिर रिबूट करें।
कंटेनर। fix कंटेनर के अंदर चलने से इनकार करता है क्योंकि /proc/modules
होस्ट कर्नेल को दर्शाता है लेकिन कंटेनर के पास मॉड्यूल लोड या अनलोड करने का कोई अधिकार नहीं है।
copyfail-guard को सीधे होस्ट पर चलाएँ।
बिल्ट-इन algif_aead। कुछ कर्नेल algif_aead को सीधे इमेज में संकलित करते हैं
(CONFIG_CRYPTO_USER_API_AEAD=y)। इस कॉन्फ़िगरेशन में modprobe शमन का कोई प्रभाव नहीं है;
एकमात्र उपचार कर्नेल अपग्रेड है। इस स्थिति में detect unmitigable_builtin रिपोर्ट करता है।
fix चलाने से अभी भी modprobe नियम स्थापित होगा (जो किसी भी सह-मौजूद लोड करने योग्य प्रति को लोड होने से रोकता है)
लेकिन बिल्ट-इन इंस्टेंस अप्रभावित रहता है — कर्नेल अपग्रेड और रिबूट ही एकमात्र वास्तविक उपाय हैं।
blacklist बनाम install … /bin/false। दोनों निर्देश सामान्य ऑटो-लोडिंग को अवरुद्ध करते हैं,
लेकिन install algif_aead /bin/false अधिक मजबूत है क्योंकि यह सामान्य स्पष्ट modprobe algif_aead आह्वानों को भी अवरुद्ध करता है।
पर्याप्त विशेषाधिकार प्राप्त व्यवस्थापक अभी भी modprobe नीति को बायपास कर सकता है, उदाहरण के लिए
निम्न-स्तरीय मॉड्यूल लोडिंग टूल या विशेष modprobe फ़्लैग का उपयोग करके। copyfail-guard हमेशा
मजबूत रूप स्थापित करता है। यदि आपके सिस्टम में पहले से एक सादा blacklist निर्देश है,
तो टूल mitigated रिपोर्ट करता है लेकिन अपग्रेड की सिफारिश करने वाला एक नोट उत्सर्जित करता है।
SELinux/AppArmor। RHEL पर /etc/modprobe.d/ में लेखन सामान्यतः पैरेंट निर्देशिका से
system_u:object_r:modules_conf_t:s0 विरासत में लेता है, इसलिए copyfail-guard द्वारा लिखी गई फ़ाइल के लिए
आमतौर पर मैन्युअल रिलेबल की आवश्यकता नहीं होनी चाहिए।
initramfs। algif_aead सामान्यतः प्रमुख वितरणों पर बूट इमेज में शामिल नहीं होता,
इसलिए copyfail-guard modprobe नियम स्थापित करने के बाद update-initramfs -u या
dracut -f नहीं चलाता। यदि आपका वितरण या स्थानीय बिल्ड initramfs में algif_aead शामिल करता है,
तो अपने वितरण के कर्नेल/मॉड्यूल मार्गदर्शन का पालन करें।
Apache 2.0 — LICENSE देखें।
| सबकमांड | क्रिया |
|---|
detect | पाँच सिग्नल (कर्नेल संस्करण, /proc/modules, modules.builtin, modules.dep, modprobe कॉन्फ़िग) को छह निर्णयों में से एक में जोड़ता है |
fix | परमाणु रूप से एक install algif_aead /bin/false modprobe नियम लिखता है और algif_aead को अनलोड करने का प्रयास करता है |
reset | fix द्वारा स्थापित modprobe नियम को हटाता है (पैच किए गए कर्नेल में अपग्रेड करने के बाद चलाएँ) |
| कोड | अर्थ |
|---|
0 | सुरक्षित — निर्णय patched, mitigated या not_applicable है; या स्थायी फिक्स चरण सफल रहा |
1 | संवेदनशील — निर्णय vulnerable या unmitigable_builtin है |
2 | त्रुटि — स्थिति निर्धारित नहीं की जा सकी, पूर्वशर्त अस्वीकृत, या स्थायी फिक्स चरण विफल रहा |
| निर्णय | विवरण |
|---|
patched | चल रहा कर्नेल फिक्स किए गए संस्करण पर या उससे आगे है |
mitigated | कर्नेल संवेदनशील है लेकिन algif_aead modprobe कॉन्फ़िग द्वारा अवरुद्ध है |
not_applicable | कर्नेल संवेदनशील है लेकिन algif_aead इस सिस्टम पर मौजूद नहीं है |
vulnerable | कर्नेल संवेदनशील है, मॉड्यूल लोड करने योग्य है, कोई शमन लागू नहीं है |
unmitigable_builtin | algif_aead कर्नेल इमेज में संकलित है — modprobe शमन का कोई प्रभाव नहीं है; कर्नेल अपग्रेड आवश्यक है |
unknown | कर्नेल संस्करण पार्स नहीं किया जा सका या मूल्यांकित सीमा से बाहर है |