Подделка межсайтовых запросов (CSRF)

Атака CSRF вынуждает аутентифицированного пользователя (жертву) отправить поддельный HTTP-запрос, включая cookie сеанса жертвы, в уязвимое веб-приложение, что позволяет злоумышленнику заставить браузер жертвы генерировать запрос, который уязвимое приложение воспринимает как законные запросы от жертва.

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

пример

Вот классический пример CSRF -

Step 1 - Допустим, уязвимое приложение отправляет запрос на изменение состояния в виде простого текста без какого-либо шифрования.

http://bankx.com/app?action=transferFund&amount=3500&destinationAccount=4673243243

Step 2 - Теперь хакер создает запрос, который переводит деньги со счета жертвы на счет злоумышленника, встраивая запрос в образ, который хранится на различных сайтах под контролем злоумышленника -

<img src = "http://bankx.com/app?action=transferFunds&amount=14000&destinationAccount=attackersAcct#" 
   width = "0" height = "0" />

Руки вверх

Step 1- Давайте выполним подделку CSRF, встроив Java-скрипт в изображение. Снимок проблемы приведен ниже.

Step 2 - Теперь нам нужно смоделировать передачу в изображение 1x1 и заставить жертву щелкнуть по нему.

Step 3 - После отправки сообщения оно отображается, как выделено ниже.

Step 4- Теперь, если жертва щелкает следующий URL-адрес, выполняется передача, которую можно обнаружить, перехватывая действия пользователя с помощью пакета burp. Мы можем увидеть перевод, заметив его в сообщении Get, как показано ниже -

Step 5 - Теперь при нажатии кнопки «Обновить» отображается отметка о завершении урока.

Профилактические механизмы

  • CSRF можно избежать, создав уникальный токен в скрытом поле, который будет отправлен в теле HTTP-запроса, а не в URL-адресе, который более подвержен раскрытию.

  • Принуждение пользователя к повторной аутентификации или доказательство того, что он является пользователем, для защиты CSRF. Например, CAPTCHA.