
उच्च स्थानीय फ़ाइल रीड: LiteBox v0.1.0 linux-userland seccomp SYS_open O_RDONLY में कोई होस्ट पथ जांच नहीं है
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · litebox-seccomp-open-rdonly
वर्ग: फ़ाइल पठन (सैंडबॉक्स FS सीमा) पहुँच: स्थानीय
LiteBox v0.1.0 (d8556e3) - Microsoft
प्रलेखित Linux-userland रनर (litebox-runner-linux-userland) एक deny-by-default seccomp फ़िल्टर स्थापित करता है, फिर उसी प्रक्रिया में एक guest ELF लोड करता है। SYS_open allowlist में तब होता है जब argument 1 (flags) एक dword हो जो OFlags::RDONLY (0) के बराबर हो। कोई path predicate नहीं है। एक guest जो flags 0 के साथ वास्तविक syscall जारी करता है, रनर UID के रूप में host VFS खोलता है, फिर उन बाइट्स को read / mmap करता है। इस pin पर ELF rewriter एक सुरक्षा सीमा नहीं है। --rewrite-syscalls -Z है और डिफ़ॉल्ट रूप से बंद है।
यह अवशेष host-FS पठन है। यह host write नहीं, exec नहीं, ptrace नहीं, LPE नहीं, और RCE नहीं है।
| ID | अभी तक कोई CVE नहीं |
| वर्ग | फ़ाइल पठन (सैंडबॉक्स FS सीमा) |
| पहुँच | स्थानीय (रनर प्रक्रिया में अविश्वसनीय guest बाइनरी) |
| CWE | CWE-284, CWE-862 |
| CVSS | उच्च: 7.1 CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:N |
| उत्पाद | microsoft/litebox |
| प्रभावित | v0.1.0 (d8556e33676e47244bfefa139c1e9ff95bd67d53) Linux userland प्लेटफ़ॉर्म + रनर |
| प्रमाणीकरण | guest पहले से ही सैंडबॉक्स के अंदर चल रहा है |
| लाइसेंस | GNU Affero GPL v3.0 |
| लैब | केवल 127.0.0.1, linux/amd64 |
कौन: litebox-runner-linux-userland में एक अविश्वसनीय guest बाइनरी। विक्रेता (GitHub #1006 पर CvvT) और rewriter crate डॉक्स कहते हैं कि ELF trampolines एक सुरक्षा सीमा नहीं हैं। Linux userland सुरक्षा यह फ़िल्टर है। enable_seccomp_filter deny-by-default है (रिलीज़ में Errno(EINVAL)) TSYNC और PR_SET_NO_NEW_PRIVS के साथ। छेद SYS_open flags Eq 0 है जिसमें कोई path जाँच नहीं है। page_mgmt.rs में टिप्पणी यह है कि CoW मैपिंग फ़िल्टर चालू होने के बाद host प्रोग्राम फ़ाइल को फिर से खोलती है, बजाय पहले से खुले FD को रखने के।
| विधि + सिंक | विशेषाधिकार |
|---|---|
वास्तविक SYS_open("/oracle/secret", 0) फिर SYS_read | host फ़ाइल बाइट्स जिन्हें रनर UID पढ़ सकता है। लैब: fd 3, 35 बाइट्स, witness LITEBOX-SECCOMP-OPEN-RDONLY-WITNESS। पथ initramfs host VFS है, guest overlay नहीं। |
| विधि + सिंक | विशेषाधिकार |
|---|---|
SYS_open("/etc/passwd", 0) फिर read / mmap | रनर UID के रूप में विश्व-पठनीय host फ़ाइलें |
रनर-स्वामित्व वाले पथों का SYS_open (ssh keys, .env, kubeconfig, cloud credentials, --initial-files tar) | वे बाइट्स यदि UID उन्हें खोल सकता है |
SYS_open("/etc/shadow", 0) | shadow hashes केवल यदि रनर root है |
SYS_open("/proc/self/maps", 0) | रनर maps, जिसमें host .text / libc शामिल है (समान प्रक्रिया) |
SYS_open("/proc/self/mem", 0) फिर FD का mmap | रनर address space जिसे UID procfs के माध्यम से पढ़ सकता है। pread unmatched deny है; SYS_mmap अनुमत है। |
इस अवशेष पर कोई नहीं। लैब-प्रमाणित negatives सभी errno=22 EINVAL लौटाए और फ़ाइलें नहीं बनाईं:
| विधि + सिंक | परिणाम |
|---|---|
SYS_open O_RDWR | EINVAL |
SYS_open O_CREAT | EINVAL, कोई फ़ाइल नहीं बनी |
SYS_openat O_RDONLY के साथ भी | EINVAL |
SYS_execve | EINVAL |
socket, ptrace | EINVAL (अतिरिक्त unmatched deny) |
openat / openat2 / creat / unlink / chmod pin पर unmatched deny रहते हैं।
बार में नहीं।
process_vm_readv, io_uring_setup, bpf, mount, pivot_root, unshare, setns, connect, ioctl, getdentsAUDIT_ARCH_X86_64 या KILL_PROCESS को प्रीफ़िक्स करता हैclone3 फ़िल्टर को इनहेरिट करता है; uid_map लिखने के लिए एक अवरुद्ध open चाहिएin_mem + tar_ro) अपरिवर्तित है। यह अवशेष वास्तविक syscall के माध्यम से host VFS हैमैंने microsoft/litebox v0.1.0 (d8556e3, 2026-10-07) को pin किया, main के बजाय। अठारह स्रोत खोजें। rewriter crate और GitHub #1006 पहले से कहते हैं कि trampolines सीमा नहीं हैं। Linux userland फ़िल्टर है। flags 0 के साथ SYS_open वहाँ है ताकि CoW प्रोग्राम फ़ाइल को फिर से खोल सके। कोई path जाँच नहीं है।
गलत मोड़: Docker Desktop Rosetta और qemu-user-static दोनों इस host पर seccomp(SET_MODE_FILTER) से इनकार करते हैं (EINVAL / ENOSYS)। इसलिए लैब qemu-system-x86_64 TCG के अंतर्गत एक x86_64 Alpine virt kernel बूट करता है और कॉपी किए गए फ़िल्टर को PID 1 के रूप में चलाता है ताकि BPF एक वास्तविक x86_64 kernel से टकराए। कॉपी किए गए seccompiler 0.5.0 नियम, in-tree enable_seccomp_filter कॉल नहीं, और पूरा workspace नहीं।
cd lab
./run.sh
Loopback 127.0.0.1:19110। Compose प्रोजेक्ट litebox-seccomp-open-rdonly। प्लेटफ़ॉर्म linux/amd64। Witness LITEBOX-SECCOMP-OPEN-RDONLY-WITNESS। अंतिम पंक्ति:
SUCCESS litebox-seccomp-open-rdonly open-rdonly-ok rdwr-einval openat-einval execve-einval LITEBOX-SECCOMP-OPEN-RDONLY-WITNESS
फ़िल्टर से SYS_open हटाएँ और PR_SET_SECCOMP से पहले CoW FDs को पहले से खोलें, या एक path predicate जोड़ें जो guest FS के बाहर host पथों को न देख सके। Unmatched deny पहले से ही openat को कवर करता है।
विक्रेता intake MSRC है (https://msrc.microsoft.com/create-report)। microsoft/litebox पर सार्वजनिक GitHub issue न खोलें।
Abraxas Labs - abraxaslabs.tech - github.com/abraxas - @abraxas_null - [email protected]