
Simple PoC Python pour vérifier la présence d'une XSS réfléchie (CVE-2025-12101) sur Citrix NetScaler ADC/Gateway via /cgi/logout en utilisant une charge utile SAMLResponse + RelayState spécialement conçue.
Simple PoC Python pour vérifier les instances Citrix NetScaler ADC / Gateway pour CVE-2025-12101 (XSS réfléchi sur /cgi/logout) à l’aide d’une charge utile SAMLResponse + RelayState forgée.
⚠️ Utilisez cet outil uniquement sur les systèmes que vous possédez ou pour lesquels vous avez une autorisation explicite de test.
CVE-2025-12101 est une vulnérabilité de type Cross-Site Scripting (XSS) réfléchi affectant NetScaler ADC et NetScaler Gateway lorsqu’ils sont configurés en tant que serveur virtuel Gateway ou AAA.
Dans les configurations vulnérables, le point de terminaison /cgi/logout traite les réponses de déconnexion SAML et peut refléter des données contrôlées par l’attaquant depuis le paramètre RelayState sans encodage approprié, conduisant à une XSS.
La recherche et les détails techniques proviennent de watchTowr Labs :
Ce dépôt fournit un vérificateur Python minimal en TLS brut qui envoie le même type de charge utile et inspecte la réponse HTTP.
Clonez le dépôt :
git clone https://github.com/6h4ack/CVE-2025-12101-checker.git
cd CVE-2025-12101-checker
Assurez-vous d’avoir Python 3 installé.
Le script principal accepte un seul paramètre obligatoire : -u / --url.
python3 cve-2025-12101.py -u https://www.example.com
Également valide :
python3 cve-2025-12101.py -u www.example.com
python3 cve-2025-12101.py -u http://www.example.com
L’URL est normalisée en interne ; le script extrait le nom d’hôte et le port (par défaut 443 pour HTTPS et 80 pour HTTP).
Exemple (pour une cible vulnérable) :
[*] Testing target: www.example.com:443
===== RAW HTTP RESPONSE BEGIN =====
HTTP/1.1 302 Object Moved
Content-Type: text/html
...
<script>alert(1)</script>
...
===== RAW HTTP RESPONSE END =====
[+] HTTP status code: 302
[+] Payload '<script>alert(1)</script>' reflected: True
[VULNERABLE] XSS confirmed on www.example.com with payload '<script>alert(1)</script)'
Pour une cible non vulnérable, vous verrez quelque chose comme :
[INFO] No XSS behaviour detected on www.example.com with this payload.
Des couleurs ANSI sont utilisées pour rendre le résultat plus visible dans le terminal (vert pour vulnérable, rouge pour non vulnérable / conditions d’erreur).