
قراءة ملف محلي عالية: LiteBox v0.1.0 linux-userland seccomp SYS_open O_RDONLY لا يحتوي على فحص مسار المضيف
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · litebox-seccomp-open-rdonly
الفئة: قراءة ملفات (حدود نظام ملفات الصندوق الرملي) الوصول: محلي
LiteBox v0.1.0 (d8556e3) - Microsoft
مُشغّل Linux-userland الموثّق (litebox-runner-linux-userland) يثبّت مرشّح seccomp بسياسة الرفض افتراضيًا، ثم يحمّل ELF ضيفًا في نفس العملية. SYS_open موجود في قائمة السماح عندما تكون الوسيطة الأولى (flags) قيمة dword تساوي OFlags::RDONLY (0). لا يوجد أي شرط على المسار. الضيف الذي يصدر syscall حقيقيًا مع flags 0 يفتح VFS المضيف بصلاحيات UID الخاص بالمُشغّل، ثم يقرأ تلك البايتات عبر read / mmap. مُعيد كتابة ELF ليس حدًا أمنيًا في هذه النسخة المثبّتة. --rewrite-syscalls هو -Z ومعطّل افتراضيًا.
هذه الثغرة المتبقية هي قراءة من نظام ملفات المضيف. ليست كتابة على المضيف، ولا تنفيذ، ولا ptrace، ولا LPE، ولا RCE.
| المعرّف | لا يوجد CVE بعد |
| الفئة | قراءة ملفات (حدود نظام ملفات الصندوق الرملي) |
| الوصول | محلي (ملف ضيف غير موثوق داخل عملية المُشغّل) |
| 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 + المُشغّل |
| المصادقة | الضيف يعمل بالفعل داخل الصندوق الرملي |
| الترخيص | GNU Affero GPL v3.0 |
| المختبر | 127.0.0.1 فقط، linux/amd64 |
من: ملف ضيف غير موثوق في litebox-runner-linux-userland. البائع (CvvT على GitHub #1006) ووثائق حزمة إعادة الكتابة تقول إن قفزات ELF ليست حدًا أمنيًا. أمن Linux userland هو هذا المرشّح. enable_seccomp_filter يعمل بسياسة الرفض افتراضيًا (Errno(EINVAL) في الإصدار) مع TSYNC وPR_SET_NO_NEW_PRIVS. الثغرة هي SYS_open مع flags Eq 0 دون أي فحص للمسار. التعليق في page_mgmt.rs يقول إن تعيين CoW يعيد فتح ملف البرنامج المضيف بعد تفعيل المرشّح، بدلًا من الاحتفاظ بـ FD مفتوح مسبقًا.
| الطريقة + الهدف | الصلاحية |
|---|---|
SYS_open("/oracle/secret", 0) حقيقي ثم SYS_read | بايتات ملف المضيف التي يستطيع UID الخاص بالمُشغّل قراءتها. المختبر: fd 3، 35 بايت، الشاهد LITEBOX-SECCOMP-OPEN-RDONLY-WITNESS. المسار هو VFS المضيف في initramfs، وليس طبقة الضيف. |
| الطريقة + الهدف | الصلاحية |
|---|---|
SYS_open("/etc/passwd", 0) ثم read / mmap | ملفات المضيف القابلة للقراءة للجميع بصلاحيات UID الخاص بالمُشغّل |
SYS_open لمسارات يملكها المُشغّل (مفاتيح ssh، .env، kubeconfig، بيانات اعتماد السحابة، --initial-files tar) | تلك البايتات إذا كان UID قادرًا على فتحها |
SYS_open("/etc/shadow", 0) | تجزئات shadow فقط إذا كان المُشغّل root |
SYS_open("/proc/self/maps", 0) | خرائط المُشغّل، بما في ذلك .text / libc الخاص بالمضيف (نفس العملية) |
SYS_open("/proc/self/mem", 0) ثم mmap للـ FD | مساحة عنونة المُشغّل التي يستطيع UID قراءتها عبر procfs. pread رفض غير مطابق؛ SYS_mmap مسموح. |
لا شيء في هذه الثغرة المتبقية. النتائج السلبية المُثبتة مختبريًا أعادت جميعها errno=22 EINVAL ولم تُنشئ ملفات:
| الطريقة + الهدف | النتيجة |
|---|---|
SYS_open O_RDWR | EINVAL |
SYS_open O_CREAT | EINVAL، لم يُنشأ ملف |
SYS_openat حتى مع O_RDONLY | EINVAL |
SYS_execve | EINVAL |
socket، ptrace | EINVAL (رفض إضافي غير مطابق) |
openat / openat2 / creat / unlink / chmod تبقى رفضًا غير مطابق في هذه النسخة المثبّتة.
ليس ضمن النطاق.
process_vm_readv، io_uring_setup، bpf، mount، pivot_root، unshare، setns، connect، ioctl، getdentsAUDIT_ARCH_X86_64 أو KILL_PROCESSclone3 يرث المرشّح؛ كتابة uid_map تحتاج فتحًا محظورًاin_mem + tar_ro) دون تغيير. هذه الثغرة المتبقية هي VFS المضيف عبر syscall حقيقيثبّتت microsoft/litebox v0.1.0 (d8556e3، 2026-10-07) بدلًا من main. ثمانية عشر بحثًا في المصدر. حزمة إعادة الكتابة وGitHub #1006 تقولان بالفعل إن القفزات ليست الحد. مرشّح Linux userland هو الحد. SYS_open مع flags 0 موجود هناك حتى يتمكن CoW من إعادة فتح ملف البرنامج. لا يوجد فحص للمسار.
منعطف خاطئ: Docker Desktop Rosetta وqemu-user-static كلاهما يرفض seccomp(SET_MODE_FILTER) على هذا المضيف (EINVAL / ENOSYS). لذلك يُقلع المختبر نواة Alpine virt بنية x86_64 تحت qemu-system-x86_64 TCG ويشغّل المرشّح المنسوخ كـ PID 1 حتى يصطدم BPF بنواة x86_64 حقيقية. نسخت قواعد seccompiler 0.5.0، وليس استدعاء enable_seccomp_filter من الشجرة، وليس مساحة العمل الكاملة.
cd lab
./run.sh
Loopback 127.0.0.1:19110. مشروع Compose litebox-seccomp-open-rdonly. المنصة linux/amd64. الشاهد 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 من المرشّح وافتح FDs الخاصة بـ CoW مسبقًا قبل PR_SET_SECCOMP، أو أضف شرطًا على المسار لا يمكنه رؤية مسارات المضيف خارج نظام ملفات الضيف. الرفض غير المطابق يغطي openat بالفعل.
استقبال البائع هو MSRC (https://msrc.microsoft.com/create-report). لا تفتح issue عامًا على GitHub في microsoft/litebox.
Abraxas Labs - abraxaslabs.tech - github.com/abraxas - @abraxas_null - [email protected]