
Ce dépôt fournit un compte-rendu et un PoC pour CVE-2023-41717.
Contrôle inapproprié du type de fichier dans les versions 3.6.1.25 et antérieures du proxy Zscaler permet aux attaquants locaux de contourner les restrictions de téléchargement/upload.
Au cours de l'été 2022, j'ai découvert une vulnérabilité affectant le proxy ZScaler (versions 3.6.1.25 et antérieures). Cette vulnérabilité permettrait à des attaquants locaux de contourner la restriction sur les téléchargements/uploads d'archives protégées par mot de passe en utilisant des outils comme Burp ou même des utilitaires natifs Microsoft comme Bitsadmin, qui s'appuie sur le protocole BITS (Background Intelligent Transfer Service).
Selon la documentation de Microsoft, le protocole BITS « définit un moyen de transférer de gros paquets d'un client vers un serveur HTTP ou vice versa, même face à des interruptions, en envoyant le paquet en plusieurs fragments ». Cela permet de contourner les restrictions basées sur le type de fichier car Zscaler n'est pas capable de reconstruire correctement le fichier à travers plusieurs requêtes.
Bien que cette preuve de concept se concentre uniquement sur l'aspect téléchargement, cette vulnérabilité s'applique également aux uploads.
Dans cette section, deux méthodes différentes pour contourner les restrictions de Zscaler sur le téléchargement d'archives protégées par mot de passe sont mises en évidence. Les tests ont été effectués sur la version 3.6.1.25 du client, en utilisant l'URL suivante.
La première méthode consiste à modifier la requête HTTP, ce qui peut être fait soit en utilisant un navigateur, soit un outil comme Burp Suite. Pour les besoins de ce test, j'ai choisi la première option.
L'image ci-dessous montre la requête interceptée et bloquée par Zscaler. La requête est ensuite retransmise après avoir ajouté l'en-tête Range avec la valeur bytes = 0-x, où x est une valeur arbitraire inférieure à la taille totale du fichier.

Une fois la requête retransmise, une réponse avec le code d'état « 206 Partial Content » est reçue. Les en-têtes de réponse montreront la taille totale du fichier, tandis que la charge utile de la réponse est encodée en base64.


Les requêtes sont répétées en augmentant manuellement la valeur de la plage d'octets, jusqu'à atteindre le dernier fragment du fichier.

La charge utile résultante peut être reconstruite de différentes manières : pour ce test, un script Powershell personnalisé a été utilisé (vous pouvez le trouver dans Reconstruct-Payload.ps1).
Le hachage MD5 du fichier zip reconstruit (CE6CFFEA60C6CDF40C998E56B6EFBD20) correspond à celui attendu trouvé sur Virus Total.



La deuxième méthode exploite le protocole BITS de Microsoft, qui divise nativement les requêtes de téléchargement en fragments.
Ce test a été effectué en utilisant l'utilitaire en ligne de commande bitsadmin.exe, avec la ligne de commande suivante :
bitsadmin.exe /transfer <job name> /download /priority normal <URL> <path_destination_file>


Le hachage MD5 du zip résultant correspond à celui trouvé dans la section précédente.