
as-user Spoofing → Authorization Bypass → Root-context Mount → LPECVE-2026-7867 هي ثغرة تصعيد صلاحيات محلية في udisks2 تتعلق بطريقة D-Bus الخاصة بـ Filesystem.Mount، وخيار as-user، وتدفقات التركيب المُدارة عبر fstab، ومعالجة تفويض معيبة.
يحتوي هذا المستودع الخاص على ملاحظات البحث الفني ونصوص PoC المستخدمة للتحقق من المشكلة في بيئة مختبرية خاضعة للرقابة.
تم اكتشاف الثغرة والإبلاغ عنها بواسطة:
| Azizcan Daştan | azqzazq1 |
| Özlem Ozan | oz7oz7 |
تم تخصيص المعرف التالي للمشكلة:
CVE-2026-7867
تنتج الثغرة عن علاقة ثقة معيبة بين UID الحقيقي لمتصل D-Bus وUID المحسوب/الفعلي الناتج عن خيار التركيب as-user.
في التدفقات المعيبة، يمكن لمستخدم محلي غير ممتاز التأثير على مسار تنفيذ التركيب بحيث يتم تركيب نظام ملفات في سياق ممتاز/جذر دون سلوك تفويض PolicyKit المتوقع.
الخلل الجوهري ليس مجرد «خيارات تركيب يتحكم بها المستخدم».
المشكلة الفعلية هي:
يفشل
udisks2في التمييز باستمرار بين هوية المتصل الأصلية وهويةas-userالمحسوبة أثناء تفويض وتنفيذ تركيب fstab.
يرتبط المنطق المعيب بمسار معالجة تركيب fstab داخل udisks2، خاصةً عندما يتضمن طلب التركيب ما يلي:
Filesystem.Mount
as-user
x-udisks-auth
user
users
المناطق الحساسة أمنيًا ذات الصلة هي:
D-Bus caller identity
↓
as-user option handling
↓
fstab authorization logic
↓
PolicyKit decision flow
↓
root-context mount execution
┌─────────────────────────────┐
│ Unprivileged Local User │
└──────────────┬──────────────┘
│
│ Filesystem.Mount
│ with as-user influence
▼
┌─────────────────────────────┐
│ udisks2 / udisksd │
│ privileged system daemon │
└──────────────┬──────────────┘
│
│ fstab logic evaluates
│ user/auth options
▼
┌─────────────────────────────┐
│ Authorization Gap │
│ mount_other_user not │
│ enforced in skipped path │
└──────────────┬──────────────┘
│
│ root-context branch reached
▼
┌─────────────────────────────┐
│ Filesystem Mounted │
│ without expected auth flow │
└──────────────┬──────────────┘
│
│ impact depends on mount flags
▼
┌─────────────────────────────┐
│ Local Privilege Escalation │
│ controlled lab validation │
└─────────────────────────────┘
ينبع السلوك المعيب من خلل في الخلط بين الهويات.
يمتلك النظام عدة مفاهيم للهوية:
real D-Bus caller UID
computed as-user UID
effective mount UID
udisksd daemon privilege context
يفشل التدفق المعيب في فرض هذه الهويات بشكل متسق.
على وجه الخصوص:
mount_other_user صحيحًا بسبب استخدام as-userx-udisks-auth أو user أو users أن تؤثر على مسار التفويضmount_other_user بشكل موثوق خارج تلك الكتلةالنتيجة هي تجاوز لحدود الصلاحيات المحلية.
x-udisks-authمن المفترض أن يفرض خيار x-udisks-auth تدفق تفويض إداري عبر PolicyKit.
السلوك المتوقع:
mount request
↓
attempt mount as caller
↓
permission/auth failure
↓
PolicyKit filesystem-fstab check
↓
admin approval
↓
mount as authorized privileged action
السلوك المعيب:
mount request with as-user influence
↓
computed identity affects execution
↓
mount succeeds too early
↓
PolicyKit auth path is not reached as expected
↓
privileged mount state is achieved
وهذا يجعل النموذج الأمني المحيط بـ x-udisks-auth غير موثوق في المسار المعيب.
النموذج المتوقع:
Unprivileged user
↓
D-Bus mount request
↓
PolicyKit / fstab authorization
↓
restricted mount behavior
النموذج المكسور:
Unprivileged user
↓
D-Bus mount request with as-user spoofing
↓
authorization logic mismatch
↓
root-context mount execution
تتسم الثغرة بخطورة خاصة لأن الخدمة المتأثرة تعمل بصلاحيات مرتفعة.
قد يسمح الاستغلال الناجح لمستخدم محلي غير ممتاز بتركيب نظام ملفات عبر udisks2 في مسار تنفيذ بسياق جذر دون طلب التفويض المتوقع.
اعتمادًا على نظام الملفات وعلمات التركيب، قد يشمل الأثر ما يلي:
هذه ثغرة محلية.
تشمل الشروط ذات الصلة ما يلي:
.
├── README.md
├── disk2root.sh ← main exploit (self-contained LPE)
└── poc/
├── setup_lpe_env.sh ← lab environment setup
├── f2_mount_as_user_bypass.sh
├── f2_check_nosuid.sh
├── f2_suid_test.sh
├── f2_final.sh
└── cleanup_lpe_env.sh
disk2root.shاستغلال مُسلَّح مكتمل الذات. يبني حمولته الخاصة SUID بصلاحيات جذر، وينشئ صورة قرص مُجهزة، ثم يركّبها عبر تجاوز polkit باستخدام as-user=root، ويمنحك قشرة جذر.
الخيار 1 — التشغيل بصلاحيات الجذر (يعمل في كل البيئات، بما في ذلك SSH):
./disk2root.sh
يقوم النص تلقائيًا بما يلي:
uid=0 mode=4755 عبر debugfsx-udisks-authsuFilesystem.Mount مع as-user=root (تجاوز polkit)لتحديد المستخدم الذي سيتم التصعيد منه:
./disk2root.sh testuser
إذا لم يتم تحديد مستخدم، يختار النص أول مستخدم عادي على النظام أو ينشئ مستخدمًا مؤقتًا.
الخيار 2 — التشغيل كمستخدم غير ممتاز (سطح مكتب / جلسة نشطة):
./disk2root.sh
على الأنظمة ذات جلسة polkit نشطة (تسجيل دخول سطح المكتب، GNOME/KDE)، يكون النص مكتمل الذات بالكامل — ينشئ جهاز loop خاصًا به عبر udisksctl أو D-Bus LoopSetup، ويقوم بالتركيب عبر as-user=root، ويصعّد الصلاحيات دون أي إعداد مسبق.
الخيار 3 — التشغيل كمستخدم غير ممتاز (SSH، بعد الإعداد):
إذا كانت البيئة مُجهزة مسبقًا (على سبيل المثال، بتشغيل poc/setup_lpe_env.sh بصلاحيات الجذر، أو بتشغيل سابق لـ ./disk2root.sh بصلاحيات الجذر)، يمكن لأي مستخدم غير ممتاز إعادة الاستغلال:
./disk2root.sh
يكتشف النص تلقائيًا إدخالات fstab المعيبة ويستخدمها.
./disk2root.sh --cleanup
يزيل جميع الآثار: إدخال fstab، جهاز loop، نقطة التركيب، المستخدم المؤقت.
عند تشغيله كمستخدم غير ممتاز، يجرب النص عدة مسارات بالترتيب:
[A] Self-contained
build payload → create ext4 image → debugfs inject SUID binary
→ loop-setup (python3 GIO / udisksctl) → mount as-user=root
✓ works on desktop sessions
[B] Fstab fallback
scan /etc/fstab for x-udisks-auth / user / users entries
→ mount as-user=root → find SUID binary on mounted fs
✓ works on SSH when environment is prepared
╔═════════════════════════════════════════════════════╗
║ CVE-2026-7867 — disk2root ║
║ udisks2 as-user polkit bypass → LPE root shell ║
╚═════════════════════════════════════════════════════════╝
[*] uid=1002 (testuser) — exploiting...
fstab: /dev/loop5 → /mnt/disk2root (x-udisks-auth)
mounted: /mnt/disk2root
nosuid: not set
suid: pwn (4755 root:root)
╔═════════════════════════════════════════════════════╗
║ dropping into root shell — type 'exit' to return ║
╚═════════════════════════════════════════════════════════╝
[+] root shell — uid=0 euid=0
root@target:/tmp#
poc/)نصوص تحقق فردية استُخدمت أثناء البحث. هذه هي اللبنات الأساسية التي قادت إلى disk2root.sh.
1. Run poc/setup_lpe_env.sh as root
2. su - testuser
3. Run poc/f2_mount_as_user_bypass.sh
4. Run poc/f2_final.sh for full validation
5. Run poc/cleanup_lpe_env.sh as root
أو ببساطة استخدم disk2root.sh الذي يجمع كل ما سبق.
الأولية التي يثبتها هذا البحث هي:
as-user option spoofing inside privileged mount orchestration
الانتقال الحرج هو:
unprivileged D-Bus caller
↓
spoofed/computed mount identity
↓
authorization path confusion
↓
root-context mount execution
لهذا السبب تُصنَّف المشكلة كثغرة تصعيد صلاحيات محلية.
يُعتبر udisks2 عادةً خفي إدارة تخزين ممتازًا موثوقًا.
الثغرة في هذه الطبقة عالية التأثير لأنها تقع بين:
desktop/session users
D-Bus method calls
PolicyKit authorization
filesystem mount operations
root daemon privileges
يمكن أن يؤثر الخلل في معالجة الهوية هنا مباشرةً على حدود الصلاحيات المحلية.
يمكن للمدافعين مراقبة نشاط التركيب المشبوه في udisks2 الذي يتضمن as-user.
مصادر تتبع مفيدة:
udisksd logs
D-Bus method calls
PolicyKit logs
mount table changes
/proc/mounts
/etc/fstab
journalctl
أوامر مفيدة:
findmnt
mount
cat /proc/mounts
journalctl -u udisks2
journalctl | grep -i udisks
journalctl | grep -i polkit
أنماط مشبوهة:
non-root user triggering Filesystem.Mount
as-user=root usage
unexpected mount without PolicyKit prompt
mounts lacking nosuid/noexec/nodev
setuid execution from recently mounted filesystems
unexpected loop device mounts
udisks2طبّق الإصلاح المقدم من البائع بمجرد توفره.
الإصدار المخطط للإصلاح:
udisks 2.11.2
راجع الإدخالات التي تستخدم:
x-udisks-auth
user
users
راجع بشكل خاص أنظمة الملفات التي يمكن أن تحتوي على محتوى قابل للتنفيذ أو setuid.
بما أنها ثغرة محلية، فإن تقليل الوصول المحلي غير الموثوق يقلل من التعرض للخطر.
راقب عمليات التركيب غير المتوقعة عبر:
udisksd
خاصةً عند حدوثها بواسطة مستخدمين غير جذر.
حيثما أمكن، استخدم:
nosuid
noexec
nodev
قد تقلل هذه العلمات من الأثر بعد التركيب.
راجع قواعد PolicyKit المتعلقة بإجراءات تركيب udisks.
تأكد من أن المستخدمين غير الممتازين لا يمكنهم تفعيل مسارات التركيب الحساسة دون تفويض صريح.
يجب أن يضمن الإصلاح المتين ما يلي:
as-user المحسوب محل هوية المتصل لأغراض التفويضmount_other_user دائمًا فحوصات PolicyKit المناسبةx-udisks-auth المصادقة بشكل متسقبعد رفع الحظر، يمكن تحويل هذا المستودع إلى مستودع بحثي عام يتضمن:
docs/
├── technical-analysis.md
├── root-cause.md
├── lab-setup.md
├── exploit-flow.md
├── detection.md
└── mitigation.md
إضافات عامة موصى بها:
هذا المستودع مخصص لأغراض البحث الأمني المصرح به والتنسيق مع البائع والتحقق الدفاعي فقط.
نصوص PoC مخصصة لبيئات الاختبار المعزولة.
لا تشغّل هذه النصوص على أنظمة لا تملكها أو ليس لديك إذن صريح لاختبارها.
المؤلفون غير مسؤولين عن إساءة استخدام هذا البحث.
CVE-2026-7867
udisks2 Local Privilege Escalation Research
| الحقل | القيمة |
|---|
| CVE | CVE-2026-7867 |
| المنتج | udisks2 |
| المكوّن | Filesystem.Mount |
| نوع الهجوم | تصعيد صلاحيات محلي |
| الأولية | انتحال as-user |
| حدود الأمان | هوية متصل D-Bus → تنفيذ تركيب ممتاز |
| طبقة التفويض | تفويض تركيب PolicyKit / fstab |
| البائع | Red Hat / upstream الخاص بـ udisks |
| الحالة | تصحيح قيد الإعداد / إفصاح منسّق |
| الإصدار المخطط للإصلاح | udisks 2.11.2 |
| الشرط | مطلوب |
|---|
| وصول مستخدم محلي | نعم |
إصدار udisks2 معيب | نعم |
توفر وظيفة as-user | نعم |
| هدف تركيب مناسب مُدار عبر fstab | نعم |
| مسار تفويض معيب | نعم |
| وصول عن بُعد | لا |
| الأداة | الغرض | مطلوب |
|---|
busctl | استدعاء تركيب عبر D-Bus | نعم |
gcc | ترجمة حمولة SUID | نعم (يرجع إلى نسخة bash) |
mke2fs | إنشاء صورة ext4 | نعم (الوضع المكتمل ذاتيًا) |
debugfs | حقن الملف الثنائي مع uid=0 | نعم (الوضع المكتمل ذاتيًا) |
python3-gi | إعداد LoopSetup عبر D-Bus مع تمرير واصف الملف | اختياري (وضع سطح المكتب) |
udisksctl | إعداد جهاز loop | اختياري (وضع سطح المكتب) |
| النص | الغرض |
|---|
setup_lpe_env.sh | تحضير البيئة المختبرية (جهاز loop، fstab، مستخدم اختبار) |
f2_mount_as_user_bypass.sh | التحقق من تجاوز Filesystem.Mount باستخدام as-user=root |
f2_check_nosuid.sh | التحقق من علمات nosuid/noexec/nodev على التركيب المُتجاوز |
f2_suid_test.sh | اختبار تنفيذ الملف الثنائي SUID على نظام الملفات المُركَّب |
f2_final.sh | PoC شامل: الإعداد ← التجاوز ← التحقق من euid=0 |
cleanup_lpe_env.sh | استعادة بيئة الاختبار |
| التاريخ | الحدث |
|---|
2026-04-21 | تم إرسال التقرير إلى فريق أمن المنتجات في Red Hat |
2026-04-21 | أكدت Red Hat استلام التقرير |
2026-04-28 | أكد البائع وجود المنطق المعيب |
2026-04-28 | طلب البائع نصوص PoC |
2026-04-30 | طلب البائع تخصيص CVE |
2026-04-30 | تم إرسال نصوص PoC إلى البائع |
2026-05-03 | تمت مشاركة التصحيح الأولي من البائع |
2026-05-05 | تمت مشاركة التصحيح المحدث من البائع |
2026-05-05 | تم حجز CVE-2026-7867 |
2026-05-05 | تم وضع علامة «محلولة» على التذكرة |
2026-05-07 | أشار البائع إلى أن الإصلاح مخطط له في udisks 2.11.2 |
| الباحث | GitHub | الدور |
|---|---|---|
| Azizcan Daştan | azqzazq1 | الاكتشاف، التحليل، تطوير PoC، التنسيق مع البائع |
| Özlem Ozan | oz7oz7 | التعاون البحثي وائتمان الإفصاح |