Collax Security Gateway: OS-Command-Injection im Squid-Regeltester erlaubt delegiertem proxyadmin Root-Ausführung

Ein auf die Web-Proxy-Regelfilterung beschränkter delegierter Proxy-Administrator erlangt über die ungeprüften Felder url und username beliebige Befehlsausführung als admin und weiter als root.

Advisory-ID: TP-2026-072
Produkt: Collax Security Gateway (deutsche UTM-, Firewall-, Mail- und SSL-VPN-Appliance; betrifft auch Collax Business Server und Groupware Suite)
Schwachstellentyp: OS-Command-Injection (CWE-78)
CVE: pending (MITRE CNA-LR)
CVSS 3.1: 9.9 (Kritisch) · CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
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

Die Admin-Oberfläche unterstützt delegierte Administration: ein nur mit der Rolle proxyadmin ausgestatteter Benutzer darf das Formular 'Rule Analysis' öffnen (forms/squid_rule_tester.form:4). Der JSON-RPC-Dispatcher autorisiert jeden Inhaber von role.proxyadmin für dieses Formular, nicht nur einen vollen Administrator. Die Felder url und username sind als typehint='plain' deklariert (clif/clif.squid_rule_tester.pl:92,94) und erhalten keine Formatprüfung. RuleTester.pm interpoliert sie in ein doppelt gequotetes Shell-Kommando, sprintf('suwrap root squidguardRuleTest "%s" "%s" "%s" "%s"', $url, ...) (AKLib/Squid/RuleTester.pm:84), und führt es über open my $ph, '-|', $cmd aus (RuleTester.pm:86), eine Skalar-Pipe, die /bin/sh startet. Die Werte werden zudem gespeichert und beim Rendern der Test-Historie erneut in die Shell gegeben. Da suwrap setuid root:admin mode 4750 ist, eskaliert admin in einem Schritt zu root.

Ursache

RuleTester.pm baut ein Shell-Kommando mit sprintf('suwrap root squidguardRuleTest "%s" "%s" "%s" "%s"', $url, $ip, $user, ...) (AKLib/Squid/RuleTester.pm:84) und führt es über open my $ph, '-|', $cmd aus (RuleTester.pm:86), was /bin/sh aufruft.
Die Felder url und username sind typehint='plain' und passieren keinen Metazeichen-Filter (clif/clif.squid_rule_tester.pl:92,94), sodass ", $(...) oder ` in url die doppelten Anführungszeichen verlassen.
Der Wert sollte eine Test-URL sein, die der suwrap-Helfer an squidGuard weitergibt (suwrap/squidguardRuleTest:10,15), kein Shell-Fragment.
Der JSON-RPC-Dispatcher gewährt das Formular jedem Inhaber von role.proxyadmin (forms/squid_rule_tester.form:4), einer Rolle unterhalb des vollen Administrators.
Die eingeschleuste Shell läuft als OS-Benutzer admin (adminhttpd.conf:119-120), suwrap ist setuid root:admin mode 4750, und die gespeicherten url und username werden beim Rendern der Historie erneut in die Shell gegeben, sodass die Injection persistiert.

Proof of Concept

Schematisch: als Benutzer mit nur role.proxyadmin an :8001 anmelden und das Formular 'Rule Analysis' öffnen (/json//squid_rule_tester).

{"method":"master","params":[{"url":"<Command-Substitution-Ausbruch>","userip":"1.2.3.4","username":"-"}]}

testRule interpoliert die gespeicherte url in das Shell-Kommando und führt es aus; die Substitution feuert zur Shell-Parse-Zeit, vor squidguardRuleTest. Am 01.09.2026 mit einem Marker uid=0(root) unter chroot+akrun verifiziert.

Auswirkung

  • Ein auf die Web-Proxy-Filterung beschränkter delegierter Proxy-Administrator führt beliebige OS-Befehle als admin und dann root aus.
  • Die gespeicherten url und username werden beim Rendern der Historie erneut ausgeführt, sodass die Injection persistent ist.
  • Vollständige Kompromittierung des Gateways aus einem beschränkten delegierten Zugang, ein Bruch der Rechtegrenze.
  • Appliance-weit keine CSP-, X-Frame-Options- oder X-Content-Type-Options-Header.

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.