
CVE-2026-31431 का व्यापक विश्लेषण, एक Linux कर्नेल LPE, जिसमें exploit methodology, detection scripts, YARA rules, auditd और Falco configurations, तथा remediation guidance शामिल हैं।
algif_aead स्थानीय विशेषाधिकार वृद्धिCISA KEV | CVSS 7.8 उच्च | लिनक्स कर्नेल 4.14 – 2026 की शुरुआत (~9 वर्ष) को प्रभावित करता है
CVE-2026-31431, जिसे "कॉपी फेल" नाम दिया गया है, लिनक्स कर्नेल के क्रिप्टोग्राफिक सबसिस्टम में एक उच्च-गंभीरता वाली स्थानीय विशेषाधिकार वृद्धि (LPE) भेद्यता है। कोई भी निम्न-विशेषाधिकार वाला स्थानीय उपयोगकर्ता किसी भी अप्रबंधित सिस्टम पर सेकंडों में रूट तक पहुंच सकता है।
| विशेषता | मान |
|---|---|
| CVE | CVE-2026-31431 |
| उपनाम | कॉपी फेल |
| CVSS v3.1 | 7.8 उच्च |
| हमला वेक्टर | स्थानीय |
| आवश्यक विशेषाधिकार | निम्न |
| उपयोगकर्ता सहभागिता | कोई नहीं |
| घटक | crypto/algif_aead.c — authencesn टेम्पलेट |
| प्रस्तुत | 2017 (कमिट 72548b093ee3) |
| खुलासा | 2026 |
| वर्षों तक गुप्त | ~9 वर्ष |
| CISA KEV | हाँ |
| सार्वजनिक PoC | हाँ (732-बाइट स्टैंडअलोन पायथन स्क्रिप्ट) |
detection/check_vulnerable.sh चलाएँ।CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
| मीट्रिक | मान | तर्क |
|--------|-------|-----------|
| आक्रमण वेक्टर | **स्थानीय** | शेल एक्सेस की आवश्यकता (SSH, कंटेनर exec, भौतिक) |
| आक्रमण जटिलता | **कम** | विश्वसनीय, पूर्णतः स्वचालित — कोई रेस कंडीशन आवश्यक नहीं |
| आवश्यक विशेषाधिकार | **कम** | कोई भी गैर-विशेषाधिकार प्राप्त उपयोगकर्ता खाता |
| उपयोगकर्ता सहभागिता | **कोई नहीं** | कोई पीड़ित सहभागिता आवश्यक नहीं |
| गोपनीयता | **उच्च** | पूर्ण सिस्टम समझौता |
| अखंडता | **उच्च** | पूर्ण सिस्टम समझौता |
| उपलब्धता | **उच्च** | पूर्ण सिस्टम समझौता |
### खतरा परिदृश्य
| कारक | आकलन |
|--------|-----------|
| PoC उपलब्धता | सार्वजनिक, हथियारबद्ध, 732-बाइट स्टैंडअलोन Python |
| एक्सप्लॉइट विश्वसनीयता | उच्च — बिना संशोधन के परीक्षण किए गए डिस्ट्रोस पर काम करता है |
| पहचान कठिनाई | उच्च — कोई डिस्क राइट नहीं, कोई डर्टी पेज नहीं |
| आवश्यक हमलावर कौशल | कम — सार्वजनिक PoC वाला स्क्रिप्ट किडी |
| CISA KEV | 2026 में जोड़ा गया — सक्रिय रूप से निगरानी में |
| Microsoft Defender | सक्रिय जांच के अधीन चिह्नित |
### प्रभावित वातावरण
| वातावरण | जोखिम |
|-------------|------|
| बेयर-मेटल Linux सर्वर | गंभीर |
| Linux VMs (क्लाउड या ऑन-प्रिमाइसेस) | गंभीर |
| Kubernetes नोड्स | गंभीर (कंटेनर एस्केप भी सक्षम करता है) |
| Docker होस्ट | गंभीर |
| साझा होस्टिंग / मल्टी-टेनेंट | गंभीर |
| WSL2 / Windows पर Linux | कर्नेल संस्करण के अनुसार आकलन करें |
---
## 3. तकनीकी गहन विश्लेषण
### 3.1 पृष्ठभूमि: AF_ALG और AEAD
Linux कर्नेल **AF_ALG सॉकेट्स** (`AF_ALG = 38`) के माध्यम से क्रिप्टोग्राफिक ऑपरेशन्स को यूज़रस्पेस में उजागर करता है। यह इंटरफ़ेस (`algif_aead`) गैर-विशेषाधिकार प्राप्त अनुप्रयोगों को कर्नेल-मोड कोड की आवश्यकता के बिना कर्नेल क्रिप्टो हार्डवेयर एक्सेलेरेटर को आमंत्रित करने की अनुमति देता है।
**AEAD** (एसोसिएटेड डेटा के साथ प्रमाणित एन्क्रिप्शन) एल्गोरिदम जैसे AES-GCM और ChaCha20-Poly1305 व्यापक रूप से TLS, डिस्क एन्क्रिप्शन और VPN प्रोटोकॉल के लिए उपयोग किए जाते हैं। कमजोर टेम्पलेट `authencesn` है — एक AEAD संरचना जो `hmac(sha256)` + `cbc(aes)` का उपयोग करती है, जिसमें विस्तारित अनुक्रम संख्या (ESN) समर्थन होता है, जो आमतौर पर IPsec में उपयोग किया जाता है।
### 3.2 मूल कारण
2017 में, कमिट `72548b093ee3` ने प्रदर्शन अनुकूलन के रूप में `algif_aead` में **इन-प्लेस AEAD ऑपरेशन** पेश किया — जिससे क्रिप्टो इंजन को एक ही बफर को पढ़ने और लिखने की अनुमति मिली। यह त्रुटिपूर्ण था:```
The bug chain:
1. Caller binds AF_ALG socket to:
authencesn(hmac(sha256),cbc(aes))
2. Caller sends a decryption request via sendmsg() with specific flags
3. Caller uses splice() to feed PAGE CACHE PAGES from an open file
descriptor directly into the socket's scatterlist
4. The authencesn template, during ESN header processing, uses the
OUTPUT BUFFER as scratch space — writing 4 bytes past the
expected output boundary
5. Because the scatterlist contains page cache pages (not private
copies), this scratch write lands DIRECTLY IN THE PAGE CACHE
6. Page cache is shared kernel-wide — all processes reading the
same file now see the modified bytes
Key insight: splice() is zero-copy — it hands page cache references
to the socket. The in-place "optimization" then writes INTO those
pages. No dirty bit is set because the write goes through the crypto
engine, not the normal write path.
यह भेद्यता उस किसी भी फ़ाइल के पेज कैश में एक नियंत्रित 4-बाइट राइट प्रदान करती है जिसे हमलावर पढ़ने के लिए खोल सकता है:
| गुण | मान |
|---|---|
| राइट का आकार | 4 बाइट |
| ऑफ़सेट नियंत्रण | हाँ — splice ऑफ़सेट के माध्यम से हमलावर-नियंत्रित |
| लक्ष्य | किसी भी पठनीय फ़ाइल का पेज कैश |
| डर्टी पेज मार्किंग | कोई नहीं |
| डिस्क पर संशोधन | कोई नहीं |
| टाइमस्टैम्प अपडेट | कोई नहीं |
| कर्नेल लॉग प्रविष्टि | कोई नहीं (जब तक auditd कॉन्फ़िगर न हो) |
राइट दोहराने योग्य है — एक्सप्लॉइट बड़े कोड अनुक्रमों को पैच करने के लिए 4-बाइट राइट को लूप करता है।
[1] Open /usr/bin/su (or any setuid-root binary) for reading ↓ [2] Map a copy to find target instruction bytes (e.g., UID check, execve path, security gate) ↓ [3] Compute exact page cache offset of target bytes ↓ [4] Set up AF_ALG socket → authencesn(hmac(sha256),cbc(aes)) ↓ [5] splice() the target binary's page cache into the socket ↓ [6] Trigger decryption → authencesn scratch write patches the target bytes in page cache (4 bytes per iteration) ↓ [7] Repeat for each 4-byte patch needed ↓ [8] Execute /usr/bin/su → runs root-owned setuid binary but now with attacker-controlled code in page cache ↓ [9] Root shell
### 3.5 मानक सुरक्षा उपाय विफल क्यों होते हैं
| सुरक्षा उपाय | बायपास हुआ? | कारण |
|---------|-----------|--------|
| फ़ाइल अखंडता निगरानी (Tripwire/AIDE) | **हाँ** | डिस्क पर कोई बदलाव नहीं |
| IDS फ़ाइल हैश जाँच | **हाँ** | डिस्क बाइट्स अपरिवर्तित |
| `inotify` फ़ाइल वॉच | **हाँ** | कोई VFS राइट इवेंट नहीं |
| SELinux / AppArmor | **आंशिक** | प्रोसेस को नियंत्रित करता है, क्रिप्टो इंजन के माध्यम से पेज कैश राइट को नहीं |
| रीड-ओनली माउंट | **हाँ** | पेज कैश मेमोरी में संशोधित होता है, माउंट के माध्यम से नहीं |
| बाइनरी पर auditd `watch` | **हाँ** | ऑडिट VFS राइट्स देखता है — यह VFS को बायपास करता है |
### 3.6 प्रभावित कर्नेल संस्करण