
pfSense CE 2.9.0-DEVELOPMENT - عالي - عن بُعد - RCE - بقايا CARP VHID
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · pfsense-carp-vhid
الفئة: RCE الوصول: عن بُعد
pfSense CE 2.9.0-DEVELOPMENT (9363ac5) - pfsense.org
تخزين تعديل Virtual IP لـ CARP VHID من POST دون التحقق من النطاق 1-255. خيارات Form_Select هي HTML فقط. تطبيق CARP يمرر VHID عبر escapeshellarg. تطبيق IP Alias المكدّس يُدرج vhid {$carpvip['vhid']} خارج escapeshellarg. حالة CARP تُدرج نفس VHID المخزّن في خط أنابيب grep بعلامات اقتباس مزدوجة؛ تبقى الفاصلة المنقوطة داخل علامات الاقتباس، لكن استبدال الأوامر لا يزال يعمل تحت /bin/sh -c. الصلاحية المطلوبة هي تعديل VIP + التطبيق، وليس Diagnostics: Command.
| المعرّف | لا يوجد CVE بعد |
| الفئة | RCE |
| الوصول | عن بُعد (WebGUI موثّق) |
| CWE | CWE-78 |
| CVSS | مرتفع: 8.8 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| المنتج | pfSense CE |
| المتأثر | 2.9.0-DEVELOPMENT (9363ac5b8651a1c7a333180425ce7719070f95f9) CARP VHID |
| المصادقة | جلسة WebGUI مع صلاحية تعديل VIP + التطبيق (الحالة/الودجت مُشغّل لاحق) |
| الترخيص | GNU Affero GPL v3.0 |
| المختبر | 127.0.0.1 فقط |
ثبّتُ الفرع العام master عند 9363ac5. المختبر عبارة عن gadget بلغة PHP من interface_carp_configure المثبّت، وmwexec الخاص بـ ipalias المكدّس، وexec الخاص بالحالة. Loopback 127.0.0.1:18830.
| الطريقة | نقطة الوصول | الصلاحية |
|---|---|---|
POST لـ carp VIP مع VHID غير صحيح، ثم تطبيق IP Alias مكدّس على الأصل _vip{uniqid} | mwexec ifconfig ... alias {$gateway} {$vhid} (interfaces.inc:3238) | السلامة (مُثبت مختبرياً): root shell. المختبر: ipalias-unescaped كتب الشاهد. تطبيق CARP لنفس VHID لم يكتب شيئاً (carp-escaped=yes). |
نفس VHID المخزّن، ثم GET لـ status_carp.php أو عرض carp_status.widget.php | خط أنابيب grep عبر exec (pfsense-utils.inc:794) | السلامة (مُثبت مختبرياً): استبدال الأوامر داخل علامات الاقتباس المزدوجة عمل وكتب الشاهد (status-sink=yes, status-subst=yes). الفاصلة المنقوطة بقيت داخل علامات الاقتباس. مُشغّل الودجت يمكن أن يكون جلسة GUI أخرى. |
| نفس root shell | نظام ملفات المضيف | الاستطلاع (مُستنتج): config.xml، المفاتيح. |
root shell أو ifconfig معطّل | أجهزة CARP / alias | التوافر (مُستنتج): تعطيل الواجهة / CARP / الفلتر. |
مُثبت مختبرياً مقابل مُستنتج: carp-escaped، وشاهد ipalias-unescaped، وشاهد استبدال أوامر الحالة كلها مُثبتة مختبرياً. استطلاع نظام الملفات وتعطيل الفلتر مُستنتجان من root PHP-FPM.
يتطلب: page-firewall-virtualipaddress-edit (حفظ) وpage-firewall-virtualipaddresses (تطبيق). نقطة وصول الحالة: page-status-carp أو أي لوحة تحكم تحتوي على ودجت CARP. CSRF على POST.
| السطح | المختبر |
|---|---|
| تطبيق CARP نفسه | escapeshellarg على VHID، carp-escaped=yes |
| كلمة مرور CARP / advbase / advskew / subnet | is_ipaddr / مُمرّر عبر escapeshellarg |
| بدون مصادقة | مغلق |
| تطبيق xmlrpc لنفس الكائنات دون بيانات اعتماد HA | قائمة تخطي SA-26_22 |
| Diagnostics: Command | يبقى مغلقاً ما لم يُمنح أيضاً |
cd lab
./run.sh
Loopback 127.0.0.1:18830. مشروع Compose pfsense-carp-vhid. وسم الصورة pfsense-carp-vhid:2.9.0-dev. الشاهد PFSENSE-CARP-VHID-WITNESS. السطر الأخير:
SUCCESS PFSENSE-CARP-VHID carp-escaped=yes ipalias-unescaped=yes status-sink=yes PFSENSE-CARP-VHID-WITNESS
اجعل VHID عدداً صحيحاً في النطاق 1-255 عند الحفظ. مرّر VHID عبر escapeshellarg عند تطبيق IP Alias المكدّس وعند grep الحالة، بنفس الطريقة التي يفعلها تطبيق CARP بالفعل.
9363ac5b8651a1c7a333180425ce7719070f95f9firewall_virtual_ip.inc saveVIPinterfaces.inc stacked ipalias mwexecpfsense-utils.inc CARP status grep