Инъекция ключа кэша в Nginx позволяет отравлять веб-кэш

В Nginx злоумышленник может манипулировать компонентами запроса, включая URI и заголовок Accept, чтобы разные запросы указывали на один элемент кэша. Это создаёт условия для раскрытия ответов, сохранённых для ограниченных путей, обхода проверок контроля доступа, получения конфиденциальных данных без выполнения исходных условий авторизации, отказа в обслуживании и сохранённого межсайтового скриптинга.

Коллизии при построении ключа кэша

Инъекция ключа кэша представляет собой технику отравления веб-кэша. Она возникает, когда компоненты ключа, на которые влияет злоумышленник, объединяются без явных границ. Разные значения URI, заголовков, хоста или схемы могут формировать одну и ту же итоговую строку ключа. Хеширование этой строки не устраняет проблему, поскольку коллизии возникают до хеширования.

Например, фрагмент /admin может быть разделён между путём и заголовком Accept. В результате запрос способен совпасть с ключом кэша ранее сохранённого административного ответа, хотя сам путь запроса не активирует соответствующий список контроля доступа.

Та же техника применима к отказу в обслуживании через отравление кэша. Злоумышленник запрашивает несуществующий путь, фрагменты которого формируют ключ кэша действительного конечного пункта, например /home. Если источник возвращает кэшируемый ответ 404, Nginx сохраняет его под конфликтующим ключом. Последующие пользователи, запрашивающие /home, получают ошибочный ответ.

Отдельная атака нацелена на ключи, начинающиеся с $scheme$host. Злоумышленник перемещает последний символ строки https в контролируемое им значение заголовка Host. HTTP-запрос в таком случае может совпасть с записью в кэше HTTPS.

Если приложение подставляет значение хоста в атрибут src JavaScript-кода, а злоумышленник контролирует итоговое доменное имя, отравленный ответ может привести к сохранённому межсайтовому скриптингу. Браузер загружает JavaScript-код, размещённый на сервере злоумышленника.

Риски многослойного кэширования

Многослойное кэширование способно расширить воздействие атаки. Cloudflare может обходить собственный кэш на границе сети для запросов с заголовком Authorization и пересылать их в Nginx. Nginx при этом может продолжать кэшировать ответ, если для него явно не задано обратное поведение.

Авторы отчёта рекомендуют использовать структурированное построение ключей кэша, при котором границы и смысл компонентов сохраняются до хеширования. Также нужны тщательные правила обхода и хранения кэша для аутентифицированных запросов.

Отчет получен из сервиса CTT Report Hub. Права на отчет принадлежат его владельцу.

Ознакомиться подробнее с отчетом можно по ссылке.

Технологии киберугроз
Автор: Технологии киберугроз
Технологии киберугроз – технологическая компания, специализирующаяся на решениях по анализу угроз для предприятий любого размера. Мы собираем, нормализуем, обогащаем информацию о киберугрозах со всего мира. Нашими источниками являют более 260 открытых фидов, более 100 открытых поставщиков Threat Intelligence-отчетов, открытые online sandbox, социальные сети и репозитории GitHub. Мы также предоставляем ряд сервисов по: семантическом анализу Threat Intelligence-отчетов и приведения их в машиночитаемый формат STIX 2.1, проверки IoC на потенциальные ложноположительные сработки, а также получению WHOIS-записей для доменных имен.
Комментарии:

Как мы обрабатываем данные: политика обработки персональных данных