
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-portal शब्दावली का उपयोग करते हैं। show 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 का उपयोग कर रहे हैं):