
Write-up detalhado e prova de conceito para CVE-2023-41717, demonstrando o bypass das restrições de download/upload de arquivos do proxy Zscaler por meio de cabeçalhos HTTP Range e do protocolo BITS.
Controle inadequado de tipo de arquivo no Zscaler Proxy versões 3.6.1.25 e anteriores permite que atacantes locais contornem as restrições de download/upload de arquivos.
Durante o verão de 2022, encontrei uma vulnerabilidade que afeta o proxy ZScaler (versões 3.6.1.25 e anteriores). Essa vulnerabilidade permitiria que atacantes locais contornassem a restrição de downloads/uploads de arquivos protegidos por senha usando ferramentas como Burp ou até mesmo utilitários nativos da Microsoft, como o Bitsadmin, que depende do protocolo Background Intelligent Transfer Service (BITS).
De acordo com a documentação da Microsoft, o protocolo BITS “define uma maneira de transferir grandes cargas úteis de um cliente para um servidor HTTP ou vice-versa, mesmo diante de interrupções, enviando a carga útil em vários fragmentos”. Isso permite contornar restrições baseadas no tipo de arquivo, pois o Zscaler não consegue reconstruir adequadamente o arquivo em várias solicitações.
Embora esta prova de conceito se concentre apenas no aspecto de download, essa vulnerabilidade também se aplica aos uploads.
Nesta seção, são destacados dois métodos diferentes para contornar as restrições do Zscaler no download de arquivos protegidos por senha. Os testes foram realizados na versão 3.6.1.25 do cliente, usando a seguinte URL.
O primeiro método envolve modificar a solicitação HTTP, o que pode ser feito usando um navegador ou uma ferramenta como o Burp Suite. Para este teste, escolhi a primeira opção.
A imagem abaixo mostra a solicitação sendo interceptada e bloqueada pelo Zscaler. A solicitação é então retransmitida após a adição do cabeçalho Range com o valor bytes = 0-x, onde x é um valor arbitrário menor que o tamanho total do arquivo.

Uma vez que a solicitação é retransmitida, uma resposta com o código de status “206 Partial Content” é recebida. Os cabeçalhos da resposta mostrarão o tamanho total do arquivo, enquanto o payload da resposta é codificado em base64.


As solicitações são repetidas aumentando manualmente o valor do intervalo de bytes, até que o último fragmento do arquivo seja alcançado.

O payload resultante pode ser reconstruído de várias maneiras: para este teste, foi usado um script personalizado do PowerShell (você pode encontrá-lo em Reconstruct-Payload.ps1).
O hash MD5 do arquivo zip reconstruído (CE6CFFEA60C6CDF40C998E56B6EFBD20) corresponde ao esperado encontrado no Virus Total.



O segundo método utiliza o protocolo BITS da Microsoft, que divide nativamente as solicitações de download em partes.
Este teste foi feito usando o utilitário de linha de comando bitsadmin.exe, com a seguinte linha de comando:
bitsadmin.exe /transfer <job name> /download /priority normal <URL> <path_destination_file>


O hash MD5 do zip resultante corresponde ao encontrado na seção anterior.