Взлом CSRF токенов с использованием CSS History Hack

Обновление: исследователи безопасности Sirdarckcat и Gareth были любезны поделиться здесь кодом для искателя токена CSRF на основе чистого CSS. Это хитрее, чем мой PoC ниже, который использовал комбинацию JS и CSS. Таким образом, он все равно будет работать, даже если вы отключите JavaScript, и вы больше не в безопасности :(:( . Чтобы сделать этот PoC более отзывчивым к клиенту, вам нужно использовать несколько таблиц стилей CSS с помощью команды import. Единственная проблема, которую я вижу с этим подходом, основанным исключительно на CSS, заключается в задержке сети, связанной с большими пространствами ключей, потому что ваша большая таблица стилей CSS должна быть загружена вашим браузером..


Я думал о проблеме подделки межсайтовых запросов и текущих стратегиях смягчения, используемых в промышленности. Во многих реальных приложениях, которые я тестировал до сих пор, я вижу использование случайных токенов, добавленных как часть URL. Если в запросе не указан токен или токен с неверным значением, запрос отклоняется. Это предотвращает выполнение CSRF или любых междоменных несанкционированных функций.

До сих пор считалось невозможным, чтобы злоумышленник обнаружил ваш CSRF-токен с помощью Brute Force Attacks на сервере..

Причины:

  1. Генерирует много шума в сети и медленно. Поэтому, скорее всего, брандмауэр IDS или Web App обнаружит вредоносное поведение и заблокирует ваш ip. Например, токен BaseR CSRF длиной 5 символов (начиная с символа) будет генерировать примерно 393 216 запросов..
  2. Многие приложения запрограммированы на сделать вашу сессию недействительной после того, как он обнаружит более определенного количества запросов с недопустимыми значениями токена. Например. 30.

Я собираюсь изменить это убеждение, показав вам технику для быстрого поиска токенов csrf без генерации предупреждений. Эта техника является атака на стороне клиента, таким образом, почти не генерируется сетевой трафик, и, следовательно, ваш сервер и брандмауэры IDS / Web App выиграли’вообще не замечаю. Эта атака основана на популярном хакере CSS History, найденном Джеремией Гроссманом 3 года назад.

В этом эксплойте мы обнаруживаем токен csrf путем грубого форсирования различных наборов URL в истории браузера. Мы попытаемся встроить различные значения токена csrf как часть url и проверим, посетил ли пользователь этот URL. Если да, есть большая вероятность, что пользователь либо использует тот же токен CSRF в текущем активном сеансе, либо мог использовать этот токен в предыдущем сеансе. Получив список всех таких токенов, мы можем просто попробовать нашу атаку csrf на сервер, используя этот небольшой список. В настоящее время эта атака возможна для токенов длиной 5 символов или короче. Я попробовал это на строке base16 длиной 5 и смог перебрать все пространство клавиш менее чем за 2 минуты.

Некоторые из предпосылок для этой атаки являются либо

  1. Маркер CSRF остается неизменным для определенного сеанса пользователя. например csrf token = hash (session_id) ИЛИ
  2. Токен CSRF, представленный в старых формах для того же сеанса, принимается. Много раз, это так, поскольку это улучшает пользовательский опыт и позволяет использовать кнопки браузера вперед и назад.

Доказательство концепции доступен здесь.
Перед запуском PoC необходимо изменить значения параметров url и csrftoken.

Для тестирования с использованием значений по умолчанию вам необходимо сначала посетить один из следующих URL, например,.

  1. https://securethoughts.com/?param1=val1&csrftoken = b59fe [заменить b59fe на любую 5-значную строку из 16 основных чисел, начинающуюся с символа, т. е. больше, чем a0000]
  2. http://tinyurl.com/l2lwgd [301 редирект на предыдущий URL].

Замечания: http://www.secure сбоку и https://secure Сбоку при обработке в истории браузера обрабатываются по-разному.

Примерный прогон будет выглядеть так -

взлом токенов csrf с использованием взлома css historyвзлом токенов csrf с использованием взлома css history

Для того, чтобы сделать эту атаку невозможной,

Серверное решение (для разработчиков):

  • Сделайте свои токены CSRF достаточно длинными (8 или более символов), чтобы быть невозможным для атаки КЛИЕНТА. Постоянно увеличивающаяся вычислительная мощность сделает эту атаку возможной и для более длинных токенов..
  • Храните свой токен CSRF как часть скрытого поля формы, а не вставляя URL.
  • Используйте разные случайные токены для каждой отправки формы и не принимайте устаревшие токены даже для одного сеанса.

Решение на стороне клиента (для ваших клиентов / пользователей):

  • Используйте плагин браузера, такой как SafeHistory, который защищает от методов отслеживания посещенных ссылок.
  • Используйте режим приватного просмотра в вашем браузере.

И последнее, но не менее важное: XSS уничтожает все возможные меры защиты CSRF. Итак, сначала избавьтесь от XSS.

Я хотел бы поблагодарить Иеремию за предоставление его проницательного отзыва на этот пост.

Brayan Jackson Administrator
Candidate of Science in Informatics. VPN Configuration Wizard. Has been using the VPN for 5 years. Works as a specialist in a company setting up the Internet.
follow me
Like this post? Please share to your friends:
Leave a Reply

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

55 + = 62

map