
이 저장소는 CVE-2023-41717에 대한 write-up과 PoC를 제공하기 위한 것입니다.
Zscaler Proxy 버전 3.6.1.25 및 이전 버전의 부적절한 파일 형식 제어로 인해 로컬 공격자가 파일 다운로드/업로드 제한을 우회할 수 있습니다.
2022년 여름, 저는 Zscaler 프록시(버전 3.6.1.25 및 이전 버전)에 영향을 미치는 취약점을 발견했습니다. 이 취약점을 통해 로컬 공격자는 Burp과 같은 도구나 BITS(Background Intelligent Transfer Service) 프로토콜에 의존하는 Bitsadmin과 같은 기본 Microsoft 유틸리티를 사용하여 암호로 보호된 아카이브의 다운로드/업로드 제한을 우회할 수 있습니다.
Microsoft 문서에 따르면 BITS 프로토콜은 “중단 상황에서도 페이로드를 여러 조각으로 나누어 클라이언트에서 HTTP 서버로 또는 그 반대로 대용량 페이로드를 전송하는 방법을 정의합니다”. 이로 인해 Zscaler가 여러 요청에 걸쳐 파일을 제대로 재구성하지 못하므로 파일 형식 기반 제한을 우회할 수 있습니다.
이 개념 증명은 다운로드 측면에만 초점을 맞추지만 이 취약점은 업로드에도 적용됩니다.
이 섹션에서는 암호로 보호된 아카이브 다운로드에 대한 Zscaler 제한을 우회하는 두 가지 방법을 설명합니다. 테스트는 클라이언트 버전 3.6.1.25에서 다음 URL을 사용하여 수행되었습니다.
첫 번째 방법은 HTTP 요청을 수정하는 것입니다. 브라우저나 Burp Suite 같은 도구를 사용하여 수행할 수 있습니다. 이 테스트에서는 전자(브라우저)를 선택했습니다.
아래 이미지는 요청이 Zscaler에 의해 차단되는 모습을 보여줍니다. 그런 다음 Range 헤더에 전체 파일 크기보다 작은 임의의 값인 bytes = 0-x를 추가하여 요청을 다시 전송합니다.

요청을 다시 전송하면 “206 Partial Content” 상태 코드가 포함된 응답이 수신됩니다. 응답 헤더에는 전체 파일 크기가 표시되고 응답 페이로드는 base64로 인코딩됩니다.


마지막 파일 청크에 도달할 때까지 바이트 범위 값을 수동으로 늘려 가며 요청을 반복합니다.

결과 페이로드는 다양한 방법으로 재구성할 수 있습니다. 이 테스트에서는 사용자 지정 PowerShell 스크립트를 사용했습니다(Reconstruct-Payload.ps1에서 찾을 수 있습니다).
재구성된 zip 파일의 MD5 해시(CE6CFFEA60C6CDF40C998E56B6EFBD20)는 Virus Total에서 확인된 예상 해시와 일치합니다.



두 번째 방법은 다운로드 요청을 기본적으로 청크로 분할하는 Microsoft의 BITS 프로토콜을 활용합니다.
이 테스트는 CLI 유틸리티 bitsadmin.exe를 사용하여 다음 명령줄로 수행되었습니다:
bitsadmin.exe /transfer <job name> /download /priority normal <URL> <path_destination_file>


결과 zip의 MD5 해시는 이전 섹션에서 확인된 해시와 일치합니다.