Collax Security Gateway: anonymes reflektiertes Cross-Site-Scripting auf der Login-Seite beider Ursprünge
Ein unauthentifizierter Angreifer, der ein Opfer auf einen manipulierten Login-Link lockt, führt Skript auf der Login-Seite aus und kann das Formular umschreiben, um Administrator-Zugangsdaten abzugreifen.
Advisory-ID: TP-2026-069
Produkt: Collax Security Gateway (deutsche UTM-, Firewall-, Mail- und SSL-VPN-Appliance; betrifft auch Collax Business Server und Groupware Suite)
Schwachstellentyp: Reflektiertes Cross-Site-Scripting (CWE-79)
CVE: beantragt (MITRE CNA-LR), Vergabe ausstehend
CVSS 3.1: 9.3 (Kritisch) · CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:N
Hersteller-Advisory: Collax Release Notes CSG 7.2.48
Betroffene Versionen: 7.2.46 und früher
Behoben in: 7.2.48
Gemeldet: 01. September 2026
Zusammenfassung
Das Login-Formular der Appliance wird anonym unter /.login von cgi-bin/nph-login-admin.cgi ausgeliefert, das htmltemplates/login.tpl über HTML::Template rendert. HTML::Template escaped nicht automatisch, und login.tpl setzt an keiner Variable ESCAPE=HTML. Die Parameter ui und from (letzterer auch aus Referer und REQUEST_URI abgeleitet) werden roh in doppelt gequotete HTML-Attributwerte in versteckten Formularfeldern platziert. Da CGI::param() den Wert URL-dekodiert, erreicht ein kodiertes Anführungszeichen das Attribut als literales Zeichen und schliesst es. Das Alias /.login ist auf der Admin-Oberfläche (tcp/8001) und dem WebAccess-Portal (tcp/80 und 443) verdrahtet, wird unauthentifiziert ausgeliefert, und die Appliance sendet keine CSP.
Ursache
login.tpl:91 emittiert value="<TMPL_VAR NAME=TARGET_UI>" und login.tpl:93 value="<TMPL_VAR NAME=HTTPD_LOCATION>", beide in einem doppelt gequoteten Attribut ohne Escaping.
nph-login-admin.cgi:281 baut das Template mit HTML::Template(die_on_bad_params => 0), dessen Default kein Output-Escaping ist, und login.tpl trägt null ESCAPE=-Attribute.
nph-login-admin.cgi:132 weist $ui = $q->param('ui') an TARGET_UI zu, und nph-login-admin.cgi:325-341 leitet die URL für HTTPD_LOCATION aus from, HTTP_REFERER oder REQUEST_URI ab.
CGI::param() URL-dekodiert den Wert, sodass ein kodiertes Anführungszeichen als literales Zeichen im Attribut ankommt und es schliesst.
Das Alias /.login ist für beide Server deklariert (etc/adminhttpd/.../akconfig_gui:61, etc/apache/.../akconfig_webaccess:118) ohne Header-Härtung irgendwo in der Apache-Konfiguration.
Proof of Concept
Schematisch: ein Login-Link, der den Payload in ui und from auf dem Admin-Ursprung trägt.
GET /.login?ui=<Attribut-Ausbruch mit Skript-Markup>&from=<Attribut-Ausbruch> HTTP/1.1
Host: <gw>:8001
Beide Parameter brechen aus dem value="..."-Attribut aus. Die Antwort trägt keine CSP, X-Content-Type-Options oder X-Frame-Options. Am 01.09.2026 auf Code-Ebene unter chroot+akrun verifiziert; das Browser-Feuern folgt aus dem injizierten Kontext und der appliance-weiten Abwesenheit von CSP.
Auswirkung
- Anonyme Skriptausführung im Admin- oder WebAccess-Login-Ursprung, ohne Konto.
- Credential-Erfassung: eingeschleustes JavaScript liest Benutzername und Passwort, während das Opfer das Login-Formular absendet, und exfiltriert die Klartext-Admin-Zugangsdaten.
- Bei einem authentifizierten erneuten Besuch liest das Skript das nicht-HttpOnly auth_cookie, das base64(user:password) ist, und legt das Klartext-Admin-Passwort offen.
- Vollständige Kontrolle über UTM, Firewall und Mail-Gateway folgt aus der Offenlegung der Admin-Zugangsdaten.
Referenzen
Steckt so etwas in Ihrer Software?
Diese Schwachstelle hat unser Team im Rahmen seiner Arbeit gefunden. Lassen Sie Ihre Anwendungen von denselben Spezialisten prüfen, mit einem Penetrationstest von turingpoint.
