
Nginx 정수 오버플로 취약점(CVE-2017-7529)을 이용한 범위 밖 캐시 읽기를 가능하게 하는 PoC 익스플로잇입니다. Docker 기반 랩 환경 및 테스트용 Python 스크립트를 포함합니다.
참고 자료:
Nginx는 리버스 프록시 사이트를 운영할 때 일반적으로 일부 파일, 특히 정적 파일을 캐시합니다. 캐시된 부분은 파일에 저장되며, 각 캐시 파일은 "파일 헤더" + "HTTP 응답 헤더" + "HTTP 응답 본문"으로 구성됩니다. 두 번째 요청이 해당 캐시 파일에 적중하면 Nginx는 해당 파일의 "HTTP 응답 본문"을 사용자에게 직접 반환합니다.
요청에 Range 헤더가 포함되어 있으면 Nginx는 지정된 start 및 end 위치에 따라 지정된 길이의 콘텐츠를 반환합니다. 만약 (-600, -9223372036854774591)과 같이 두 개의 음수 위치를 구성하면 음수 위치의 데이터를 읽을 수 있게 됩니다. 이 요청이 다시 캐시 파일에 적중하면 "HTTP 응답 본문" 앞에 있는 "파일 헤더", "HTTP 응답 헤더" 등의 캐시 파일 내용을 읽을 수 있게 됩니다.
테스트 환경 실행:
docker-compose up -d
http://your-ip:8080/에 접속하면 Nginx 기본 페이지를 확인할 수 있습니다. 이 페이지는 실제로 8081 포트를 리버스 프록시한 콘텐츠입니다.
python3 poc.py http://your-ip:8080/를 실행하여 반환 결과를 읽습니다:

보시다시피 "HTTP 응답 본문" 앞에 있는 "파일 헤더", "HTTP 응답 헤더" 등의 내용을 범위 밖에서 읽어냈습니다.
읽기에 오류가 있으면 poc.py의 오프셋 주소(605)를 조정하십시오.