
CVE-2026-0300 (PAN-OS User-ID प्रमाणीकरण पोर्टल एक्सपोज़र) के लिए केवल-पठनीय ऑडिट टूलिंग
CVE-2026-0300 के लिए केवल-पठनीय ऑडिट टूलिंग — PA-Series और VM-Series फ़ायरवॉल पर PAN-OS User-ID Authentication Portal (पूर्व में "Captive Portal" के रूप में जाना जाता था) में अनप्रमाणित बफर ओवरफ़्लो।
यह रिपॉज़िटरी Tailwind Resource Group सुरक्षा सलाह TRG-SA-2026-003 के साथ आती है और निम्नलिखित प्रदान करती है:
audit_portal.py — टियर 1: एकल-फ़ायरवॉल ऑडिटaudit_fleet.py — टियर 2: Panorama-संचालित फ्लीट स्वीप (समवर्ती)panos_audit.py — दोनों CLIs द्वारा उपयोग की जाने वाली साझा लाइब्रेरीस्क्रिप्ट्स केवल-पठनीय हैं। वे PAN-OS XML API के विरुद्ध show-शैली क्वेरी जारी करती हैं और कभी भी कॉन्फ़िगरेशन को संशोधित नहीं करती हैं। API कुंजी URL क्वेरी पैरामीटर के बजाय X-PAN-KEY HTTP हेडर के माध्यम से भेजी जाती है, इसलिए यह PAN प्रबंधन-प्लेन एक्सेस लॉग, TLS-निरीक्षण प्रॉक्सी लॉग, या ऑडिटर के प्रोसेस तर्कों में दिखाई नहीं देती है।
CVE रिकॉर्ड आधुनिक फ़ीचर नाम "User-ID Authentication Portal" का उपयोग करता है। PAN-OS XML स्कीमा, CLI नॉब्स, और दस्तावेज़ीकरण URL पथ अभी भी विरासती शब्दावली का उपयोग करते हैं। के साथ फ्लीट का ऑडिट करने वाले ऑपरेटर चुपचाप हर कॉन्फ़िगरेशन को मिस कर देंगे क्योंकि वह स्ट्रिंग कभी भी कॉन्फ़िगरेशन तत्व के रूप में प्रकट नहीं होती है। यह टूलिंग स्कीमा-सही तत्व नाम खोजती है, भले ही कॉन्फ़िगरेशन कब लिखा गया हो।
captive-portalshow config running | match authentication-portalइस नामकरण गड़बड़ी पर पूर्ण Tailwind विश्लेषण TRG-SA-2026-003, "Captive Portal's legacy footprint" में है।
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 ऑडिट के लिए --vsys <name>, धीमे अपस्ट्रीम के लिए --timeout/--retries, stderr पर विस्तृत त्रुटि विवरण के लिए --debug।
export PAN_API_KEY="<panorama-key>"
./audit_fleet.py --hostname panorama.example.com --workers 16 --output csv > fleet-audit.csv
CSV में प्रत्येक पंक्ति एक डिवाइस-vsys है जिसमें पोर्टल स्थिति, रीडायरेक्ट होस्ट, मोड, इंटरफ़ेस बाइंडिंग, और जोखिम वर्गीकरण शामिल है। स्क्रिप्ट Panorama के target=<serial> API पैरामीटर का उपयोग करती है ताकि यह कभी भी प्रबंधित फ़ायरवॉल से सीधे कनेक्ट न हो — एक कनेक्शन से पूरे फ्लीट का स्वीप हो जाता है।
उल्लेखनीय फ़्लैग:
--workers N — समवर्ती ऑडिट थ्रेड (डिफ़ॉल्ट 8, अधिकतम 32)। 1000-डिवाइस फ्लीट मिनटों में पूरा हो जाता है, जबकि सीरियल स्वीप में एक घंटे से अधिक लग सकते हैं।--timeout, --retries — प्रति-API-कॉल सेटिंग्स। क्षणिक URLError और HTTP 5xx को सीमित बैकऑफ़ के साथ पुनः प्रयास किया जाता है।--exclude-disconnected — डिफ़ॉल्ट रूप से, डिस्कनेक्टेड डिवाइस risk=DISCONNECTED के साथ शामिल होते हैं ताकि वे पैच विंडो के दौरान दृश्यमान रहें। उन्हें हटाने के लिए इस फ़्लैग का उपयोग करें।--min-expected-devices N — यदि Panorama N से कम डिवाइस लौटाता है तो चेतावनी (stderr) दें। ज्ञात फ्लीट आकार के विरुद्ध प्रतिक्रिया ट्रंकेशन का पता लगाने के लिए उपयोगी।--serial-filter '0007*' — उपसमुच्चय का ऑडिट करने के लिए सीरियल द्वारा ग्लोब-फ़िल्टर।--debug — stderr पर प्रति-डिवाइस विस्तृत त्रुटि विवरण प्रिंट करें (अपस्ट्रीम reason स्ट्रिंग्स शामिल हैं; ग्राहक-सामना करने वाले CSVs में होस्टनाम लीक होने से बचने के लिए डिफ़ॉल्ट रूप से बंद)।आउटपुट में 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> ब्लॉक क्वेरी करें (स्कीमा तत्व नाम हमेशा captive-portal होता है, चाहे UI नामकरण या PAN-OS संस्करण कुछ भी हो)।EXPOSED_LIKELY पंक्तियाँ फ्लीट आउटपुट में पहले दिखें।X-PAN-KEY हेडर के माध्यम से भेजें ताकि यह URL एक्सेस लॉग और प्रोसेस तर्कों से बाहर रहे।नहीं करतीं:
PAN-OS API कुंजी उस उपयोगकर्ता की भूमिका और अनुमतियाँ प्राप्त करती है जो इसे उत्पन्न करता है।
महत्वपूर्ण चेतावनी: PAN-OS में केवल-पठनीय XML API अनुदान मौजूद नहीं है।
XML API टैब पर Admin Role अनुमतियाँ प्रति श्रेणी बाइनरी Enable/Disable हैं — Configuration, Operational Requests, Commit, Export, Import, Report, Log, User-ID Agent। XML API के लिए Configuration सक्षम करने से
showऔरset/edit/delete/move/rename/cloneदोनों क्रियाएँ अनुमत होती हैं। Operational Requests सक्षम करने से<request><restart>सहित मनमाने<request>ऑपरेशन अनुमत होते हैं। 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 का उपयोग कर रहे हैं):
Admin Role बनाएँ। 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 WebUI में "API कुंजी उत्पन्न करें" बटन प्रदर्शित नहीं करता — 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
read -rs पासवर्ड को टर्मिनल पर प्रतिध्वनित किए बिना और शेल इतिहास में डाले बिना पढ़ता है। स्क्रिप्ट परिणामी PAN_API_KEY को पर्यावरण से पढ़ती है और इसे X-PAN-KEY HTTP हेडर के माध्यम से भेजती है — न तो पासवर्ड और न ही कुंजी URL एक्सेस लॉग या स्क्रिप्ट चलने के दौरान ps auxww में दिखाई देती है।
ऑडिट कार्य पूर्ण होने पर उपयोगकर्ता को अक्षम करें। Device > Administrators पर नेविगेट करें, audit-cve-2026-0300 का पता लगाएँ, Delete पर क्लिक करें (या उपयोगकर्ता को अक्षम करें)। Commit करें। यह उस उपयोगकर्ता के लिए उत्पन्न किसी भी कुंजी को अमान्य कर देता है।
read -rs पासवर्ड को कवर करता है। PAN_API_KEY में कुंजी के लिए, फ़ाइल से पेस्ट करने के बजाय उपरोक्त स्निपेट के माध्यम से इसे इंटरैक्टिव रूप से सेट करना पसंद करें। यदि आपको इसे फ़ाइल से स्रोत करना ही है, तो सत्र के लिए set +o history का उपयोग करें।--insecure फ़्लैग TLS होस्टनाम जाँच और प्रमाणपत्र सत्यापन को पूरी तरह से अक्षम कर देता है। पथ पर कोई भी हमलावर ऑडिट प्रतिक्रिया का MITM कर सकता है और रूटेड डिवाइस के लिए portal_enabled=False रिपोर्ट कर सकता है। audit_fleet.py स्क्रिप्ट को फ्लीट स्वीप के लिए --insecure के साथ --accept-mitm-risk की आवश्यकता होती है क्योंकि जहरीली प्रतिक्रिया का विस्फोट दायरा फ्लीट-व्यापी होता है।0 — किसी भी ऑडिट किए गए vsys पर कोई पोर्टल सक्षम नहीं2 — कोई vsys नहीं मिला (क्षणिक या असमर्थित कॉन्फ़िगरेशन)3 — कम से कम एक vsys पर पोर्टल सक्षम (समीक्षा आवश्यक)4 — API कॉल विफल (auth, TLS, नेटवर्क)"पोर्टल सक्षम" पर गैर-शून्य एग्ज़िट जानबूझकर है — यह आपको स्क्रिप्ट को CI / फ्लीट-स्वीप पाइपलाइनों से जोड़ने की अनुमति देता है जिन्हें एक स्पष्ट संकेत की आवश्यकता होती है।
Apache License, Version 2.0 के अंतर्गत लाइसेंस प्राप्त। पूर्ण शर्तों के लिए LICENSE देखें।
व्यावसायिक उपयोग की अनुमति है; एट्रिब्यूशन आवश्यक है (व्युत्पन्न कार्यों में कॉपीराइट नोटिस और लाइसेंस फ़ाइल बनाए रखें)।
कॉपीराइट 2026 Tailwind Resource Group।