
Sicher erkennen, ob ein UniFi Network Application controller anfällig für CVE-2026-22557 ist
Erkennen Sie sicher, ob ein UniFi Network Application Controller anfällig für CVE-2026-22557 ist, ohne Störungen zu verursachen. Siehe den vollständigen Bericht im Bishop Fox Blog.
CVE-2026-22557 ist eine nicht authentifizierte Path-Traversal-Sicherheitslücke im Gast-Captive-Portal der UniFi Network Application, die es entfernten Angreifern ermöglicht, beliebige Dateien als Benutzer des Controller-Prozesses zu lesen (CVSS 10.0). Die Schwachstelle betrifft UniFi Network Application 10.1.85 und früher auf dem 10.1.x-Zweig sowie entsprechende frühere Versionen auf den Zweigen 10.2.x und 9.0.x. Ubiquiti hat Korrekturen in 10.1.89, 10.2.97 und 9.0.118 ausgeliefert (SAB-062).
Das Gästeportal rendert die Fehlerseite, indem es den page_error-Parameter aus der Anfrage liest und ihn wörtlich als relativen Pfad im Portal-Ressourcenlader verwendet, ohne Validierung. Wenn portal_customized: true für die angefragte Site gesetzt ist (diese Konfiguration erhält jedes gebrandete Captive-Portal, z. B. von Hotels, Einzelhandel oder Cafés), löst der Lader diesen Pfad gegen das Portalverzeichnis auf der Festplatte auf, und der Pfad kann dieses verlassen.
Dieses Werkzeug führt eine zerstörungsfreie Schwachstellenprüfung durch, indem es:
/status ausliest und mit den SAB-062-Korrekturlinien vergleicht.page_error-Parameter auf /guest/<site>/wechat/sign mit ../-Tiefen 1-8 gegen einen Dateinamen mit zwei Zweigen abfragt, um festzustellen, ob der Traversal überhaupt ausgelöst wird.firmware.json) durchführt, um festzustellen, ob der angepasste Portal-Dateisystemzweig aktiv ist.Das Werkzeug fordert nur die Laufzeitkatalogdatei als Orakel für den aktiven Zweig an. Es liest keine Anmeldeinformationen, TLS-Material, Datenbankzustände oder Backups und schreibt keinen Dateiinhalt auf stdout oder die Festplatte. Nur das Urteil wird ausgegeben.
portal_customized: true auf der angefragten Site geben die Katalogdatei in der kalibrierten Tiefe zurück und bestätigen VULNERABLE.portal_customized: false auf der angefragten Site lösen den Traversal im Kalibrierungsschritt aus, geben aber keinen Festplatteninhalt im Bestätigungsschritt zurück → PARTIALLY EXPOSED. Die Anwendungsbinärdatei ist immer noch anfällig; Patchen ist erforderlich, auch wenn diese Site nicht im ausnutzbaren Zustand ist.NOT VULNERABLE.NOT EXPOSED.git clone https://github.com/BishopFox/CVE-2026-22557-check
cd CVE-2026-22557-check
Python 3.9+ wird benötigt. Das Werkzeug verwendet nur die Python-Standardbibliothek, daher ist kein pip install-Schritt erforderlich.
Testen Sie einen UniFi Network Application Controller unter <TARGET>. Richten Sie das Werkzeug auf die URL, die die Weboberfläche des Controllers erreicht; der anfällige Handler wird sowohl auf dem Admin-Port (Standard 8443/TCP) als auch auf den dedizierten Gästeportal-Ports (8843, 8880) ausgeliefert.
python3 cve_2026_22557_check.py <BASE_URL> [--site NAME]
Der Standard-Site-Slug ist default. UniFi-Bereitstellungen mit mehreren konfigurierten Sites sollten das Werkzeug mit --site <name> für jede Site erneut ausführen. Ein Controller ist ausnutzbar, sobald irgendeine seiner Sites portal_customized: true hat.
Die folgenden Beispiele verwenden --brief für ein einzeiliges Ergebnis pro Host. Führen Sie es ohne --brief aus, um das vollständige Banner, den schrittweisen Fortschritt und einen Ergebnisblock mit empfohlenen Abhilfemaßnahmen zu erhalten.
Der Controller befindet sich in einer anfälligen Version und die Voraussetzung des angepassten Portals ist für die angefragte Site aktiv, sodass der nicht authentifizierte Lesepfad erreichbar ist.
$ python3 cve_2026_22557_check.py https://192.168.1.100:8443 --brief
[VULNERABLE] https://192.168.1.100:8443 site=default
Der Controller befindet sich in einer anfälligen Version, aber die angefragte Site hat portal_customized: true nicht aktiviert, sodass die Festplattenlese-Voraussetzung für diese Site nicht erfüllt ist. Die Anwendungsbinärdatei muss dennoch gepatcht werden; eine andere Site auf demselben Controller kann sich möglicherweise noch im ausnutzbaren Zustand befinden.
$ python3 cve_2026_22557_check.py https://192.168.1.100:8443 --brief
[PARTIAL] https://192.168.1.100:8443 site=default
Der Controller befindet sich in einer behobenen Version (10.1.89, 10.2.97, 9.0.118 oder später), sodass der Traversal auf keiner angefragten Tiefe ausgelöst wird.
$ python3 cve_2026_22557_check.py https://192.168.1.200:8443 --brief
[NOT VULNERABLE] https://192.168.1.200:8443 site=default
--site NAME UniFi site slug to probe (default: "default")
--max-depth N maximum ../ traversal depth to try (default: 8)
--no-tls-recon skip TLS certificate subject/SAN display
--no-color disable ANSI color output (also honored: NO_COLOR env var)
--timeout N per-request timeout in seconds (default: 20)
--brief print a single-line result, no banner or steps
Exit-Codes: 0 VULNERABLE, 1 teilweise exponiert / nicht anfällig / nicht exponiert, 2 Transportfehler.
Das Werkzeug kann nur dann ein VULNERABLE-Urteil abgeben, wenn die folgenden Bedingungen erfüllt sind:
/guest/*-Handler wird sowohl auf dem Admin-Port (8443) als auch auf den dedizierten Gästeportal-Ports (8843, 8880) ausgeliefert; das Werkzeug fragt nur die ihm gegebene URL ab.portal_customized: true in ihrer guest_access-Einstellung, was die Voraussetzung für den Festplattenlese-Codepfad ist. Ein Controller mit mehreren Sites ist ausnutzbar, wenn irgendeine seiner Sites dies aktiviert hat.Wenn eine Bedingung nicht erfüllt ist, fällt das Werkzeug auf ein konservativeres Urteil zurück. Ein PARTIALLY EXPOSED-Ergebnis bedeutet dennoch, dass die Anwendung anfällig ist und gepatcht werden muss; die angefragte Site setzt lediglich den Festplattenlesepfad nicht frei.