3. OWASP 3
Unsafe cross origin resource sharing
Same Origin Policy для XMLHttpRequest
Origin: https://site1.com
Web-
APP
Server – site1.com
Server – site2.com
Browser
https://site1.com
XMLHttp
4. OWASP 4
Unsafe CORS - JSONP
Для GET запросов можно использовать JSONP
GET /api?callback=func HTTP/1.1
…
HTTP/1.1 200 OK
…
func({“token”:”secret_token”})
5. OWASP 5
Unsafe CORS - JSONP
Для GET запросов можно использовать JSONP
• если не передаются чувствительные данные
• для чувствительных данных использовать
AJAX
Для пентестеров:
• пробовать подбирать callback-параметр
(callback, cb, _cb, jsonp и т.п.)
6. OWASP 6
Unsafe CORS - Access-Control-Allow-Origin
• При кросс-доменном AJAX-запросе браузер шлёт запрос с
заголовком Origin
• Если у объекта класса XMLHttpRequest установлено
withCredentials=true, браузер отсылает куки и
сертификаты
• Браузер должен вернуть заголовки.
Access-Control-Allow-Origin: *
или
Access-Control-Allow-Origin: <origin>
Access-Control-Allow-Credentials: true
• Ещё заголовки
Access-Control-Request-Method
Access-Control-Request-Headers
7. OWASP 7
Unsafe CORS - Access-Control-Allow-Origin
Ошибки, приводящие к уязвимости:
• Отражение любого Origin
8. OWASP 8
Unsafe CORS - Access-Control-Allow-Origin
Ошибки, приводящие к уязвимости:
• Отражение любого Origin
• /http(s)://example.com/
9. OWASP 9
Unsafe CORS - Access-Control-Allow-Origin
Ошибки, приводящие к уязвимости:
• Отражение любого Origin
• /http(s)://example.com/ -> https://example.com.evil.com
10. OWASP 10
Unsafe CORS - Access-Control-Allow-Origin
Ошибки, приводящие к уязвимости:
• Отражение любого Origin
• /http(s)://example.com/ -> https://example.com.evil.com
• /^http(s)://sub.example.com$/
11. OWASP 11
Unsafe CORS - Access-Control-Allow-Origin
Ошибки, приводящие к уязвимости:
• Отражение любого Origin
• /http(s)://example.com/ -> https://example.com.evil.com
• /^http(s)://sub.example.com$/ -> https://sub-
example.com
12. OWASP 12
Unsafe CORS - Access-Control-Allow-Origin
Ошибки, приводящие к уязвимости:
• Отражение любого Origin
• /http(s)://example.com/ -> https://example.com.evil.com
• /^http(s)://sub.example.com$/ -> https://sub-
example.com
• Проверка только http-протокола. Возможность
использовать ftp://evil.com в качестве origin
Необходимо использовать белый список
разрешённых origin'ов
13. OWASP 13
Client side template injections
• AngularJS, Backbone.js, Ember и т.д.
• представление (view) должно отдаваться статикой
• логика приложения реализована через клиентские
контроллеры, общающиеся с серверным API
• TI возникает при попытке сделать представления
динамичными
• шаблонные выражения чаще всего имеют вид
{{5*5}}, [[5*5]], <%5*5%> и т.п.
• Побег из песочницы -> классический XSS, но не
всегда есть способ сбежать
14. OWASP 14
Client side template injections
Не всегда нужно пытаться сбегать
• в контроллере может быть реализована функция, которая
сможет помочь (смена пароля, эл. почты, подтверждение
OAuth регистрации и т.п.)
Пентестерам
• добавить в свои пейлоады выражения типа {{14.6-1.3}},
[[14.6-1.3]] и т.п., а в DOM-дереве документа искать 13.3
• если есть, попытаться выйти из песочницы
• не вышло - изучить контроллеры
Программистам
• стараться не использовать динамику в шаблонах
• если невозможно, использовать ng-non-bindable и
аналоги
15. OWASP 15
Server side template injection
• Уязвимость возникает, когда пользовательский
ввод помещается в шаблон
• PortSwigger https://goo.gl/NoKhqe
16. OWASP 16
Server side template injection
Как защищаться?
• не передавать пользовательский ввод в
шаблон
• если это необходимо, использовать простые
шаблонизаторы (Mustache)
• использовать песочницу (виртуализация
через Docker, песочницы средствами языка)
Пентестерам
• Github: epinna/tplmap; Burp Suit Pro
17. OWASP 17
Server side request forgery
• Возникает, когда пользователь может указать
серверу внешний ресурс, куда нужно
обратиться
• скачивание файлов с других серверов по
http
• проксирование API
• скачивание и загрузка файлов по FTP и т.п.
• http://example.com/download?url=http://
example.net/img.jpg
18. OWASP 18
Server side request forgery
Чем это опасно?
• http://example.com/download?url=http://localhost/
server-status
• http://example.com/download?url=dict://
10.0.1.2:11211/stat
• http://example.com/download?url=http://
169.254.169.254/latest/meta-data/
• http://example.com/download?url=file:///etc/passwd
• 0.0.0.0, [::], http://u:p@evil.com?@example.com/ и
т.д.
• DNS rebinding
19. OWASP 19
Server side request forgery
Предположим, что мы сделали белый список доменов и протоколов
• http://example.com/download?url=http://evil.com/?redirect=file:///etc/
passwd
Пентестерам
• разобраться в типе фильтрации, в случае отсутствия белого списка
пробовать обходы
• использовать open redirects
• Программистам
• использовать белые списки
• не следовать за перенаправлениями, но если необходимо, то
проверять каждый новый URL
• использовать готовые решения. Для PHP: fin1te/safecurl
20. OWASP 20
Unsafe deserialization
• Для сохранения состояния объекта их
предварительно сериализуют - приводят к
набору байтов (строке)
• При обратном преобразовании объект
создаётся заново, при этом происходит
"магия" – вызываются конструкторы и
некоторые другие методы
• Правильно составленная сериализованная
строка может привести к RCE, утечке данных и
т.п.
21. OWASP 21
Unsafe deserialization
JAVA
• "Волшебные байты" 0xAC 0xED (base64: rO0)
• Могут находиться в HTTP запросах (Cookie,
параметры и т.д.), Java RMI протокол, RMI over
HTTP
• XStream - сериализация в XML. Позволяет
сериализовать даже несериализуемые классы.
• Очень подробный cheat shit на Github: GrrrDog/
Java-Deserialization-Cheat-Sheet
22. OWASP 22
Unsafe deserialization
PHP
• Пример объекта:
O:3:"foo":2:{s:4:"file";s:9:"shell.php";s:4:"data";s:
5:"aaaa";}
• После десериализации вызываются методы
__wakeup() и __destruct()
• При наличии исходного кода, можно найти классы,
содержащие опасный код в этих методах
• CVE-2014-8142 и CVE-2015-0231 (<5.4.36, <5.5.20,
<5.6.4)
• https://www.owasp.org/index.php/PHP_Object_Injection
24. OWASP 24
Unsafe deserialization
Пентестерам
• держать в голове то, как выглядят
серилиазивонные объекты в разных языках.
• многие сканеры успешно сигнализируют о
таких
Программистам
• Никогда не десериализировть объекты из
недоверенных источников
25. OWASP 25
Race conditions
• Возникает, когда несколько потоков могут изменять с
один и тот же объект без блокировки
• Возможность записи в один и тот же файл, сокет и т.п.
• Изменение финансовых записей без применения
транзакций и блокировок (оплата нескольких заказов,
многократное применение купонов и т.п.)
• Места, где присутствуют
ограничения на ресурсы
(количество пользователей,
документов и пр.)
27. OWASP 27
Subdomain takeover
• Поддомены привязываются к сервисам с
помощью A или CNAME записи
• Heroku, Github, Amazon S3, Unbounce,
Wordpress, Google services etc.
• Сервисы перестают использоваться, атакующий
регистрирует сервис и добавляет поддомен
себе в учётную запись.
• Phishing, XSS, обход белых списков.
Пентестерам
• recon-ng, altdns, cloudflare и т.д.
28. OWASP 28
AWS s3 buckets
• Amazon s3 bucket позволяет хранить и
отдавать статические файлы
aws s3 ls s3://bucket-name
aws s3 mv test.txt s3://bucket-name
aws s3 sync s3://bucket-name/path .
• Могут содержать бэкапы, пользовательские
данные
• Возможно использовать для фишинга, обхода
фильтрации