
Этот репозиторий предназначен для предоставления отчета и PoC для CVE-2023-41717.
Несоответствующий контроль типа файлов в Zscaler Proxy версий 3.6.1.25 и ранее позволяет локальным злоумышленникам обходить ограничения на загрузку и скачивание файлов.
Летом 2022 года я обнаружил уязвимость, затрагивающую прокси ZScaler (версии 3.6.1.25 и ранее). Эта уязвимость позволяет локальным злоумышленникам обходить ограничения на загрузку и скачивание архивов, защищённых паролем, с помощью таких инструментов, как Burp, или даже встроенных утилит Microsoft, таких как Bitsadmin, который использует протокол фоновой интеллектуальной передачи данных (BITS).
Согласно документации Microsoft, протокол BITS «определяет способ передачи больших полезных нагрузок от клиента к HTTP-серверу или наоборот, даже в условиях прерываний, путём отправки полезной нагрузки в нескольких фрагментах». Это позволяет обходить ограничения, основанные на типе файла, поскольку Zscaler не может корректно восстановить файл из нескольких запросов.
Хотя эта концептуальная проверка будет сосредоточена только на аспекте скачивания, данная уязвимость также применима и к загрузкам.
В этом разделе описаны два различных метода обхода ограничений Zscaler на скачивание архивов, защищённых паролем. Тесты проводились на версии 3.6.1.25 клиента с использованием следующего URL.
Первый метод предполагает изменение HTTP-запроса, что можно сделать либо с помощью браузера, либо с помощью такого инструмента, как Burp Suite. Для целей этого теста я выбрал первый вариант.
На изображении ниже показан запрос, перехваченный и заблокированный Zscaler. Затем запрос повторно отправляется после добавления заголовка Range со значением bytes = 0-x, где x — произвольное значение меньше общего размера файла.

После повторной отправки запроса приходит ответ с кодом состояния «206 Partial Content». Заголовки ответа покажут общий размер файла, а полезная нагрузка ответа закодирована в base64.


Запросы повторяются с ручным увеличением значения диапазона байт, пока не будет достигнут последний фрагмент файла.

Полученную полезную нагрузку можно восстановить различными способами: для этого теста использовался специальный скрипт Powershell (вы можете найти его в Reconstruct-Payload.ps1).
MD5-хеш восстановленного zip-файла (CE6CFFEA60C6CDF40C998E56B6EFBD20) совпадает с ожидаемым, найденным на Virus Total.



Второй метод использует протокол BITS от Microsoft, который по своей сути разбивает запросы на загрузку на фрагменты.
Этот тест был выполнен с помощью утилиты командной строки bitsadmin.exe со следующей командной строкой:
bitsadmin.exe /transfer <job name> /download /priority normal <URL> <path_destination_file>


MD5-хеш полученного zip-файла совпадает с тем, что был найден в предыдущем разделе.