Collax Security Gateway: Cross-Site-Request-Forgery in rrd2csv.cgi führt zu Perl-Codeausführung und Root-Kompromittierung

Ein einziger Klick eines angemeldeten Administrators, oder ein beliebiger delegierter Sub-Admin direkt, führt über den ungeprüften plugin-Parameter zu Perl-Codeausführung als admin und weiter zu root.

Advisory-ID: TP-2026-066
Produkt: Collax Security Gateway (deutsche UTM-, Firewall-, Mail- und SSL-VPN-Appliance; betrifft auch Collax Business Server und Groupware Suite)
Schwachstellentyp: Cross-Site-Request-Forgery zu Codeausführung (CWE-352)
CVE: pending (MITRE CNA-LR)
CVSS 3.1: 8.3 (Hoch) · CVSS:3.1/AV:N/AC:H/PR:N/UI:R/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-Weboberfläche (adminhttpd auf tcp/8001) liefert rrd2csv.cgi, einen Helfer für den RRD-Graph-Export. Das CGI liest den Query-Parameter plugin (cgi-bin/rrd2csv.cgi:75) und übergibt ihn unverändert an eval "require $pluginName" (cgi-bin/rrd2csv.cgi:86), ein Perl-String-eval, ohne Prüfung vor dem eval. Das Admin-CGI-Framework führt kein Anti-CSRF-Token und keine Referer- oder Origin-Prüfung, und das Session-Cookie hat kein SameSite-Attribut, sodass ein Browser es bei einem seitenübergreifenden Top-Level-GET anhängt. Zusätzlich prüft cgi-bin keine Rolle, sodass jeder delegierte Sub-Admin das CGI direkt aufruft. Das eval läuft als OS-Benutzer admin; der setuid-Helfer /usr/sbin/suwrap (root:admin, 4750) liefert die dokumentierte Ein-Schritt-Eskalation zu root.

Ursache

rrd2csv.cgi liest den Query-Parameter plugin (cgi-bin/rrd2csv.cgi:75) und wertet eval "require $pluginName" aus (cgi-bin/rrd2csv.cgi:86), bevor ein ->can()- oder AKLib::Config->open()-Guard läuft.
Der Wert sollte ein Perl-Plugin-Modul benennen, das der Code danach mit $pluginName->can("defFor_$series") (:93) prüft, sodass ein Payload der Form 5;system(...);1 über den require-5-Versionscheck-Trick zum abschliessenden system(...) gelangt.
Das Admin-CGI-Framework führt kein CSRF-Token und keine Referer- oder Origin-Prüfung, und das Session-Cookie wird ohne SameSite gesetzt, sodass der Browser es bei einem seitenübergreifenden Top-Level-GET sendet.
Apache gated /cgi-bin/* nur mit Require valid-user / Require user admin, und kein CGI führt eine Rollenprüfung durch, sodass ein delegierter Sub-Admin den Sink direkt erreicht.
Das eval läuft als OS-Benutzer admin (adminhttpd.conf:119-120), und /usr/sbin/suwrap ist setuid root:admin mode 4750, was admin einen Ein-Schritt-Pfad zu root gibt.

Proof of Concept

Schematisch: der Angreifer bringt einen angemeldeten Administrator dazu, eine Seite zu öffnen, die einen GET an das CGI absetzt.

GET /cgi-bin/rrd2csv.cgi?plugin=<require-eval-Ausbruch mit OS-Befehl>&series=x HTTP/1.1
Host: <gw>:8001
Cookie: admin_session_<host>=<Admin-Session>

Das Semikolon zum Trennen der Anweisungen wird als %3B kodiert, weil CGI.pm den Query-String an literalem ; teilt. Der eingeschleuste Befehl läuft als OS-Benutzer admin und über den setuid-suwrap-Helfer als root. Am 01.09.2026 mit einem Marker uid=0(root) unter chroot+akrun verifiziert.

Auswirkung

  • Beliebige OS-Befehlsausführung als OS-Benutzer admin, dann root über den mitgelieferten setuid-suwrap-Helfer.
  • Unauthentifiziert über einen einzigen Administrator-Klick erreichbar, da das Session-Cookie kein SameSite hat und das Framework kein CSRF-Token führt.
  • Direkt erreichbar durch jeden delegierten Sub-Admin, weil cgi-bin keine Rollenprüfung erzwingt.
  • 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.