Зачем нужен кеш?

Если сервер отправляет новый ответ на каждый HTTP-ответ, это может привести к перегрузке сервера, поскольку ответ может содержать изображения, видео и т. д., перегрузка сервера означает, что производительность веб-сайта не будет снижена, и это повлияет на пользователей.

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

Отравление веб-кеша

Яд веб-кеша может представлять серьезную угрозу для пользователя. Если злоумышленник смог отравить кеш сервера, добавив некоторые вредоносные скрипты или полезные данные, они могут быть выполнены, если кэшированная версия страницы обслуживается пользователем.

Всегда есть два условия, которым нужно соответствовать, чтобы воспользоваться этим.

1. Злоумышленнику потребуется способ отравить кеш ответа, который может содержать некоторые сценарии или полезные данные, которые могут быть выполнены. Например, полезная нагрузка, которая перенаправляет пользователя на вредоносный веб-сайт, или полезная нагрузка, которая крадет файлы cookie пользователя.

Также существует определенный «возраст» кеша, это означает, что страницу можно кэшировать только на это указанное время. Если пользователь перезагружает страницу после того, как время истекло, он отправит запрос на внутренний сервер для получения новой версии страницы.

На снимке экрана ниже мы видим заголовок «Возраст»:

Работает

я. Пользователь начинает посещать любое приложение в первый раз, поэтому запрос отправляется на сервер для получения ресурса запроса.

II. Приложение использует кеширование для более быстрого ответа.

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

iv. Если пользователь повторно посещает одну и ту же страницу в указанном возрасте кеша. Пользователь получит кешированную версию страницы, и запрос не отправится на внутренний сервер для обработки.

Эксплуатация:

Во время тестирования приложения я обнаружил, что приложение использует кеш, чтобы уменьшить перегрузку на сервере. Итак, я начал искать уязвимости, чтобы отравить кеш

Поскольку я все еще проверял приложение, я обнаружил, что пользователю «fehost» назначен файл cookie, а значение файла cookie было «prod-cache-01».

Это печенье кажется мало интересным. Значение cookie отражается в ответе. Похоже, что cookie был ответом или указывал на внешний кеш-сервер, и это можно было бы использовать для получения ответа с кеш-сервера, а не с внутреннего сервера.

Когда я изменил значение файла cookie, это же значение было отражено в ответе.

Чтобы отравить кеш, мы должны запросить ответ с сервера, отправив пару последующих запросов с измененным значением cookie. Как только я отправляю 3–4 последовательных запроса, происходит попадание в кеш и страница обслуживается из кеша.

В ответ я также заметил заголовок «Возраст», который обычно не отображается в заголовке ответа.

Это дало мне понять, что кеш может быть отравлен простой полезной нагрузкой XSS для первоначального тестирования. Итак, я начал отправлять некоторую полезную нагрузку XSS в «fehost».

Таким образом, полезная нагрузка, которую я использовал для заражения кеша с помощью JS, - это «-alert (1) -»

Я отправил 3–4 запроса от Burp, а затем пошел дальше, чтобы браузер обновил страницу, и страница была сервером из кеша, и XSS был выполнен.

Исправление

· Убедитесь, что вводимые пользователем данные без какой-либо очистки не используются в последующем HTTP-запросе.

· Вводимые пользователем данные не должны отражаться в ответе без какой-либо очистки.

· Если вы используете кеширование, реализуйте его только на статической веб-странице или страницах, обслуживающих статическое содержимое.