CVE-2026-31431 (कॉपी फेल) के लिए डिटेक्शन स्क्रिप्ट जो कर्नेल संस्करण, पैच की उपस्थिति, कर्नेल कॉन्फ़िगरेशन, AF_ALG सॉकेट उपलब्धता, setuid बाइनरी और मिटिगेशन की जाँच करके Linux सिस्टम पर भेद्यता स्थिति निर्धारित करती है।
केवल पहचान। एक कार्यशील PoC पहले से मौजूद है copy.fail/#exploit पर। यह स्क्रिप्ट सिस्टम एडमिन और सुरक्षा टीमों के लिए है ताकि वे निर्धारित कर सकें कि वे कहाँ भेद्य हैं — या पैचिंग के बाद भी भेद्य हैं।
29 अप्रैल 2026 को, कॉपी फेल (CVE-2026-31431) नामक एक भेद्यता को Xint कोड रिसर्च टीम द्वारा सार्वजनिक रूप से प्रकट किया गया था। यह एक लॉजिक बग है जो लगभग 2017 से लिनक्स कर्नेल में चुपचाप मौजूद है — लगभग एक दशक — और यह किसी भी अनप्रिविलेज्ड स्थानीय उपयोगकर्ता को रूट प्राप्त करने देता है।
"विशिष्ट परिस्थितियों में कुछ भाग्य और अच्छी हवा के साथ रूट प्राप्त करना" नहीं। बस... रूट प्राप्त करना। विश्वसनीय रूप से। अनिवार्य रूप से हर प्रमुख लिनक्स वितरण पर।
यह Ubuntu, Amazon Linux, RHEL, SUSE, और पिछले ~8 वर्षों से मुख्यधारा कर्नेल चलाने वाली किसी भी अन्य चीज़ को प्रभावित करता है। एक ही स्क्रिप्ट, कोई पुनर्संकलन नहीं, कोई प्रति-वितरण ट्वीक आवश्यक नहीं।
हाँ, यह उतना ही बुरा है जितना लगता है।
लिनक्स कर्नेल में एक क्रिप्टो सबसिस्टम है जो AF_ALG सॉकेट के माध्यम से अनप्रिविलेज्ड उपयोगकर्ताओं के लिए सुलभ है। splice() नामक एक तंत्र है जो फ़ाइल डेटा को कॉपी किए बिना सीधे उस सबसिस्टम में फीड कर सकता है — जिसका अर्थ है कि फ़ाइल की कर्नेल की इन-मेमोरी कैश्ड कॉपी ("पेज कैश") एक क्रिप्टोग्राफ़िक ऑपरेशन के अंदर समाप्त हो जाती है।
एक विशिष्ट एल्गोरिथ्म — authencesn, जो IPsec एक्सटेंडेड सीक्वेंस नंबरों के लिए उपयोग किया जाता है — में एक विचित्रता है जहाँ यह आउटपुट बफर को स्क्रैच स्पेस के रूप में उपयोग करता है और 4 बाइट्स उस स्थान से थोड़ा आगे लिखता है जहाँ इसे लिखना चाहिए। सामान्य रूप से हानिरहित। लेकिन जब /usr/bin/su जैसे setuid बाइनरी के पेज कैश पेज उस आउटपुट बफर में चेन हो जाते हैं (algif_aead.c में 2017 के "अनुकूलन" के कारण), वे 4 बाइट्स सीधे बाइनरी की कर्नेल की कैश्ड कॉपी में पहुँच जाते हैं।
ऑपरेशन एक त्रुटि के साथ विफल हो जाता है। कर्नेल उस पेज को कभी गंदा (dirty) के रूप में चिह्नित नहीं करता। डिस्क पर फ़ाइल अछूती रहती है। डिस्क पर चेकसम की जाँच करने वाले फ़ाइल अखंडता उपकरण कुछ भी गलत नहीं देखते।
लेकिन पेज कैश ही वह है जो निष्पादित होता है। और su setuid रूट है।
पूर्ण तकनीकी लेखन xint.io पर है और वास्तव में पढ़ने योग्य है।
मूल रिलीज़ से सात साथ ही पहचान अंतराल को बंद करने के लिए छह नई जाँचें:
| # | जाँच | यह क्या देखती है |
|---|---|---|
| 1 | कर्नेल संस्करण | क्या यह कर्नेल प्रभावित सीमा (4.10–6.14) में है? |
| 2 | पैच उपस्थिति | क्या फिक्स कमिट वास्तव में आपके चल रहे कर्नेल में है? |
| 3 | algif_aead मॉड्यूल | क्या भेद्य मॉड्यूल लोड है या लोड करने योग्य है? |
| 4 | CONFIG_CRYPTO_AUTHENC (नया) | क्या CONFIG_CRYPTO_AUTHENC बिल्ट-इन (=y) है या मॉड्यूल (=m)? यह एकल विकल्प authenc और authencesn दोनों बनाता है। बिल्ट-इन का अर्थ है कि modprobe ब्लैकलिस्ट शमन कुछ नहीं करता। |
| 5 | CONFIG_CRYPTO_USER_API_AEAD (नया) | क्या AF_ALG AEAD यूज़रस्पेस इंटरफ़ेस भी संकलित है? यदि नहीं, तो पूरा एक्सप्लॉइट पथ संकलन समय पर बंद है। |
| 6 | AF_ALG सॉकेट | क्या एक अनप्रिविलेज्ड उपयोगकर्ता अभी एक खोल सकता है? |
| 7 | पायथन os.splice | क्या शुद्ध-पायथन एक्सप्लॉइट पथ उपलब्ध है? |
| 8 | Setuid बाइनरीज़ | सिस्टम पर मौजूद पठनीय setuid-रूट लक्ष्यों की विस्तारित सूची। |
| 9 | शमन | AppArmor, SELinux, seccomp — क्या मौजूद है? |
| 10 | यूज़र नेमस्पेस (नया) | क्या अनप्रिविलेज्ड यूज़र नेमस्पेस सक्षम हैं? (कॉपी फेल को सीधे ब्लॉक नहीं करता, लेकिन व्यापक स्थानीय privesc सतह को प्रभावित करता है।) |
| 11 | ट्रांसपेरेंट ह्यूजपेज (नया) | THP स्थिति — पेज कैश संरेखण और एक्सप्लॉइट विश्वसनीयता को प्रभावित कर सकती है। |
| 12 | पर्यावरण पहचान (नया) | Docker/कंटेनर/VM संदर्भ — कंटेनर होस्ट कर्नेल साझा करते हैं; होस्ट को पैच करने की आवश्यकता है। |
| 13 | रूट-उपयोगकर्ता चेतावनी (नया) | रूट के रूप में चलने पर चेतावनी देता है, क्योंकि कई जाँचें अनप्रिविलेज्ड प्रतिबंधों की परवाह किए बिना रूट के लिए गलत सकारात्मक देती हैं। |
Bash स्क्रिप्ट समान मूल पहचान तर्क को कवर करती है लेकिन तीन पायथन-विशिष्ट आइटम छोड़ देती है:
| # | जाँच | नोट्स |
|---|---|---|
| 1 | कर्नेल संस्करण | |
| 2 | पैच उपस्थिति | |
| 3 | algif_aead मॉड्यूल | |
| 4 | AF_ALG सॉकेट | उपलब्ध होने पर पायथन को सहायक के रूप में उपयोग करता है; अन्यथा कर्नेल कॉन्फ़िग अनुमान पर वापस जाता है |
| 5 | Setuid बाइनरीज़ | विस्तारित सूची, पायथन संस्करण के समान |
| 6 | शमन | AppArmor, SELinux, seccomp |
| 7 | CONFIG_CRYPTO_AUTHENC | |
| 8 | यूज़र नेमस्पेस | |
| 9 | ट्रांसपेरेंट ह्यूजपेज | |
| 10 | पर्यावरण पहचान |
शेल स्क्रिप्ट में मौजूद नहीं (पायथन की तुलना में):
| लापता जाँच | कारण |
|---|---|
| CONFIG_CRYPTO_USER_API_AEAD | अभी तक लागू नहीं — योजनाबद्ध |
| पायथन os.splice उपलब्धता | शेल स्क्रिप्ट के लिए लागू नहीं |
| रूट-उपयोगकर्ता चेतावनी | अभी तक लागू नहीं — योजनाबद्ध |
कोई भी स्क्रिप्ट कुछ भी ठीक नहीं करेगी या एक्सप्लॉइट नहीं करेगी। वे आपको आपके सिस्टम के बारे में सच बताती हैं ताकि आप उस पर कार्य कर सकें।
# स्क्रिप्ट को क्लोन या डाउनलोड करें, फिर:
python3 cve-2026-31431-detect.py
बस इतना ही। अंत में सारांश के साथ रंग-कोडित रिपोर्ट।
स्क्रिप्ट भेद्य निष्कर्षों पर गैर-शून्य कोड के साथ बाहर निकलती है, जिससे यह पाइपलाइन उपयोग के लिए उपयुक्त हो जाती है:
| कोड | अर्थ |
|---|---|
0 | कोई भेद्य स्थिति नहीं मिली |
1 | एक या अधिक भेद्य स्थितियाँ मिलीं |
# उदाहरण: होस्ट भेद्य होने पर CI चरण को विफल करें
python3 cve-2026-31431-detect.py
rc=$?
if [ $rc -eq 1 ]; then
echo "VULNERABLE — block deployment"
elif [ $rc -ne 0 ]; then
echo "ERROR — script failed to complete (exit $rc)"
fi
CVE-2026-31431 'Copy Fail' — Vulnerability Detection
authencesn page cache corruption / local privilege escalation
Running as uid=1001, euid=1001
=== Kernel Version ===
[VULNERABLE] Kernel version
Reason : Kernel is in the vulnerable range (4.10 – 6.14)
Detail : Release: 6.12.0-124.45.1.el10_1 — patch status must be confirmed
=== CONFIG_CRYPTO_AUTHENC (Kernel Config) ===
[VULNERABLE] CONFIG_CRYPTO_AUTHENC
Reason : Built as module (=m): auto-loads on AF_ALG bind(); modprobe blacklist is the correct mitigation
=== CONFIG_CRYPTO_USER_API_AEAD (Kernel Config) ===
[VULNERABLE] CONFIG_CRYPTO_USER_API_AEAD
Reason : AF_ALG AEAD interface is a loadable module — unprivileged users can access the crypto subsystem via AF_ALG sockets
...
SYSTEM IS LIKELY VULNERABLE TO CVE-2026-31431
Recommended actions:
1. Apply your distribution's kernel update for CVE-2026-31431
2. Until patched, blacklist the module:
echo 'install algif_aead /bin/false' > /etc/modprobe.d/disable-algif-aead.conf
rmmod algif_aead 2>/dev/null
NOTE: this is ONLY effective when CONFIG_CRYPTO_AUTHENC=m (module).
If CONFIG_CRYPTO_AUTHENC=y (built-in), patching is the only fix.
एक साथी Bash स्क्रिप्ट (cve-2026-31431-detect.sh) उन वातावरणों के लिए उपलब्ध है जहाँ पायथन मौजूद नहीं है या जहाँ शेल-नेटिव टूलिंग पसंद की जाती है। यह 13 में से 10 जाँचें करती है — क्या भिन्न है इसके विवरण के लिए ऊपर जाँच तुलना तालिका देखें।
# मूल रन
bash cve-2026-31431-detect.sh
# JSON आउटपुट — SIEM अंतर्ग्रहण, Ansible फैक्ट्स, लॉग एकत्रीकरण के लिए उपयुक्त
bash cve-2026-31431-detect.sh --json > scan-results.json
# शांत मोड — केवल सारांश प्रिंट करें (CI लॉग में उपयोगी)
bash cve-2026-31431-detect.sh --quiet
# ANSI रंग अक्षम करें (लॉग फ़ाइलों के लिए)
bash cve-2026-31431-detect.sh --no-colour
शेल स्क्रिप्ट समान एग्ज़िट कोड (0 = OK, 1 = भेद्य) का उपयोग करती है और पाइपलाइन उपभोग के लिए समतुल्य JSON आउटपुट उत्पन्न करती है। जहाँ सिस्टम पर पायथन 3 उपलब्ध है, शेल स्क्रिप्ट लाइव AF_ALG सॉकेट परीक्षण करने के लिए इसका उपयोग करती है; अन्यथा यह कर्नेल कॉन्फ़िग अनुमान पर वापस जाती है।
असली फिक्स आपके कर्नेल को पैच करना है। अपने वितरण के सुरक्षा परामर्शों की जाँच करें।
| वितरण | कहाँ देखें |
|---|---|
| Ubuntu | ubuntu.com/security/CVE-2026-31431 |
| RHEL / Amazon Linux | dnf update kernel |
| SUSE | zypper update kernel-default |
| Debian | apt update && apt upgrade |
यदि CONFIG_CRYPTO_AUTHENC जाँच =m (मॉड्यूल के रूप में बनाया गया, बिल्ट-इन नहीं) रिपोर्ट करती है, तो आप इसे ब्लैकलिस्ट कर सकते हैं:
echo 'install algif_aead /bin/false' > /etc/modprobe.d/disable-algif-aead.conf
rmmod algif_aead 2>/dev/null
महत्वपूर्ण: यदि
CONFIG_CRYPTO_AUTHENC=y(बिल्ट-इन) है तो इस शमन का कोई प्रभाव नहीं है। उस स्थिति में, कर्नेल को पैच करना ही एकमात्र फिक्स है। स्क्रिप्ट में CONFIG_CRYPTO_AUTHENC जाँच आपको बताती है कि आप किस स्थिति में हैं। ध्यान दें किCONFIG_CRYPTO_AUTHENCसही कर्नेल कॉन्फ़िग कुंजी है — यह एक ही विकल्प सेauthencऔरauthencesnदोनों मॉड्यूल बनाता है।
यदि आप IPsec का उपयोग कर रहे हैं तो यह इसे प्रभावित कर सकता है — फ्लीट-व्यापी तैनाती से पहले सत्यापित करें।
अपस्ट्रीम फिक्स यह कमिट है — यह algif_aead.c में 2017 के इन-प्लेस AEAD अनुकूलन को वापस लेता है, स्रोत और गंतव्य स्कैटरलिस्ट को अलग करता है ताकि पेज कैश पेज अब लिखने योग्य गंतव्य में समाप्त न हो सकें।
यदि आप इसे Docker कंटेनर, Kubernetes पॉड, या अन्य कंटेनर वातावरण के अंदर चला रहे हैं, तो स्क्रिप्ट आपको चेतावनी देगी: कंटेनर होस्ट कर्नेल साझा करते हैं। भेद्यता कर्नेल में है, कंटेनर छवि में नहीं। आपको होस्ट का आकलन और पैच करना चाहिए।
# GitHub Actions
# The step will naturally fail and block the pipeline when the script exits 1.
# No extra configuration needed — non-zero exit codes fail steps by default.
- name: Check CVE-2026-31431
run: |
python3 cve-2026-31431-detect.py
rc=$?
if [ $rc -eq 1 ]; then
echo "VULNERABLE — pipeline blocked"
exit 1
elif [ $rc -ne 0 ]; then
echo "ERROR — detection script failed to complete (exit $rc)"
exit $rc
fi
# Ansible
# Uses playbook_dir to ensure the script path resolves correctly.
# failed_when checks for any non-zero exit (vulnerability OR script error).
- name: Check for CVE-2026-31431
script: "{{ playbook_dir }}/cve-2026-31431-detect.py"
register: cve_check
failed_when: cve_check.rc != 0
# Nagios / monitoring check (shell script — supports exit codes natively)
bash cve-2026-31431-detect.sh --quiet
# exit 0 = OK, exit 1 = CRITICAL (vulnerable)
# JSON output for SIEM / log aggregation (shell script)
bash cve-2026-31431-detect.sh --json --quiet > /var/log/cve-2026-31431-$(hostname)-$(date +%Y%m%d).json
| तिथि | घटना |
|---|---|
| 2026-03-23 | लिनक्स कर्नेल सुरक्षा टीम को रिपोर्ट किया गया |
| 2026-03-24 | स्वीकार किया गया |
| 2026-03-25 | पैच प्रस्तावित और समीक्षित किए गए |
| 2026-04-01 | मुख्यधारा कर्नेल में फिक्स प्रतिबद्ध |
| 2026-04-22 | CVE-2026-31431 आवंटित |
| 2026-04-29 | सार्वजनिक प्रकटीकरण |
मूल शोध अंतर्दृष्टि के लिए Theori में Taeyang Lee को श्रेय, और पूर्ण प्रकटीकरण लेखन के लिए Xint कोड रिसर्च टीम को।
एक गलत सकारात्मक मिला? एक वितरण जो यह चूक जाता है? एक कर्नेल कॉन्फ़िग जिसे जाँचा जाना चाहिए? PR स्वागत योग्य हैं। लक्ष्य सटीक संकेत है, केवल डरावना लाल पाठ नहीं।
यह उपकरण रक्षात्मक सुरक्षा उद्देश्यों के लिए जैसा है वैसा प्रदान किया गया है। इसे उन सिस्टमों पर इंगित करें जिनका आकलन करने के लिए आप अधिकृत हैं। इसके बारे में अजीब मत बनो।