
PoC-эксплойт для уязвимости переполнения целых чисел в Nginx (CVE-2017-7529), позволяющий чтение кэша за пределами границ. Включает лабораторную среду на основе 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-ответа».
Если чтение происходит неправильно, отрегулируйте смещение (605) в poc.py.