пользователя, браузер всякий раз пересылает этот фрагмент данных веб-серверу в составе HTTP- запроса Сервер Клиент Set-Cookie: name=value; expires=date; path=/; domain=.example.org; secure; httponly; Cookie: name=newvalue;
submit cookie Content-Type based protection Referer-based protection Password confirmation (websudo) SameSite Cookies (Chrome, Opera) You shall not pass!!! You shall not PASS!!!
6) Уникальный и высокоэнтропийный токен для каждой пользовательской сессии Токен вставляется в DOM или доступен через API Пользователь должен отправить токен в параметре или хэдере запроса Атакующий не знает токен → классическая CSRF-атака не работает
из 6) Уникальный и высокоэнтропийный токен для каждой пользовательской сессии помещается в cookies Пользователь должен отправить одинаковые значения в cookies и в параметре запроса Атакующий не может изменить cookies → классическая CSRF- атака не работает
из 6) Пользователь должен отправить запрос с определенным заголовком Content-Type, например application/json Браузер через форму или XHR не может отправить произвольный Content-Type cross-origin → классическая CSRF- атака не работает
6) Пользователь должен отправить запрос с определенным заголовком Referer Браузер не может отправить произвольный Referer через форму или XHR → классическая CSRF-атака не работает
(5 из 6) Действие либо доступ к критичному функционалу подтверждается вводом пароля (секрета) Атакующий не знает пароля → классическая CSRF-атака не работает
Opera (6 из 6) Дополнительный атрибут у cookies – samesite (значения lax и strict) Браузер не отправляет cookies, если запрос осуществляется с сайта атакующего → классическая CSRF-атака не работает
поддоменов foo.example.com уязвим к subdomain takeover или XSS Атакующий сможет обойти следующие типы CSRF-защиты: CSRF tokens Double submit cookie Content-Type based protection
Атакующий может загрузить файл с JS на foo.example.com Пример - https://ahussam.me/Amazon-leaking-csrf-token-using-service-worker/ <cross-domain-policy> <allow-access-from domain="*.example.com" /> </cross-domain-policy> Сценарий обхода – уязвимый субдомен (3 из 8)
от Adobe поддерживает FormCalc PDF plugin от Adobe работает в IE11 и Firefox ESR В FormCalc есть методы get() и post() Атакующий получает CSRF-токен жертвы
нас есть возможность загрузить PDF в веб- приложение (можно загрузить PDF как файл другого формата – картинкy ) У приложения есть API на интересующем домене, которое позволяет получать содержимое загруженного PDF
результате сookie injection сможет обойти защиту Double submit cookie Варианты cookie injection CRLF injection Особенности обработки cookie браузером – comma-separated cookies (Safari) Баги браузера (например, CVE-2016-9078 в FF)
= true; request.setRequestHeader("Content-type", "text/plain"); var data = ['0x80','0x01','0x00','0x01','0x00','0x00','0x00','0x07','0x67','0x65','0x74','0x55', '0x73','0x65','0x72','0x00','0x00','0x00', '0x00','0x0b','0x00','0x01','0x00','0x00','0x00','0x00','0x00']; var bin = new Uint8Array(data.length); for (var i = 0; i < data.length; i++) { bin[i] = parseInt(data[i], 16); } request.send(bin); </script> https://attacker.com/csrf-thrift.html Сценарий обхода – change Content-Type (6 из 8)
content type, которые можно отправить из HTML-формы и через XHR без OPTIONS preflight - aka simple content types text/plain application/x-www-form-urlencoded multipart/form-data
по 07.2017 Navigator.sendBeacon() позволял отправить POST-запрос с любым Content-Type на другой origin Сценарий обхода – non-simple Content-Type (7 из 8)
будет отправлен header Некоторые серверы воспринимают пробел как конец имени HTTP-заголовка (например, WildFly или Jboss) – т.е. двоеточие `:` Referer http://example.com Имя :Значение Referer http://example.com Имя :Значение
Referer-based SameSite Cookies XSS All All All All All Dangling markup All - - - All* Subdomain issues All All All - All* Cookie Injection - All - - All* Change CT - - All - All* Non-simple CT - - All with Flash plugin, IE11/FF ESR with Pdf plugin - All* Bad Pdf IE11/FF ESR with Pdf plugin - IE11/FF ESR with Pdf plugin - All* Spoof Referer - - - IE11/FF ESR with Pdf plugin, Edge All* All – works for all browsers All* – All browsers except browsers that support SameSite Cookies (Chrome & Opera)
отказаться от cookies Моделируйте угрозы и проверяйте реализацию (см. Итоговую таблицу) Имплементируйте SameSite Cookies Комбинируйте различные CSRF-защиты – defense in depth Спрашивайте у пользователя пароль для выполнения критичных action’ов Отдавайте загружаемые файлы с отдельного домена