
أداة تدقيق للقراءة فقط لثغرة CVE-2026-0300 (تعرض بوابة مصادقة User-ID في PAN-OS)
أدوات تدقيق للقراءة فقط لـ CVE-2026-0300 — تجاوز سعة المخزن المؤقت غير المُصادق عليه في بوابة مصادقة المستخدمين PAN-OS User-ID (المعروفة سابقًا باسم "Captive Portal") على جدران الحماية من سلسلة PA وسلسلة VM.
يرافق هذا المستودع النشرة الأمنية لمجموعة Tailwind Resource Group TRG-SA-2026-003 ويوفر:
audit_portal.py — المستوى 1: تدقيق جدار حماية واحدaudit_fleet.py — المستوى 2: مسح شامل للأسطول عبر Panorama (بالتوازي)panos_audit.py — مكتبة مشتركة يستخدمها كلا الأمرينالبرامج النصية للقراءة فقط. تصدر استعلامات من نوع show ضد واجهة برمجة تطبيقات PAN-OS XML ولا تعدّل أي إعدادات أبدًا. يتم إرسال مفتاح API عبر رأس HTTP X-PAN-KEY بدلاً من معامل استعلام في عنوان URL، لذلك لا يظهر في سجلات الوصول لطائرة إدارة PAN، أو سجلات الوكلاء الذين يفحصون TLS، أو وسائط عملية المدقق.
يستخدم سجل CVE اسم الميزة الحديث "بوابة مصادقة المستخدمين User-ID Authentication Portal". لا يزال مخطط XML الخاص بـ PAN-OS، ومقابض سطر الأوامر، ومسارات عناوين URL للتوثيق تستخدم المصطلحات القديمة captive-portal. المشغّلون الذين يدققون الأسطول باستخدام show config running | match authentication-portal سيفوتون بصمت كل إعداد لأن هذه السلسلة لا تظهر أبدًا كعنصر إعداد. تبحث هذه الأدوات عن اسم العنصر الصحيح وفقًا للمخطط بغض النظر عن وقت إنشاء الإعداد.
التحليل الكامل من Tailwind حول هذه المشكلة في التسمية موجود في TRG-SA-2026-003، "البصمة القديمة لـ Captive Portal."
pip install--insecure لعمليات التدقيق الأولية لمرة واحدة فقطexport PAN_API_KEY="<key>"
./audit_portal.py --hostname fw1.example.com
مثال على إخراج الجدول:
vsys: vsys1
configured: True
enabled: True
redirect_host: auth-portal.internal.example.com
mode: redirect
bound: ethernet1/3(internal-trust), ethernet1/4(guest)
tls_verified: True
risk: EXPOSED_LIKELY
صيغ إخراج أخرى: --output json أو --output csv.
علامات أخرى: --vsys <name> لتدقيق vsys واحد، --timeout/--retries للشبكات البطيئة، --debug لتفاصيل الأخطاء المفصلة على stderr.
export PAN_API_KEY="<panorama-key>"
./audit_fleet.py --hostname panorama.example.com --workers 16 --output csv > fleet-audit.csv
كل صف في ملف CSV هو جهاز-vsys واحد مع حالة البوابة، ومضيف إعادة التوجيه، والوضع، وربط الواجهات، وتصنيف المخاطر. يستخدم البرنامج النصي معامل API target=<serial> الخاص بـ Panorama بحيث لا يتصل أبدًا بجدران الحماية المُدارة مباشرة — اتصال واحد بـ Panorama يمسح الأسطول بأكمله.
علامات بارزة:
--workers N — خيوط تدقيق متزامنة (الافتراضي 8، الحد الأقصى 32). يكتمل أسطول من 1000 جهاز في دقائق بدلاً من أكثر من ساعة التي قد يستغرقها المسح التسلسلي.--timeout, --retries — إعدادات لكل استدعاء API. يتم إعادة محاولة أخطاء URLError العابرة وأخطاء HTTP 5xx مع تراجع محدود.--exclude-disconnected — افتراضيًا، يتم تضمين الأجهزة غير المتصلة مع risk=DISCONNECTED بحيث تظل مرئية خلال نافذة التصحيح. استخدم هذه العلامة لإسقاطها.--min-expected-devices N — تحذير (على stderr) إذا أعاد Panorama عددًا أقل من الأجهزة من N. مفيد لاكتشاف اقتطاع الاستجابة مقابل حجم أسطول معروف.--serial-filter '0007*' — تصفية بالرقم التسلسلي باستخدام أنماط glob لتدقيق مجموعة فرعية.--debug — طباعة تفاصيل الأخطاء المفصلة لكل جهاز على stderr (تتضمن سلاسل reason من المصدر؛ معطلة افتراضيًا لتجنب تسريب أسماء المضيفين في ملفات CSV الموجهة للعملاء).عمود risk في الإخراج هو أحد القيم التالية:
| التسمية | المعنى |
|---|---|
INFO_NOT_CONFIGURED | لا توجد كتلة <captive-portal> على الجهاز. خارج نطاق CVE-2026-0300. |
INFO_DISABLED | البوابة مُعدّة ولكن enabled=no. مسار الكود القابل للاستغلال غير نشط. |
REVIEW_POLICY_NO_BINDINGS | البوابة مفعّلة، ولكن لا توجد روابط واجهات في الإعداد. تحقق عبر WebUI. |
EXPOSED_LIKELY | البوابة مفعّلة ومرتبطة بمنطقة يشير اسمها إلى تعرض غير موثوق (untrust, dmz, guest, external, internet, wan, public). تحقق أولاً. |
REVIEW_POLICY | البوابة مفعّلة ومرتبطة بمناطق ذات أسماء داخلية. راجع سياسة الأمان لتأكيد قابلية الوصول. |
EXPOSED_LIKELY هي تلميح، وليست حكمًا — أسماء المناطق هي اصطلاحات المشغّل، وليست إنفاذًا. لا يمكن للبرنامج النصي أن يحل محل مراجعة سياسة الأمان؛ فهو يرتب إخراج الأسطول حيث يجب أن يتركز الاهتمام أولاً.
تفعل:
<captive-portal> لكل vsys (اسم عنصر المخطط دائمًا هو captive-portal، بغض النظر عن تسمية الواجهة أو إصدار PAN-OS).EXPOSED_LIKELY أولاً في إخراج الأسطول.X-PAN-KEY بحيث يبقى خارج سجلات وصول URL ووسائط العملية.لا تفعل:
يرث مفتاح API الخاص بـ PAN-OS الدور والصلاحيات الخاصة بالمستخدم الذي يولّده.
تحذير مهم: لا توجد صلاحية XML API للقراءة فقط في PAN-OS.
صلاحيات دور المسؤول على علامة تبويب XML API ثنائية (مفعّل/معطل) لكل فئة — Configuration، Operational Requests، Commit، Export، Import، Report، Log، User-ID Agent. تفعيل Configuration لـ XML API يسمح بكل من
showوإجراءاتset/edit/delete/move/rename/clone. تفعيل Operational Requests يسمح بعمليات<request>عشوائية بما في ذلك<request><restart>. تقدم علامتا تبويب Web UI وREST API خيار Read-Only؛ علامة تبويب XML API لا تقدمه."مستخدم تدقيق" تم إنشاؤه بتفعيل فئات XML API هذه يحمل صلاحية كتابة XML API كاملة على الجهاز. تعامل مع المفتاح الناتج كبيانات اعتماد مميزة: حدد عمره لنافذة التدقيق، وخزنه في مدير أسرار، وعطّل المستخدم عند اكتمال العمل.
مرجع PAN الرسمي: Get Your API Key (PAN-OS XML API).
على جدار الحماية (أو Panorama، إذا كنت تستخدم audit_fleet.py):
إنشاء دور المسؤول. انتقل إلى Device > Admin Roles (أو Panorama > Admin Roles). انقر Add.
audit-config-and-op.إنشاء مستخدم التدقيق. انتقل إلى Device > Administrators (أو Panorama > Administrators). انقر Add.
audit-cve-2026-0300.audit-config-and-op.توليد مفتاح API ببيانات اعتماد المستخدم الجديد. لا يعرض PAN-OS زر "توليد مفتاح API" في WebUI — نقطة نهاية keygen هي المسار المدعوم. استخدم جسم POST حتى لا تُسجل بيانات الاعتماد في سجلات وصول URL:
read -rs AUDIT_PW; echo
export PAN_API_KEY="$(curl -ksX POST "https://fw1.example.com/api/" \
--data-urlencode "type=keygen" \
--data-urlencode "user=audit-cve-2026-0300" \
--data-urlencode "password=$AUDIT_PW" \
| grep -oE '<key>[^<]+' | cut -c6-)"
unset AUDIT_PW