
CVE-2026-23813 — AOS-CX pre-auth bypass via nginx regex. Detection script, bypass demo, config-disclosure PoC, and IDS rules.
Des attaquants distants non authentifiés peuvent accéder à l'API REST de gestion AOS-CX en faisant transiter clandestinement un jeton
loginvia l'expression régulière de version trop permissive de nginx, exposant ainsi la surface de configuration basée sur OVSDB (y compris le hachage du mot de passe administrateur).
| Branche | Vulnérable | Corrigé |
|---|---|---|
| 10.17.x | ≤ 10.17.0001 | 10.17.1001 |
| 10.16.x | ≤ 10.16.1020 | 10.16.1030 |
| 10.13.x | ≤ 10.13.1160 | 10.13.1161 |
| 10.10.x | ≤ 10.10.1170 | 10.10.1180 |
python3 detect.py <host[:port]>
Envoie une seule requête GET en lecture seule. Affiche PATCHED, VULNERABLE ou UNKNOWN. Ne fait aucune modification. Adapté aux inventaires.
python3 bypass_demo.py <host[:port]>
Envoie le même point d'accès deux fois — une fois normalement, une fois avec le transfert clandestin — et affiche les codes de réponse côte à côte. Aucun changement d'état. Voir docs/root-cause.md pour le pourquoi.
python3 exploit.py <host[:port]>
AOS-CX 10.10.x uniquement. Crée un point de contrôle via le chemin non authentifié, lit la configuration en cours complète, affiche le hash administrateur. Le contournement multi-branche fonctionne sur toutes les versions affectées, mais cette chaîne de divulgation de configuration repose sur un comportement backend spécifique à la branche 10.10. Le point de contrôle persiste sur l'appareil — les points d'accès REST accessibles via le contournement n'acceptent pas DELETE ; supprimez-le via la console ou une session autorisée si nécessaire.
Python 3.8+ et requests :
pip install requests
Analyse indépendante post-correctif et preuve de concept par 4252nez — article sur OffSecKit. La vulnérabilité originale a été signalée par moonv via le programme HPE Bugcrowd ; ce dépôt n'a aucune affiliation avec ce rapport.
MIT — voir LICENSE.
| Fichier | Objectif |
|---|
detect.py | Vérification non destructive de l'état du correctif |
bypass_demo.py | Comparaison éducative côte à côte du mécanisme de contournement |
exploit.py | Preuve de concept de divulgation de configuration (crée un point de contrôle) |
detection/nginx-access.md | Signatures de journal pour les logs d'accès nginx |
detection/suricata.rules | Règle Suricata pour la forme d'URI de transfert clandestin |
docs/root-cause.md | Explication courte de la cause racine |
docs/patch-diff.md | Le correctif, en un diff |