Пост канала
- фото
Cross-Site Leaks: как атакующий читает чужие данные через браузер 👋 Приветствую в мире цифровой безопасности! XS-Leaks - класс атак, где один сайт узнаёт информацию о юзере на другом сайте, не нарушая Same-Origin Policy напрямую. Разбираем как это работает ``👇 ⏺Браузер изолирует сайты: один не может прочитать ответ запроса к другому. Но атакующий может наблюдать за побочными эффектами: сколько времени занял запрос, произошла ошибка или нет, сколько редиректов случилось. По этим сигналам вытаскивается приватная информация. ⏺Timing атака: поиск на банковском сайте отвечает быстрее когда результатов нет и медленнее когда есть. Атакующий делает cross-origin запрос и замеряет время: async function probeBankSearch(query) { const start = performance.now(); try { await fetch('https://bank.com/search?q=' + query, { mode: 'no-cors', credentials: 'include' }); } catch(e) {} return performance.now() - start; } const time = await probeBankSearch('salary transfer'); Куки летят автоматически, ответ прочитать нельзя, но время можно. Если больше порога - результаты есть. ⏺Error oracle ещё проще. Многие сайты возвращают разные статусы для существующих и несуществующих ресурсов: function checkUserExists(userId) { const img = new Image(); img.onload = () => console.log('User exists'); img.onerror = () => console.log('404 or blocked'); img.src = `https://target.com/avatar/${userId}`; } Без CORP атакующий узнаёт существует ли пользователь, заблокирован ли аккаунт, есть ли у него определённая роль. ⏺Frame counting через history.length: если страница делает редиректы в зависимости от состояния - залогинен, не залогинен, заблокирован - количество записей в истории меняется: const win = window.open('https://target.com/dashboard'); setTimeout(() => { console.log(win.history.length); // отличается по числу редиректов win.close(); }, 2000); ⏺Что закрывает эти атаки: CORP на ресурсах убирает error oracle через img и script теги. COOP разрывает доступ к window.history открытого окна. Fetch Metadata позволяет серверу отклонять подозрительные cross-site зонды: Sec-Fetch-Site: cross-site Sec-Fetch-Mode: no-cors Сервер видит такой запрос к чувствительному эндпоинту и возвращает одинаковый ответ независимо от состояния - информационный сигнал исчезает. Во второй части расскажу о защите от подобных атак. 🤖Бесплатный ChatGPT
Открыть в MAX- Просмотры
- 357
- ER
- 0,6%
- Реакции
- 2