
Copy Fail Linux kernel vulnerability (CVE-2026-31431) के लिए केवल-पढ़ने योग्य Bash जाँचकर्ता
एक छोटी, निर्भरता-हल्की Bash स्क्रिप्ट जो आपको बताती है कि आपका Linux सिस्टम Copy Fail स्थानीय विशेषाधिकार-वृद्धि भेद्यता (CVE-2026-31431) के संपर्क में है या नहीं।
स्क्रिप्ट केवल-पढ़ने के लिए है: यह कभी बग का शोषण नहीं करती, कर्नेल मॉड्यूल लोड नहीं करती, और सिस्टम को संशोधित नहीं करती।
Copy Fail Linux कर्नेल के authencesn AEAD क्रिप्टोग्राफिक टेम्पलेट में एक तर्क बग है, जो उपयोगकर्ता स्थान से AF_ALG (algif_aead) सॉकेट इंटरफेस के माध्यम से पहुँच योग्य है।
| क्षेत्र | मान |
|---|---|
| CVE | CVE-2026-31431 |
| प्रकटीकरण | 2026-04-29 |
| CVSS v3.1 | 7.8 (उच्च) |
| वर्ग | स्थानीय विशेषाधिकार वृद्धि |
| प्रभावित घटक | crypto/authencesn + crypto/algif_aead |
| परिचय | 2017 (in-place AEAD optimization in algif_aead.c) |
| मुख्यलाइन फिक्स | commit a664bf3d603d, merged 2026-04-01 |
एक अविशेषाधिकृत स्थानीय उपयोगकर्ता किसी भी फ़ाइल के पेज कैश में एक नियतात्मक, नियंत्रित 4-बाइट लेखन को ट्रिगर कर सकता है जिसे वे पढ़ सकते हैं। एक सार्वजनिक प्रूफ-ऑफ-कॉन्सेप्ट (732 बाइट्स का Python) इस प्रिमिटिव का उपयोग करके एक setuid बाइनरी को ओवरराइट करता है और 2017 के बाद से जारी प्रत्येक मुख्यधारा वितरण पर रूट प्राप्त करता है।
हर Linux वितरण जो 2017 के बाद निर्मित कर्नेल को algif_aead सक्षम के साथ भेजता है। पुष्टि-प्रभावित परिवारों में शामिल हैं:
# Download the script
curl -fsSLO https://raw.githubusercontent.com/samanzamani/copy-fail-checker/main/check-copy-fail.sh
# Make it executable
chmod +x check-copy-fail.sh
# Run it
./check-copy-fail.sh
या रिपॉजिटरी क्लोन करें:
git clone https://github.com/samanzamani/copy-fail-checker.git
cd copy-fail-checker
./check-copy-fail.sh
स्क्रिप्ट को root की आवश्यकता नहीं है। इसे अपने सामान्य उपयोगकर्ता के रूप में चलाने से हमले की सतह का सबसे यथार्थवादी दृश्य मिलता है, क्योंकि हमलावर के पास बिल्कुल यही संदर्भ होगा।
स्क्रिप्ट तीन स्वतंत्र जांच चलाती है और उन्हें एक ही फैसले में जोड़ती है।
यह /etc/os-release और uname -r को पढ़ता है, फिर आपके चल रहे कर्नेल की तुलना आपके वितरण की सुरक्षा टीम द्वारा प्रकाशित आधिकारिक स्थिर संस्करण से करता है। संस्करण तालिका वर्तमान में कवर करती है:
| वितरण | पैच किया गया कर्नेल (≥) |
|---|---|
| AlmaLinux / RHEL / Rocky / CentOS 8 | 4.18.0-553.121.1.el8_10 |
| AlmaLinux / RHEL / Rocky / CentOS 9 | 5.14.0-611.49.2.el9_7 |
| AlmaLinux / RHEL / Rocky / CentOS 10 | 6.12.0-124.52.2.el10_1 |
| Ubuntu 26.04+ ("Resolute") | प्रभावित नहीं |
| Ubuntu 18.04 – 25.10 | रोलिंग, apt देखें |
| Debian (सभी सूट) | रोलिंग, DSA देखें |
यदि आपका वितरण तालिका में नहीं है, तो स्क्रिप्ट नीचे दिए गए रनटाइम जांचों पर वापस आ जाती है।
algif_aead मॉड्यूल स्थितिस्क्रिप्ट बिना कुछ संशोधित किए चार चीजों का निरीक्षण करती है:
lsmod)modinfo)/etc/modprobe.d, /usr/lib/modprobe.d, या /run/modprobe.d में ब्लैकलिस्टेड है/boot/config-<uname> या /proc/config.gz में बिल्ट-इन हैएक ब्लैकलिस्टेड, अनलोड और बिल्ट-इन नहीं मॉड्यूल एक अपैच्ड कर्नेल पर भी हमले की सतह को बंद कर देता है।
AF_ALG सॉकेट पहुँच क्षमतासबसे विश्वसनीय संकेत वह है जो हमलावर वास्तव में देखेगा। स्क्रिप्ट एक छोटी Python प्रोब का उपयोग करती है (socket.socket(AF_ALG, SOCK_SEQPACKET, 0) के बाद bind() को authencesn(hmac(sha256),cbc(aes)) AEAD टेम्पलेट पर) यह पता लगाने के लिए कि क्या AF_ALG सॉकेट एक अविशेषाधिकृत संदर्भ से बनाए और बाइंड किए जा सकते हैं। प्रोब सॉकेट बनाता है, बाइंड करता है, और तुरंत बंद कर देता है बिना कुछ शोषणीय छोड़े।
यदि python3 स्थापित नहीं है तो प्रोब छोड़ दिया जाता है और फैसला जांच 1 और 2 पर निर्भर करता है।
| फैसला | निकास कोड | अर्थ |
|---|---|---|
patched | 0 | चल रहा कर्नेल विक्रेता-स्थिर संस्करण पर या उससे ऊपर है। |
mitigated | 0 | AF_ALG अवरुद्ध है और मॉड्यूल लोड नहीं है। |
likely_mitigated | 0 | मॉड्यूल ब्लैकलिस्टेड है और लोड नहीं है; कोई लाइव प्रोब संभव नहीं था। |
vulnerable | 1 | कर्नेल अपैच्ड है और algif_aead / AF_ALG पहुँच योग्य है। |
unknown | 2 | निर्णय लेने के लिए पर्याप्त संकेत नहीं। संभावित रूप से कमजोर मानें। |
not_applicable | 3 | Linux पर नहीं चल रहा। |
पाइपलाइनों, कॉन्फ़िगरेशन प्रबंधन, या फ्लीट स्कैनिंग के लिए, --json पास करें:
./check-copy-fail.sh --json
उदाहरण आउटपुट:
{
"verdict": "vulnerable",
"distro_id": "ubuntu",
"distro_version_id": "24.04",
"kernel": "6.8.0-31-generic",
"patched_version": "",
"kernel_status": "unknown",
"module_loaded": 0,
"module_builtin": 0,
"module_available": 1,
"module_blacklisted": 0,
"af_alg_status": "reachable"
}
यह एकमात्र पूर्ण सुधार है। अपडेट करने के बाद, रीबूट करें ताकि नया कर्नेल वास्तव में चल रहा हो।
# Debian / Ubuntu
sudo apt update && sudo apt full-upgrade && sudo reboot
# RHEL / AlmaLinux / Rocky / CentOS Stream
sudo dnf clean metadata && sudo dnf upgrade && sudo reboot
# openSUSE / SLES
sudo zypper refresh && sudo zypper update && sudo reboot
# Amazon Linux 2023
sudo dnf upgrade --releasever=latest && sudo reboot
algif_aead अक्षम करेंयदि आप अभी पैच किए गए कर्नेल में रीबूट नहीं कर सकते हैं, तो कमजोर मॉड्यूल को ब्लैकलिस्ट करें। यह किसी भी एप्लिकेशन को तोड़ देता है जो वैध रूप से AF_ALG AEAD सिफर का उपयोग करता है (अधिकांश सर्वरों पर दुर्लभ — पहले स्टेजिंग वातावरण में सत्यापित करें)।
# Persist the blacklist across reboots
echo "install algif_aead /bin/false" | sudo tee /etc/modprobe.d/disable-algif-aead.conf
# Unload it from the running kernel right now
sudo rmmod algif_aead 2>/dev/null || true
यदि मॉड्यूल बिल्ट-इन है, तो ब्लैकलिस्टिंग काम नहीं करेगी लेकिन initcall को अक्षम करना संभव है। रीबूट आवश्यक है।
sudo grubby --update-kernel=ALL --args="initcall_blacklist=algif_aead_init"
sudo reboot
कंटेनरीकृत वर्कलोड के लिए, अपने seccomp प्रोफाइल से AF_ALG सॉकेट परिवार को भी ब्लॉक करें ताकि एक समझौता कंटेनर कर्नेल सतह तक नहीं पहुंच सके।
== System information ==
[INFO] Distribution : Ubuntu 24.04.2 LTS (ubuntu 24.04)
[INFO] Kernel : 6.8.0-31-generic
== Check 1 / 3 — Kernel version ==
[WARN] No vendor-fixed kernel version is recorded for ubuntu 24.04.
[WARN] Falling back to runtime mitigation checks below.
== Check 2 / 3 — algif_aead kernel module ==
[WARN] algif_aead is not loaded but can be autoloaded on demand (no blacklist found).
== Check 3 / 3 — AF_ALG socket reachability ==
[VULN] AF_ALG sockets are reachable from this unprivileged context.
== Verdict ==
[VULN] This system appears to be VULNERABLE to CVE-2026-31431.
[VULN] Apply the vendor kernel update or blacklist algif_aead as a temporary mitigation.
uname -r पर भरोसा करती है। यदि आप एक आउट-ऑफ-ट्री या पुनर्निर्मित कर्नेल चला रहे हैं, तो संस्करण तुलना यह प्रतिबिंबित नहीं कर सकती है कि फिक्स वास्तव में बैकपोर्ट किया गया था या नहीं।AF_ALG के लिए blocked_permission की रिपोर्ट कर सकते हैं — होस्ट कर्नेल स्वयं अभी भी कमजोर हो सकता है।