Skip to content
KitploitKITPLOIT
أدواتعمليات الاستغلالالمدونة
Log in
إرسال
أدواتعمليات الاستغلالالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

الخلاصاتاتصالالخصوصية© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
pfsense-api-snort-file-join — pfSense Plus MIM API toolkit b4acd7ca - عالي - عن بُعد - قراءة ملف - قواعد Snort {file} فك الترميز ثم الدمج | Kitploit
أدوات/GitHubGitHub/abraxas/pfsense-api-snort-file-join
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويبجمع المعلوماتأمن الويباختبار الاختراقأمن واجهات برمجة التطبيقاتمختبرات وتدريب عملي
GitHub
abraxas/pfsense-api-snort-file-join

pfsense-api-snort-file-join

pfSense Plus MIM API toolkit b4acd7ca - عالي - عن بُعد - قراءة ملف - قواعد Snort {file} فك الترميز ثم الدمج

عرض المستودع
1منذ يوم واحدلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

Abraxas Labs - pfsense-api-snort-file-join

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  pfsense-api-snort-file-join

pfsense-api-snort-file-join

الفئة: قراءة ملف الوصول: عن بُعد

pfSense Plus MIM API (Netgate/pfsense-api b4acd7ca) - Netgate

GET /services/snort/rules/{name}/{file} يأخذ معاملَي مسار، كلاهما type: string، بدون pattern. الوصف: فحص ملف في مجموعة القواعد. SnortRuleFileContents.filename هو "مسار الملف". الدالة المولَّدة get_snort_ruleset_file._get_kwargs تنفّذ quote(str(...), safe="")، لذا يصبح ../ هو ..%2F على الشبكة. الخادم الذي يفك ترميز URL ثم يدمج في دليل مجموعة القواعد لا يزال يخرج خارجها.

المتصل الذي يستطيع GET ذلك المسار، مع JWT للأسطول، يقرأ ملفات خارج مجموعة القواعد المسمّاة بصفته وكيل MIM على كل جهاز مُسجَّل. كما أن الدمج لم يُنفَّذ. المختبر هو أداة فك-ترميز-ثم-دمج للمسار العام.

هذا هو المتبقي 8 من 9. الخريطة: pfsense-api-nexus-mim. نفس المتبقي المثبَّت: fleet JWT. هذا ليس jaredhendrickson/pfsense-api.

IDلا يوجد CVE بعد
الفئةقراءة ملف (Snort {file} فك-ترميز-ثم-دمج)
الوصولعن بُعد (GET مُصادَق عليه؛ JWT الأسطول يعيد استخدام نفس المسار على كل device_id)
CWECWE-22
CVSSمرتفع: 6.5 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N لـ JWT قد يستطيع GET ملف مجموعة قواعد Snort
المنتجNetgate/pfsense-api (pfSense Plus Nexus MIM controller OpenAPI + العميل المولَّد)
المتأثرmain b4acd7ca21dbca739a530403a1f62a7440f7726f (2026-05-25، Add Snort-3 API definitions)
المصادقةالأمثلة ترسل JWT الخاص بالـ controller بعد POST /login. OpenAPI لا يحتوي على securitySchemes. عدم المصادقة غير مُثبَت.
الترخيصGNU Affero GPL v3.0
المختبر127.0.0.1:19181 فقط. أداة فك-ترميز-ثم-دمج. الدمج الإضافي لم يُنفَّذ.

ما يمكن للمهاجم فعله

يحتاج إلى متصل يستطيع GET /services/snort/rules/{name}/{file}. الأمثلة الرسمية تستخدم Authorization: Bearer بعد POST /login، ثم تعيد استخدام ذلك الرمز كـ base_url=.../api/device/pfsense/{device_id}/api لكل معرّف من GET /mim/devices. العمليات المولَّدة لا تزال تكتب AuthenticatedClient | Client. CSRF ليس في اللعبة على هذا GET.

