
pfSense Plus MIM API toolkit b4acd7ca - عالي - عن بُعد - صلاحيات متبقية - GET export-key مفاتيح خاصة
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · pfsense-api-export-key-get
الفئة: صلاحية متبقية الوصول: عن بُعد
pfSense Plus MIM API (Netgate) عند الالتزام b4acd7ca - OpenAPI عام + عميل Python مُولَّد لوحدة تحكم Nexus Multi-instance Management.
GET /system/certauth/{refid}/export-key موثّق بأنه "Download the CA certificate signing key". GET /system/certificates/{refid}/export-key هو "Download the certificate's private key". GET /system/certificates/{refid}/export-p12 هو ملف PKCS12 موحّد بدون حماية بكلمة مرور. توثّق الوثائق GET تحت /system إلى mim_system_read / mim_read_system. mim_view موثّق بأنه لا يحتوي على معلومات سرية. لا يحتوي المواصفة على securitySchemes ولا أمان لكل عملية. _get_kwargs المُولَّد هو الطريقة بالإضافة إلى URL بين علامتي اقتباس. لا يُضاف التفويض هناك أبدًا.
هذا ليس php، وليس shell، وليس POST للبرنامج الثابت. يكفي JWT مسروق من عيّنة G9 لتخطي TLS أو رمز أسطول G6 لاستدعاء طلبات GET هذه. ما إذا كان JWT لـ MIM بشكل قراءة كافٍ على Plus هو الصلاحية المتبقية. لم أشغّل Plus. لم يُنفَّذ RBAC الخاص بـ Plus.
| المعرّف | لا يوجد CVE بعد |
| الفئة | صلاحية متبقية |
| الوصول | عن بُعد (HTTP موثّق إلى وحدة تحكم Nexus؛ المختبر هو عقد العميل العام) |
| CWE | CWE-200، CWE-862 |
| CVSS | مرتفع: 8.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N إذا كان JWT لـ MIM بشكل قراءة قادرًا على استدعاء طلبات GET هذه |
| المنتج | Netgate/pfsense-api (وحدة تحكم pfSense Plus Nexus MIM OpenAPI + العميل المُولَّد) |
| المتأثر | الالتزام b4acd7ca21dbca739a530403a1f62a7440f7726f (2026-05-25). OpenAPI 3.0.3 بعنوان pfSense API الإصدار 1.0. Plus 25.11+. ليس حزمة CE REST. |
| المصادقة | Nexus JWT موثّق (POST /login، Bearer). المختبر هو OpenAPI العام بالإضافة إلى عقد _get_kwargs المُولَّد. لم يُنفَّذ RBAC الخاص بـ Plus. |
| الترخيص | GNU Affero GPL v3.0 |
| المختبر | 127.0.0.1:19141 فقط. لا توجد صورة Plus. |
ثبّتُّ github.com/Netgate/pfsense-api عند b4acd7ca21dbca739a530403a1f62a7440f7726f. ليس master بعد ذلك اليوم. وليس حزمة CE من طرف ثالث jaredhendrickson/pfsense-api.
مركز السلسلة: pfsense-api-nexus-mim. هذه الحزمة هي الجزء 4.
توثّق الوثائق GET تحت /system إلى mim_system_read / mim_read_system. mim_view موثّق بأنه لا يحتوي على معلومات سرية. الصلاحية المتبقية هي تصدير المفتاح الخاص عبر GET، مع توثيق PKCS12 بأنه غير محمي، و_get_kwargs المُولَّد الذي لا يضيف التفويض أبدًا.
| الطريقة | المسار | الصلاحية |
|---|---|---|
GET DownloadCAKey | /system/certauth/{refid}/export-key | استطلاع (مُثبت مختبريًا على mock): جسم application/octet-stream يحتوي على شهادة PEM الشاهدة. مُستنتج على Plus: مفتاح توقيع شهادة CA إذا سمح RBAC بعملية GET. |
GET GetCertKey | /system/certificates/{refid}/export-key | استطلاع (مُثبت مختبريًا على mock): شهادة PEM الشاهدة. مُستنتج على Plus: المفتاح الخاص للورقة. |
GET GetCertP12 | /system/certificates/{refid}/export-p12 | استطلاع (مُثبت مختبريًا على mock): نفس جسم الشهادة الشاهدة. مُستنتج على Plus: الشهادة مع المفتاح بصيغة PKCS12 دون حماية بكلمة مرور (ملخص OpenAPI). |
_get_kwargs المُولَّد | العمليات الثلاث جميعها | استطلاع (مُثبت مختبريًا): الوسائط هي method بالإضافة إلى url المُقتبس فقط. لا headers، لا Authorization، لا Bearer. |
Client (بدون رمز) | العمليات الثلاث جميعها | استطلاع (مُثبت مختبريًا): ثلاث إصابات على mock مع has_authorization=false وجسم الشهادة الشاهدة (client-no-auth=yes، witness-body=yes). |
AuthenticatedClient | العمليات الثلاث جميعها | استطلاع (مُثبت مختبريًا): ثلاث إصابات على mock مع Authorization: Bearer mock-token (authed-bearer=3). Bearer خاصية غلاف، وليس _get_kwargs. |
| JWT مسروق من G9 MITM، أو رمز أسطول G6 | نفس عمليات GET الثلاث، بالإضافة إلى /api/device/pfsense/{device_id}/api إذا كان المتبقي من الأسطول يحمله | استطلاع (مُستنتج، متسلسل): اسحب مفاتيح CA / الورقة للمتحكم وكل نسخة مُسجَّلة يمكن للرمز تسميتها. |
| استخدام مفاتيح CA / الورقة المسروقة | شهادات TLS وVPN وIPsec وWebGUI | سلامة (مُستنتج، غير مُختبَر): أصدر شهادات منحدرة بصفتك CA؛ انتحل اسم Nexus TLS؛ فك تشفير الأنفاق التي تستخدم تلك الشهادات. ليس صلاحية root على Unix بحد ذاتها. |
| عمليات GET المرتبطة للقوائم/التفاصيل | /system/certauth?withprivkey=true، حقول الشهادة prv / private_key | استطلاع (مواصفة، ليس هذا المختبر): تفريغ جماعي لنفس الأسرار. لم يُختبر هنا. |
التوافر: لا شيء مطلوب.
مُثبت مختبريًا مقابل مُستنتج: مسارات GET الثلاثة في OpenAPI، عبارة PKCS12 "دون حماية بكلمة مرور"، _get_kwargs بدون Authorization، ثلاث إصابات Client بدون مصادقة مع شهادة PEM الشاهدة، ثلاث إصابات AuthenticatedClient مع Bearer، ونسخة pin من pfapi_openapi.yml كلها مُثبتة مختبريًا. أما استجابات 200 لـ mim_system_read / mim_view على Plus، وإصدار شهادات منحدرة، وسحب المفاتيح على مستوى الأسطول فهي مُستنتجة. كما أن RBAC على Plus لم يُنفَّذ.
المتطلبات (مُستنتجة، Plus لم يُنفَّذ): تسجيل دخول Nexus بالإضافة إلى مجموعة مسموح لها بعملية GET تحت /system/certauth و/system/certificates. ليس admins / mim_superuser إذا كان المتبقي حقيقيًا. ليس Diagnostics: Command. مسار شبكة إلى المتحكم :8443 (أو وكيل الجهاز) مع JWT.
| السطح | السبب |
|---|---|
| RBAC على Plus | لم يُنفَّذ. هذه الحزمة لا تدّعي استجابة 200 حية على Plus لـ mim_system_read أو mim_view. |
POST /diag/cmd/php، POST /diag/cmd/shell، GET/POST /diag/cmd/download /upload /diag/editfile | المقصود Diagnostics: Command. بشكل superuser. ليس هذا المتبقي. |
POST /system/firmware | المقصود تعديل النظام / superuser. |
GET .../export-ca وGET .../export-cert | شهادة PEM عامة. مقصود. |
POST .../export-key وPOST .../export-p12 مع كلمة مرور بصفتك superuser | الغلاف المقصود. واجهة system_certmanager.php تصدّر المفاتيح بهذه الطريقة بالفعل. |
| من الإنترنت غير المُصادَق إلى 8443 | تسجيل الدخول لا يزال يصدر JWT. غياب securitySchemes في OpenAPI هو خطأ في المُولِّد، وليس خادمًا غير مُصادَق مُثبتًا. |
| حزمة CE jaredhendrickson/pfsense-api / pfrest.org | منتج مختلف. |
القيمة الافتراضية verify_ssl في المكتبة المُولَّدة | True. الأمثلة الرسمية تضبطها على False. هذا G9، وليس عملية GET هذه. |
ثبّتُّ b4acd7ca21dbca739a530403a1f62a7440f7726f بعد موجة pfSense CE 2.9.0-DEVELOPMENT وقرأت مسارات مدير الشهادات في pfapi_openapi.yml. ثلاث عمليات GET تصدّر المفاتيح الخاصة. ملخص GetCertP12 يقول دون حماية بكلمة مرور. DownloadCAKey هي GET فقط بدون غلاف. الوحدات المُولَّدة تكتب client: AuthenticatedClient | Client و_get_kwargs لا تضبط Authorization أبدًا.