pfSense Plus MIM API toolkit b4acd7ca - عالي - عن بُعد - IDOR - ACB userkey capability URL
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · pfsense-api-acb-userkey
الفئة: IDOR الوصول: عن بُعد
pfSense Plus MIM API (Netgate/pfsense-api b4acd7ca) - Netgate
GET /services/acb وGET /services/acb/bkp يأخذان userkey كمعامل استعلام غير مقيّد. عميل Python المولَّد يضع هذا المفتاح في سلسلة الاستعلام. ملف YAML لا يحتوي على securitySchemes. امتلاك مفتاح جهاز Auto Config Backup هو الفحص. هذا عنوان URL للقدرات (capability URL).
مفتاح ACB userkey المسروق أو المُسرَّب يسرد النسخ الاحتياطية المستضافة لذلك الجهاز ويجلب نص مراجعة. الإعداد الكامل موجود في تلك الكتل. نفس فئة مفتاح CE ACB CVE-2024-57273 / SA-25_03 إذا تسرّب المفتاح. كان ذلك CVE اشتقاق SSH-banner. هذا المتبقي هو الشقيق في معامل استعلام Plus MIM API. أنا لا أعيد تقديم اشتقاق الـ banner.
هذا هو OpenAPI العام + العميل المولَّد لـ pfSense Plus Nexus Multi-instance Management (وحدة التحكم على :8443). إنه ليس حزمة CE REST (jaredhendrickson/pfsense-api / pfrest.org). الخادم خاص بـ Plus فقط (مدفوع). لم أنفّذ pfSense Plus.
| المعرّف | لا يوجد CVE بعد |
| الفئة | IDOR (عنوان URL للقدرات) |
| الوصول | عن بُعد |
| CWE | CWE-639 |
| CVSS | مرتفع: 7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N إذا كانت طلبات GET تلك تحترم userkey دون ربط JWT بالجهاز |
| المنتج | Netgate/pfsense-api (pfSense Plus MIM OpenAPI + العميل المولَّد) |
| المتأثر | تثبيت b4acd7ca21dbca739a530403a1f62a7440f7726f (2026-05-25). لا توجد وسوم. |
| المصادقة | المواصفة: لا شيء (securitySchemes غائب). userkey هو سرّ الاستعلام. لم يتم تنفيذ Plus JWT/RBAC. |
| الترخيص | GNU Affero GPL v3.0 |
| المختبر | 127.0.0.1:19171 فقط. لا توجد صورة Plus. |
مركز السلسلة: pfsense-api-nexus-mim (هذا هو الجزء 7).
يتطلب مفتاح ACB userkey مسروقًا أو مُسرَّبًا (المواصفة: "بايتات عشوائية بترميز سداسي عشري بحجم 32 بايت"، 64 حرفًا سداسيًا). المواصفة لا تربط ذلك المفتاح بـ JWT أو بجهاز المستدعي. GET /services/acb/config من فئة G11 يعيد userkey الحيّ. عينات G9 تضبط verify_ssl=False، لذا يمكن لـ MITM على :8443 رؤية المفتاح على السلك. تلك مسارات تسريب. هذا المتبقي هو ما يشتريه المفتاح بمجرد خروجه.
| الطريقة | نقطة الوصول | الصلاحية |
|---|---|---|
GET /services/acb?userkey=<stolen> | GetACBList (pfapi_openapi.yml). المولَّد get_acb_list.py params["userkey"]. | مُثبَت مختبريًا (محاكاة): سرد النسخ الاحتياطية المستضافة لذلك الجهاز. الشاهد في backups[].reason. |
GET /services/acb/bkp?userkey=<stolen>&revision= | GetACB -> RetrievedBackup.backup. المولَّد get_acb.py params["userkey"] + params["revision"]. | مُثبَت مختبريًا (محاكاة): جلب جسم المراجعة. الشاهد في backup. |
| نفس سلسلة النسخة الاحتياطية على وحدة تحكم حيّة | كتلة ACB المستضافة | مُستنتَج: config.xml كامل (المستخدمون، المفاتيح، الحزم) بمجرد أن يصبح قابلًا للقراءة. أعادت المحاكاة شاهد XML نصي صريح. لم أتحدث إلى acb.netgate.com ولم أفك تشفير كتلة حيّة. |
GET /services/acb/config | ACBConfigInfo.userkey، ACBConfig.encryption_password | مواصفة، وليست هذا المختبر: سر القدرة الحيّ وكلمة مرور فك التشفير. فئة G11 أسرار-عند-GET. لم تُجرَّب. |
| الطريقة | نقطة الوصول | الصلاحية |
|---|---|---|
POST /services/acb/restore | جسم RestoreACB { timestamp } | مغلق مجاور: لا تزال العينات ترسل JWT. ليس هذا المتبقي. لم يُنفَّذ. |
POST /services/acb/config استبدال userkey | SaveACBConfig | مغلق مجاور: ليس رابط قدرة GET. لم يُنفَّذ. |
GET list / GET bkp لا يحذفان. DELETE /services/acb/bkp/{timestamp} عملية مختلفة. لم تُجرَّب.
userkey خاطئ وuserkey مفقود لم يُعيدا شاهدًا (مُثبَت مختبريًا).
مُثبَت مختبريًا مقابل مُستنتَج: سرد المفتاح المسروق وbkp أعادا الشاهد. المفتاح الخاطئ والمفتاح المفقود لم يفعلا. Plus لم يُنفَّذ. محتويات config.xml الحيّة وفك التشفير مُستنتَجان من المخطط العام (RetrievedBackup.backup سلسلة نصية؛ encryption_password يقع على ACBConfig).
يتطلب: مسار شبكي إلى طلبات GET الخاصة بـ ACB على وحدة تحكم MIM، بالإضافة إلى userkey مسروق/مُسرَّب. CVSS 7.5 إذا كانت طلبات GET تلك تحترم مفتاح الاستعلام دون ربط JWT بالجهاز. بصراحة: تُثبت هذه الحزمة أن المواصفة العامة تُنمذج ذلك العقد، على loopback.
| السطح | السبب |
|---|---|
| وحدة تحكم pfSense Plus | لم تُنفَّذ. لا توجد صورة Plus في هذه الحزمة. |
| حزمة CE REST | خادم مختلف (jaredhendrickson/pfsense-api / pfrest.org). |
| اشتقاق مفتاح ACB من SSH-banner | CVE-2024-57273 / SA-25_03. لا تُعِد التسجيل. |
POST /services/acb/restore كذا الاكتشاف | لا تزال العينات ترسل JWT. |
php/shell بدون مصادقة من security المحذوف في OAS | بقايا توثيق. المحاكاة ليست إثباتًا لخادم 200-بدون-JWT. |
userkey مفقود | المختبر 403، لا شاهد. |
userkey خاطئ | المختبر قائمة فارغة / bkp 403، لا شاهد. |
verify_ssl في المكتبة المولَّدة | الافتراضي True. G9 هو العينات التي تُعطّله، وليس الافتراضي في الحزمة. |
ثبّتُّ Netgate/pfsense-api main b4acd7ca (2026-05-25، "Add Snort-3 API definitions"). اثنتا عشرة عملية بحث عبر login/JWT، والتشخيصات، وتسجيل MIM، وTLS العميل، والمستخدمين/الشهادات، والحزم، وVPN/الجدار الناري، وأمان OpenAPI، وIDOR الجهاز، وgit/firmware/feeds، بالإضافة إلى محاكاة loopback لكل عملية مولَّدة.
قائمة التخطي أولًا: بقايا CE WebGUI التي أُرسلت بالفعل (QinQ parent if، معالج OpenVPN CRLF، CARP VHID، رقم limiter، لافتة تسجيل دخول IPsec). تشخيصات PHP/shell كصلاحية مسؤول مقصودة. حزمة CE REST من طرف ثالث. اشتقاق لافتة CVE-2024-57273.
قرأت GetACBList وGetACB. userkey هو معامل استعلام، وليس معرّف جهاز مرتبط. تنسخه Python المولّدة إلى سلسلة الاستعلام. لا يوجد securitySchemes في YAML. ACBConfigInfo.userkey هو "بايتات عشوائية بطول 32 بايت مشفرة بنظام سداسي عشري". يُرجع GET /services/acb/config هذا المفتاح. تعطّل عينات G9 التحقق من TLS، لذا يمكن لوسيط MITM تسريبه. G11 هو تفريغ GET. هذا المتبقي هو عنوان URL للقدرة الذي يغذيه هذا التفريغ.
منعطفات خاطئة: التعامل مع غياب أمان OAS على أنه php/shell غير مصادق؛ إعادة تقديم CVE-2024-57273؛ الادعاء بوجود تفريغ مباشر لـ Plus. مسرحية: وحدة تحكم Plus. المرجع هو المواصفة العامة بالإضافة إلى محاكاة loopback.
python3 pfsense-api-acb-userkey-Abraxas-Labs.py
أو
cd lab
./run.sh