الطريقةالحوضالصلاحيةالمختبر مقابل المستنتج
GET من العميل المُولَّد مع {file}=../../oracle/WITNESS (على السلك ..%2F..%2Foracle%2FWITNESS)فك ترميز unquote(file) ثم ضمّه إلى دليل مجموعة القواعد المُسمّاة والقراءةاستطلاع: HTTP 200، filename هو /oracle/WITNESS، والجسم PFSENSE-API-SNORT-FILE-JOIN-WITNESS. المقصود هو ملف .rules داخل مجموعة القواعد تلك.مُثبت مختبرياً (gadget). كما أن الضم لم يُنفَّذ.
نفس GET مع {file}=../../../etc/passwdنفس الضم إذا ما قام المتحكم بإسناده إلى نظام ملفات الجهازاستطلاع: قراءة ملفات المضيف بصلاحية وكيل MIM (عادةً ما يكون Plus WebGUI/PHP بصلاحية root). استخدم المختبر /oracle/WITNESS، وليس /etc/passwd حياً.مستنتج (نفس الضم، مسار المضيف).
نفس GET بعد fleet JWT (POST /login مرة واحدة، وإعادة التشغيل على /api/device/pfsense/{id}/api)وكيل الجهاز لنفس {file} غير المقيّداستطلاع: رمز متحكم واحد على شكل مكتب مساعدة يقرأ الملفات على كل صندوق مُسجَّل، وليس فقط الصندوق الذي كان تسجيل الدخول موجهاً إليه.مستنتج (عقد G6 + هذا المسار). كما أن RBAC لم يُنفَّذ.
نفس البقايا على {name}GET|DELETE /services/snort/rules/{name} وكذلك {name} الشقيق للعنوان/الكبت هي أيضاً سلاسل غير مقيّدةاستطلاع / سلامة: إعادة تسمية أو حذف مجموعة قواعد يكون اسمها مساراً.مستنتج من المواصفة. المختبر شغّل {file} فقط.
تحكم مقيّد بنفس مسار السلكrelative_to(ruleset_dir.resolve()) بعد فك الترميزمغلق. HTTP 400، لا شاهد.مُثبت مختبرياً
{file}=local.rules الحميدقراءة مجموعة القواعد المقصودةمغلق. 200، sid:1، لا شاهد، سواء الساذج أو المتحكم.مُثبت مختبرياً

المغلق المجاور: ترميز النسبة المئوية من العميل لـ ../ (encoding=%2F). ضم التحكم بعد فك الترميز (control-confined=yes). ضم المتحكم الإضافي (plus-join-not-executed). القراءة المقصودة لـ local.rules داخل مجموعة القواعد foo. GET غير المُصادَق (غير مُثبت؛ الأمثلة ترسل Bearer). POST /services/snort/rules أرشيف / .so مزروع (مقصود لمسؤول IDS، وليس هذه البقايا). تشخيصات PHP/shell. كتابة ملف. shell المضيف. هذه البقايا ليست RCE.

كيف وجدتها

ثبّتت Netgate/pfsense-api عند b4acd7ca21dbca739a530403a1f62a7440f7726f لأن HEAD في 2026-10-14 لم يكن له وسوم وآخر commit هو "Add Snort-3 API definitions". هكذا يوجد هذا المسار. لا يحتوي YAML على أي مفاتيح pattern: في أي مكان. {name} و {file} سلاسل غير مقيّدة. quote(..., safe="") هو مُرمِّز من جهة العميل، وليس فحص basedir من جهة الخادم.

  /services/snort/rules/{name}/{file}:
    parameters:
      - in: path
        name: name
        required: true
        schema:
          type: string
      - in: path
        name: file
        required: true
        schema:
          type: string
    get:
      description: Obtain the contents of the specified file in the ruleset. This is intended for inspecting scripts provided by it.
      operationId: GetSnortRulesetFile
"url": "/services/snort/rules/{name}/{file}".format(
    name=quote(str(name), safe=""),
    file=quote(str(file), safe=""),
),

المسارات الخاطئة المسجلة بالفعل: التعامل مع ترميز العميل كإغلاق للاجتياز؛ تركيب pfSense Plus؛ تصنيف أرشيف Snort .so كبقايا هذه؛ الادعاء بـ GET غير المصادق. المسرح: صدفة عكسية. الأوراكل هو gadget 200 من /oracle/WITNESS بالإضافة إلى control 400.

المختبر

python3 pfsense-api-snort-file-join-Abraxas-Labs.py

أو

cd lab
./run.sh

استهدف فقط http://127.0.0.1:19181. مشروع Compose pfsense-api-snort-file-join. أداة فك الترميز ثم الدمج للمسار العام. كما أن الدمج لا يُنفَّذ. يتم تفكيك Stack بعد التشغيل.

SUCCESS PFSENSE-API-SNORT-FILE-JOIN encoding=%2F decode-then-join=yes control-confined=yes plus-join-not-executed PFSENSE-API-SNORT-FILE-JOIN-WITNESS

ترميز العميل لـ ../../../etc/passwd هو ..%2F..%2F..%2Fetc%2Fpasswd. طلب GET ساذج لـ /services/snort/rules/foo/..%2F..%2Foracle%2FWITNESS أعاد 200، اسم الملف /oracle/WITNESS، والمحتوى PFSENSE-API-SNORT-FILE-JOIN-WITNESS. الطلب نفسه تحت تحكم مقيّد يُحلّ ضمن جذر مجموعة القواعد أعاد 400 وبدون شاهد. بقي local.rules الحميد داخل foo.

الإصلاح

حلّل ضمن جذر مجموعة قواعد بعد فك الترميز. ارفض .. والمسارات المطلقة. Path.resolve() ثم relative_to(ruleset_dir.resolve())، أو ما يعادله، قبل القراءة. قيّد {file} (و {name}) بنمط آمن لمجموعة القواعد في OpenAPI حتى تتوقف المولّدات عن إرسال سلاسل بشكل مسار.

المراجع

تنزيل الأداة