ã€ã³ãã
å°ãåãç§ã¯äŒè°FrontendConf 2015 ïŒRIT ++ïŒã§ãã®èšäºã®ãããã¯ã«ã€ããŠè©±ããŸããã ãããŠãã¬ããŒããæºåããéã«ã圌ã¯æ å ±ãæ¢ãå§ããŸããããããŠã誰ããã®ãããã¯ã«ã€ããŠè©±ããçŸåšãŠã§ãäžã«ãããã®ã§ãã話ããŸããã
Googleã®Mike Westããã®ã¬ããŒãmikewest.org/2013/09/frontend-security-frontendconf-2013ã«èšåã§ããæ å ±ã¯ã»ãšãã©ãããŸããã§ããããããçš®ã®ãéãã³ãã¹ã¿ãŒãã®å€èŠ³ãšéåžžã«å°ãªãè³æã§ããããšãå€æããŸããã ãŸãã www.slideshare.net / eoftedal / web-application-security-in-front-endã§ã¯ ããããã¯ããã詳现ã«é瀺ãããŠããŸããã2011幎ã®ãã¬ãŒã³ããŒã·ã§ã³ã§ãã ãããŠ4幎éããã¯ãããžãŒãšæ»æã¯æ¢ãŸããŸããã§ããã
ãããã¯ãéžæããé·ãå°é£ãªæéãããã³ããšã³ãéçºè ã«ã»ãã¥ãªãã£ã«ã€ããŠäœãäŒããã¹ãããå°ãªããšãããã¯ãšã³ãã«è§ŠããïŒããã¯äžå¯åã§ãïŒã®ã§ãã¬ããŒããåãåããŸããã
äŒè©±ã¯äœã§ããïŒ
ããããæ¬åœã«ãããã§äœã«ã€ããŠè©±ããŸããïŒ ãããã³ã°ãšã»ãã¥ãªãã£ã«ã€ããŠèšãã°ããããã¯æããæãæµ®ãã³ãŸã-圌ãã¯ããŒã¿ããŒã¹ãæŒããããµãŒããŒäžã§OSã³ãã³ããå®è¡ããããã®ã¢ã¯ã»ã¹ãåŸãŠãä»ã®èª°ãã®éä¿¡ãèªã¿ãŸããã ããããããã¯ãã¹ãŠãµãŒããŒåŽã®ã³ãŒãã§ãã ãããŠãããã³ããšã³ãããæåç·ãã«ã§ãããã®ã¯äœã§ããïŒ ãã¡ãããäž»ãªå±éºã¯ãæ»æå ã®SOP-Same Origin Policyããã€ãã¹ããããšã§ããããã¯ãç°ãªãOriginã§ã®äœæ¥ãèŠå¶ããäž»èŠãªãã©ãŠã¶ã»ãã¥ãªãã£ããªã·ãŒã§ãã ã ãã§ãªããç解ããŸãããã
Crossiteã¹ã¯ãªãã

ã¯ãã¹ãµã€ãã¹ã¯ãªããã£ã³ã°
XSSãããã¯ã¯ã§ããéãæ©ãåé€ãããŸãããéåžžã¯ãµãŒããŒåŽã§ã®ãã©ã¡ãŒã¿ãŒã®äžé©åãªåŠçã®åé¡ã§ãïŒæ»æè ã¯ããŒãžã«JSã³ãŒããåã蟌ã¿ãè匱ãªãªãªãžã³ã«ä»£ãã£ãŠè¢«å®³è ã®ãã©ãŠã¶ãŒãå«ããããå®è¡ã§ããçµæã¯SOPãã€ãã¹ã§ãïŒã ãããŠã2çš®é¡ã®XSSæ»æãå²ãåœãŠãŸãã-ä¿åïŒãæªæã®ãããjsã¯ãµãŒããŒã«ä¿åãããŸãïŒããã³åæ ïŒä¿åããã«ãµãŒããŒã«ãã£ãŠäžããããŸãïŒã
ããŠãããã³ããšã³ãã¯ã©ãã§ããïŒ ãŸããå¥ã®ã±ãŒã¹ããããŸã-æ»æè ã®JSã¯ãµãŒããŒã«éä¿¡ãããŸãããïŒäŸå€ã¯ãããŸãããããã§ã¯ãããŸããïŒãæ£åœãªJSã³ãŒãã®ããã«DOMã«åã蟌ãŸããŸãã ãããã£ãŠãXSSæ»æã®3çªç®ã®ã¿ã€ãã®ååã¯DOM XSSã§ãã
è匱ãªJSã³ãŒãã®å žåçãªäŸïŒ
document.write("Site is at: " + document.location.href);
ããã§ããŒãžãéããŸã
http://victim.com/action#<script>alert('xss')</script>Ñ
JSã¯ãå€document.location.hrefãããªãŒã«è¿œå ããããã«ãæªæã®ãããjsãæ¿å ¥ãããŸãã ãã®äŸããæ¢ã«ãããããã«ããã®ã¿ã€ãã®æ»æã®ãã¯ãã«ãæ€çŽ¢ããã«ã¯ããŠãŒã¶ãŒã®ãã©ãŠã¶ãŒã«äœãã圱é¿ãããïŒãœãŒã¹ïŒãšäœããã®åœ¢ã§å®è¡ããïŒã·ã³ã¯ïŒã®2ã€ã®ããšãå¿ èŠã§ãã
ãœãŒã¹ã®äŸïŒ
- document.URL
- å Žæ
- document.referrer
- window.name
- localStorage
- ã¯ãããŒ
ã·ã³ã¯ã®äŸ
- è©äŸ¡ãã
- document.write
- ïŒèŠçŽ ïŒ.innerHTML
- ïŒèŠçŽ ïŒ.src
- setTimeout / setInterval
- execScript
ãã®ãããã¯ã®è©³çŽ°ã«ã€ããŠã¯ããªã³ã¯ïŒ code.google.com/p/domxsswiki ïŒããã³ããããã¬ã®ã¥ã©ãŒã·ãŒãºã³ã«é²ãã§æœåšçãªè匱æ§ãæ€çŽ¢ããŠãã ããïŒããã³habrahabr.ru/company/xakep/blog/189210 ïŒååã®Alexei Tyurinããã®èšäºïŒã«åŸã£ãŠãã ããã
ãããŠããããtwitter.comã®è匱ãªïŒå®éã®ïŒã³ãŒãã®äŸã§ãïŒè©³çŽ°ïŒ
(function(g){var a=location.href.split("#!")[1];if(a){g.location=g.HBR=a;}})(window);

twititer.comã§ã®XSS DOMã®äŸ
æ å ±æŒæŽ©
JS / CSSãã¡ã€ã«ã«ã¯ãã·ã¹ãã ã€ã³ãã©ã¹ãã©ã¯ãã£ã«é¢ããæ å ±ãå«ãŸããŠããããšããããããŸãã
JavaScriptã«ã€ããŠ
ãããžã§ã¯ããéåžžã«å€§ãããªããã¢ããªã±ãŒã·ã§ã³ã®ããŸããŸãªç°å¢ïŒtest / dev / prodïŒãéå§ããããšãæŸèæãå§ãŸããã¯ã©ã€ã¢ã³ããå«ããäœæ¥ãå¿ èŠãªç°å¢ãå®çŸ©ãããŸãã
ãã®ãããªå®éã®ãã¡ã€ã«ã®äŸã mail.ru-img.imgsmail.ru/r/webagent/release/loader.js
var dl = (''+document.location), host = document.location.host, branch = 'master', path = 'release/467', base = 'r/webagent/', probability = [ {"branch": "wa-514", "deprecated":1} ], lastForcedVersion = '20131126154524', isLocalhost = dl.indexOf('localhost') != -1, testServer = host.match(/[^.]+\.((?:f|my\.rapira)\d*)\.mail\.ru/), devServer = host.match(/^.+\.dev\.mail\.ru$/), isRapira = testServer && testServer[1].indexOf('my.rapira') == 0, utf = true,//!!window.IS_UTF, domainProps = {}, domain = '//img.imgsmail.ru', login = getUserLogin(), useBranch = (dl.match(/\Wwa_use_branch=([a-z0-9-]*)/i)||[0,false])[1], useLang = (dl.match(/\Wwa_lang=([az]{2})/i)||[0,false])[1], useOnce = (dl.match(/\Wbranch=([a-z0-9-]*)/i)||[0,false])[1], appVersion = (dl.match(/\Wwa_appver=([\.0-9]*)/i)||[0,false])[1], usedBranch = branch;
ãã®ãã¡ã€ã«ãããããããã«ãå®æçãªééã§ãã¹ããšéçºãè¡ãããã«ããã¡ã€ã³ã決å®ã§ããŸãïŒãããŠæå¹ãªãã¡ã€ã³ãåé€ããŸããïŒïŒã ãã®å Žåãæ å ±ã¯ããã»ã©éèŠã§ã¯ãªããããããŸãããïŒããããã°-mail.ruã¯ç¥ã£ãŠããŸãïŒãæã«ã¯ãã®ãããªæ§é ããããŸãïŒ
internalDevHOST = '172.16.22.2'; internalProdHOST = '172.16.22.5';
ãŸããå€éšIPã䜿çšããå ŽåããããŸãïŒããšãã°ãå éšIPã¯SSRFã§ã圹ç«ã¡ãŸãïŒã
CSS
CSSã§ãåãã§ãã ãããžã§ã¯ãã¯æé·ããŠãããéçºè ã¯ããŸããŸãªããã«ããŒãã䜿çšãå§ããŠããŸãããããã®ãã«ããŒã¯ãããšãã°hackerone.com/reports/2221ãªã©ã®ããããããæ å ±ãæ®ããŠããŸãã
file\:\/\/\/applications\/hackerone\/releases\/20140221175929\/app\/assets\/stylesheets\/application\/browser-not-supported\.scss file\:\/\/\/applications\/hackerone\/releases\/20140221175929\/app\/assets\/stylesheets\/application\/modules\/add-category\.scss file\:\/\/\/applications\/hackerone\/releases\/20140221175929\/app\/assets\/stylesheets\/application\/modules\/alias-preview\.scss ...
MVCãã¬ãŒã ã¯ãŒã¯
AngularJSãKnockoutãEmberJSãªã©ãããŸããŸãªJS MVCãã¬ãŒã ã¯ãŒã¯ã®äººæ°ãé«ãŸã£ãŠããŸãã ãããã¯éåžžã«ã¯ãŒã«ã§ãDOMã䜿çšããäœæ¥ã®æ¡å€§ãæ°ããèŠçŽ ã®äœæïŒïŒãããã€ã³ããŒãã®äœæãªã©ãå¯èœã«ããŸãã åœç¶ã®ããšãªãããæ°ãããã®ã¯ã»ãã¥ãªãã£ã®äžçã«æ°ä»ãããããšãªãééã§ããŸããã§ããã
ç¹ã«ãããžãã¯ã®ãªããã³ãã¬ãŒãã«èå³ããããŸãã
<ul> <li ng-repeat="phone in phones"> <span>{{phone.name}}</span> <p>{{phone.snippet}}</p> </li> </ul>
ã³ããŒã¢ã³ãããŒã¹ãã®æ°ãå€§å¹ ã«åæžããæ¬åŒ§å ã®æå®ãããå€æ°ã«å€ãå²ãåœãŠãããšãã§ããŸãã
ãŸãã¯ããã©ã±ããã90°å転ããããšå£ã²ããçããŸãã å£ã²ãïŒ mustache.github.io

MVCãã¬ãŒã ã¯ãŒã¯ã®ã»ãã¥ãªãã£ã«é¢ããå£ã²ãã»ãã¥ãªãã£ãããžã§ã¯ãcode.google.com/p/mustache-securityã®ç»å Žã§ãã ãã§ã«æ¬¡ã®æ å ±ããããŸãã
- Vuejs
- Angularjs
- Canjs
- Underscore.js
- ããã¯ã¢ãŠã
- Ember.js
- ããªããŒ
- Reactive.js
- jQuery
- Jsender
- å£éUI
ããã§ã¯ãããã§äœãèµ·ããã®ã§ããããïŒ AngularJSã䜿çšããŠãã ããã ããšãã°ãæ»æè ããããã®ãã£ãå ã«å ¥ã£ãã ãã®ç¶æ³ããããŸãã ãããŠããã®ãã¡ã®äœãšãããŠJSãå®è¡ããå¿ èŠããããŸãããããã¯ããã©ã«ãã§ã¯äžå¯èœã§ãã ã¿ã¹ã¯ã¯ããµã³ãããã¯ã¹ãåé¿ããããšã§ãã
AngularJSã䜿çšããäŸïŒ1.1.5ïŒ
<div class="ng-app"> {{constructor.constructor('alert(1)')()}} </div>
ãã®ãããAngularJS <1.1.5ã®ããŒãžã§ã³ã§ã¯ãŸã ããã»ã©è€éã§ã¯ãããŸãããããµã³ãããã¯ã¹ããåºãŠããŠã£ã³ããŠãªããžã§ã¯ãïŒäžèšã®äŸã§ã¯ãã¢ã©ãŒãïŒ1ïŒãåŒã³åºãã ãïŒããã©ãŠã¶ãŠã£ã³ããŠå šäœã«ãå°éãããããšãã§ããŸããã Googleã¯ä¿®æ£ããã°ã©ã ããªãªãŒã¹ãã...
AngularJSïŒ1.2.18ïŒãä¿®æ£åŸ
{{ (_=''.sub).call.call({}[$='constructor'].getOwnPropertyDescriptor(_.__proto__,$).value,0,'alert(1)')() }}
åžæããã¢ã©ãŒãïŒ1ïŒãåä¿¡ããŸããïŒ
ããã§ç§ã¯äœãããŠããŸããã ãã¬ãŒã ã¯ãŒã¯ã®æŽæ°ã¯ãæ©èœã ãã§ãªããã»ãã¥ãªãã£ã«ãšã£ãŠãéèŠã§ãïŒ
ã¯ãããŒ
ãã®ç¹ãèæ ®ããŠãç§ãã¡ã¯ãã§ã«å°ããªããã¯ãšã³ãã«è§Šãå§ããŠããŸãã ããããããªãã
éåžžããµãŒããŒåŽã§ã©ã®ããã«ã¯ãããŒãèšå®ããŸããïŒ
PHPã®äŸïŒ
<?php setcookie('foo','bar1'); ?>
Pythonã®äŸïŒ
import Cookie C = Cookie.SimpleCookie() C["foo"] = "bar" print C
æåãš2çªç®ã®ã±ãŒã¹ã®äž¡æ¹ã§ããµãŒããŒã¯ããããŒã§å¿çããŸãïŒ
Set-Cookie: foo=bar
ã€ãŸã ãã©ãŠã¶ã«æ瀺ããŠãããŒã®å€ãfooããŒã«èšå®ããŸãã ããããããªãã¯ãããçèãããã§ãã¯ãªã¹ãã§èªåèªèº«ããã§ãã¯ããå¿ èŠããããŸãïŒ
- Cookieãèšå®ãããã¡ã€ã³ãæå®ããŸãã äžèšã®äŸã§ã¯ãIEã¯çŸåšã®ãµããã¡ã€ã³ãšãã¹ãŠã®ãµããã¡ã€ã³ã®äž¡æ¹ã«Cookieãèšå®ããŸãã ã€ãŸã XSSãäœããã®ãå·Šããµããã¡ã€ã³ã§èŠã€ãã£ãå ŽåãããŒã¿ãå±éºã«ãããããå¯èœæ§ããããŸãã 詳现
- ã»ãã·ã§ã³å€ã®HttpOnlyãã©ã°ïŒããšãã°ãphpsessidãããã©ã«ããªãïŒã ãã©ãŠã¶ã¯ãJSãããã®å€ãžã®ã¢ã¯ã»ã¹ãçŠæ¢ããå¿ èŠããããŸãïŒXSSã䜿çšãããšããŠãŒã¶ãŒã¢ã«ãŠã³ãã®çé£ã®ãªã¹ã¯ã軜æžãããŸãïŒ
- ãµã€ããHTTPSã§ã®ã¿åäœããå®å šã§ãªããã£ãã«ãä»ããŠéèŠãªå€ãéä¿¡ããå¿ èŠããªãå Žåã®ã»ãã¥ã¢ãã©ã°
HTTPSã«åãæ¿ãã
3çªç®ã®æ®µèœã§ã¯HTTPSã«ã€ããŠèª¬æããŸããã ãã©ãŠã¶ã§ã®äœæ¥ãæ£ç¢ºã«ç®çãšããŠãããããããã«ã€ããŠèª¬æããŸãã å«ã éåžžã移è¡ã¯ãµãŒããŒç®¡çã®åé¡ã§ã-蚌ææžã®éžæãWebãµãŒããŒã®ã»ããã¢ãããæºåãã§ããã-HTTPããHTTPSãžã®ãªãã€ã¬ã¯ã
人çã§èµ·ããããã«ã 管çè ã¯ãHTTPSäžã®HTTPçµç±ã§ãµã€ãã«å ¥ããšãã«ãªãã€ã¬ã¯ããèšå®ããŸãã ãããããã®ç¬éããŠãŒã¶ãŒã¯æåã«HTTPçµç±ã§ãã°ã€ã³ããŸãããã®æç¹ã§ããŠãŒã¶ãŒã«HTTPSããŒãžã§ã³ã®ãµã€ããæäŸããã«ãHTTPSããã³ãããã·ãã©ãã£ãã¯ãžã®ãªãã€ã¬ã¯ããããã«ããããããã§ããŸãã
ãªã人ã ã¯HTTPçµç±ã§ããµã€ãã«ã¢ã¯ã»ã¹ããã®ã§ããïŒ èª°ããããã¯ããŒã¯ã«ãããæã£ãŠããã®ã§ããã¹ãŠãHTTPçµç±ã§ããããŸãã
coolstoryã«æ°ãåããã:)

ã¹ããŒãªãŒã¯ãã®åçã®ããäžã«ãããŸãã
ç§ã¯ãææã®ãVKã«ã€ããŠè©±ããã«ã¯ããããŸããã çŸåšãVKã®ã¢ã«ãŠã³ãã®ããã€ãžã£ãã¯ãã®æ³¢ã¯éãå»ããå¢ããå¢ããŠããŸãã ã»ãšãã©ã®å Žåããããã¯ãVKã¢ãã¬ã¹ãç°ãªãä¿®æ£ãããDNSãµãŒããŒãã€ãŸããæªæã®ããæ»æè ã®æªæã®ãããµãŒããŒããæã€ãããã³ã°ããããŠãŒã¶ãŒã«ãŒã¿ãŒïŒã«ãŒã¿ãŒã«ååãªè匱æ§ããããŸãïŒã§ãã ãŠãŒã¶ãŒã¯ãã®ããªãã¯ã䜿çšããã ãã§ããŠãŒã¶ãŒã¯ãµã€ãã®HTTPSããŒãžã§ã³ã«ã¢ã¯ã»ã¹ããŠãªãã€ã¬ã¯ããããããããããããšã¯ã§ããŸããããŠãŒã¶ãŒã¯ãŸã HTTPããŒãžã§ã³ã§ããã¯ããŒã¯ããããµã€ããæã£ãŠããããã§ãïŒh_ttpsããŒãžã§èŠãïŒ//vk.com/settingsïŒAct = securityãŸã 匷å¶HTTPSã§ã¯ãããŸããïŒã
ããã§ãã©ã®ããã«æ²»çããã®ã§ãã
ãããè¡ãããã«ãHSTSããããŒãçºæããŸãã
Strict-Transport-Security: max-age=31536000;
HTTPãä»ãããã®ãµã€ããžã®èŠæ±ã¯ãããªãããšããã©ãŠã¶ã«äŒããŸãã ãã®ã«ãŒã«ãæ©èœããæéãæå®ããŸãïŒãªãã·ã§ã³ã§ããã®ã«ãŒã«ã®ãµããã¡ã€ã³ãžã®é åžãæå®ã§ããŸãïŒã
åŠæ³ã¢ãŒãããªã³ã«ããŠãåããŠãµã€ãã«ã¢ã¯ã»ã¹ãããšãã«ãã©ãã£ãã¯ãã€ã³ã¿ãŒã»ããããããŠãŒã¶ãŒããã®ããããŒãåä¿¡ããªããšããç¶æ³ãæ³åãããšãHSTSããªããŒããªã¹ãã«ãªãœãŒã¹ãè¿œå ã§ããŸã-www.chromium.org/hsts ããã©ãŠã¶ãåžžã«ã¢ã¯ã»ã¹ãããªãœãŒã¹ã®ãªã¹ãHTTPSçµç±ã§ã¢ã¯ã»ã¹ããŸãïŒã€ãŸãããªãœãŒã¹ã®ãªã¹ãã¯ãã©ãŠã¶ãŒã«çŽæ¥ãæ¥ç¶ãããããã©ãŠã¶ãŒéã§å ±æãããŸãïŒã
HTML5ã»ãã¥ãªãã£
èšäºã¯éåžžã«å€§ããã絶æããªãã§ãã ããïŒ0æ°ããèŠçŽ ã®ã³ã³ããã¹ãã ãã§ãªããæ°ããAPIã¡ãœããã«ã€ããŠãHTML5ã«ã€ããŠè©±ããšãããïŒHTML5ïŒã¯å€ãã®äŸ¿å©ã§å®å šãªãã®ããããããŸããã ã¯ãã¹ãã¡ã€ã³äœæ¥ã ãããŠãæãä»ããªãã£ãã®ã¯ããµãŒããŒã®ã«ãŒãã«ãããproxy.phpããã¡ã€ã«ãããã³ãã®ä»ã®ã²ã©ãæŸèæã§ãã
Window.postMessageïŒïŒ
2ã€ã®ãŠã£ã³ããŠãªããžã§ã¯ãããããšããŸãïŒããšãã°ãçŸåšã®ãŠã£ã³ããŠãšiframeããã®ãŠã£ã³ããŠãŸãã¯window.openã®åŸïŒã
abc.comãã¡ã€ã³ã®ããŒãžããç§å¯ãã¡ãã»ãŒãžãå¥ã®ãŠã£ã³ããŠã«éä¿¡ããŸã
otherWindow.postMessage(message, targetOrigin);
xyz.comãã¡ã€ã³ã®ããŒãžã¯ã¡ãã»ãŒãžããªãã¹ã³ããã¡ãã»ãŒãžã®éä¿¡å ã確èªããŸã
window.addEventListener("message", receiveMessage, false); function receiveMessage(event) { if (event.origin !== "http://example.org:8080") return; // ... }
äžè¬ã«ããã®ãªãã·ã§ã³ã¯æ£ãã-çºä¿¡å ãéä¿¡å ïŒæ»æè ã«éä¿¡ããªãããã«ïŒã瀺ããåãå ¥ããã¡ãã»ãŒãžã®éä¿¡å ã確èªããŸãã ããããå®éã«ã¯ããã¯ãã£ãã«èµ·ãããŸããããããžã§ã¯ãå šäœïŒãã¹ãŠã®ãµããã¡ã€ã³ïŒã§ãã®ãããªãœãªã¥ãŒã·ã§ã³ãå¿ èŠã«ãªãããšããããããŸãã
è匱ãªã³ãŒãïŒ
if(message.orgin.indexOf(".example.com")!=-1) { /* ... */ }
ãããŠãæã«ã¯ãã®ãããªè匱ãªã³ãŒãã«åºäŒãããšãã§ããŸãã example.com.attacker.comã倱æããŸãïŒæ»æè ãã¡ã€ã³ïŒã ã ããïŒ
- ããŒã¿ã®éä¿¡å ã確èªãã
- ã©ãããå ¥æãããã確èªãã
- äžèšã®ããã«åäœããªãããã«ãã§ãã¯ãå確èªããŸã
HTTPã¢ã¯ã»ã¹å¶åŸ¡ïŒCORSïŒ
ãŸããã¯ãã¹ãã¡ã€ã³äœæ¥ã«ã€ããŠã§ãã CORSã¯ã¯ãŒã«ã§ãã¡ãã·ã§ããã«ã§å®å šãªãã®ã§ãæ±ãã«ãããã®ã§ãã éåžžã«é£ããã§ããã...ããã¯èµ·ãããŸã:)
ãŸãããã©ãŠã¶ã¯SOPããã€ãã¹ããŠåäœããæ¹æ³ãäŒããããšãã§ããŸãã ã¯ãã¹ãã¡ã€ã³æäœãšæåã®OPTIONSèŠæ±ã®éããµãŒããŒã¯æ¬¡ã®ãããªãã®ãè¿ããŸã
Access-Control-Allow-Origin: *
ãŸãã¯
Access-Control-Allow-Origin: example.com
æåã®ã±ãŒã¹ã§ã¯ãã©ã®ãã¡ã€ã³ããã§ãSOPããã€ãã¹ã§ããããšãå ±åãããŠããŸãã2çªç®ã®ã±ãŒã¹ã§ã¯ãexample.comã®ã¿ã§ãã ãã®å Žåãå©çšå¯èœãªæ¹æ³ãªã©ãæå®ã§ããŸãã
ãã ããããã©ã«ãã§ã¯ããã©ãŠã¶ãŒãéä¿¡ããèå¥ããŒã¿ïŒCookieãªã©ïŒã¯ãŸã éä¿¡ãããŸãããããã¯ãã»ãšãã©ã®å Žåã«å¿ èŠã§ãã ã¿ã€ãã«ãè¿œå ããå¿ èŠããããŸã
Access-Control-Allow-Credentials: true
ããã«ãããCookieã䜿çšããŠã¯ãã¹ãã¡ã€ã³ãªã¯ãšã¹ãããã©ãŠã¶ã§å®è¡ããããã«ãªããŸãïŒãŠãŒã¶ãŒã»ãã·ã§ã³ã§äœæ¥ã§ããããã«ãªããŸãïŒã ãããïŒ æãèå³æ·±ãã®ã¯ãAllow-Originã®èšå®ãã¹ããã§ã«ããèªäœãèŠæ±ããŠããããšã§ãïŒ*ïŒä»»æã®ãµã€ãïŒ+ Allow-Credentialsã¯äžç·ã«æ©èœããŸããã ãã©ãŠã¶ã¯Cookieãéä¿¡ãããããã¯é©åã§ãïŒãã®å Žåãæ»æè ã¯ã»ãã·ã§ã³ã§ãŠãŒã¶ãŒããã¢ã¯ã·ã§ã³ãå®è¡ã§ããŸããïŒã ã€ãŸã ãã®ãªãã·ã§ã³ã¯ãç¹ã«èš±å¯ããããã¡ã€ã³ãæå®ãããŠããå Žåã«ã®ã¿æ©èœããŸãã
ãåºæ¥äºãã«ã€ããŠã éçºè ã¯ãGETãã©ã¡ãŒã¿ãŒïŒã«ãŒãã³ïŒããèš±å¯ãã¡ã€ã³ã瀺ããŸãã
Webãœã±ãã
Web SocketsïŒWSïŒã«é¢ããŠã¯ããŸã第äžã«ãããªãéèŠãªå€æŽãå ããããã€ãã®æšæºãããããšã«æ³šæãã䟡å€ããããŸãã ãããã£ãŠãããã«ã¯ããªãäžè¬çãªãã®ããããŸã
- WSã«ã¯æ¿èªããããŸããïŒãããããå®äºããŸãïŒ
- WS-æå·åãããŠããªã圢åŒã§ããŒã¿ãéä¿¡ããŸãã æ©å¯ããŒã¿ã«ã¯WSSã䜿çšããŸãã
- ãµãŒããŒïŒæ»æè ã¯ãœã±ããã«ããŒã¿ãæžã蟌ãããšãã§ããŸãïŒãšã¯ã©ã€ã¢ã³ãã®äž¡æ¹ã§ãããŒã¿æ€èšŒããã£ã³ã»ã«ãã人ã¯ããŸãã
- ããŒã¿ã®éä¿¡å ããã§ãã¯ããŠãããã€ã³ã1ã¯ãã£ã³ã»ã«ãããŸããã
- ...
ããã§ã¯ãäžå®å šãªãã®ã®ïŒãµãŒãã¹ã¯ãŒã«ãŒ-sirdarckcat.blogspot.ru/2015/05/service-workers-secureã«å ããŠïŒowasp.orgãåç §ããŠããŸãããããã¯å¿ããèªã¿åã ã§ã-www.owasp.org/index.php/HTML5_Security_Cheat_Sheet -open -redirect.html ã sirdarckcat.blogspot.ru / 2015/05 / service - workers - new - apis - new - vulns - fun.html ïŒ
ã³ã³ãã³ãã»ãã¥ãªãã£ããªã·ãŒ
äžè¬çã«ã圌ã¯ãã®ãããªãã©ãŠã¶ã§ããã ãŸããããããCSS / JS /ç»åããããŒã¿ãããŠã³ããŒãããå Žæãæããããããããã¢ããããŒããããŸããã ãŸããæ»æè ãXSSæ»æäžã«å¥ã®ãã¡ã€ã³ããæªæã®ããjsãã¡ã€ã«ãåçŽã«æ¥ç¶ããããšã圹ç«ã¡ãŸãã XSSæ»æã«ãããªã¹ã¯ã軜æžããããã«ïŒã ãã§ãªãïŒãã³ã³ãã³ãã»ãã¥ãªãã£ããªã·ãŒïŒCSPïŒãèæ¡ããŸããã
ãã®ããããŒã¯ããã©ãŠã¶ã«ãªãœãŒã¹ã®èªã¿èŸŒã¿å ïŒããšãã°ãjsïŒã瀺ããã©ãããèªã¿èŸŒãããšãã§ããªããã瀺ããŸãã ãããã£ãŠãæ»æè ã¯jsãæ¿å ¥ããããšããã§ããŸããïŒããšãã°ãã€ã³ã©ã€ã³js +ä¿¡é Œã§ãããã¡ã€ã³ããã®ã¿ã®å€éšãçŠæ¢ãããŠããå ŽåïŒã

ãã¯ã€ããªã¹ãã«ãªããã¡ã€ã³ããã®JSãã¡ã€ã«ã®èªã¿èŸŒã¿ãšã©ãŒ
ããããããšãã°ãã¢ããªã±ãŒã·ã§ã³ïŒã¬ã¿ãŒãã¡ãã»ãŒãžïŒããã¯ã€ããªã¹ãã®ãã¡ã€ã³ã«ããå Žåãæ»æè ã¯jsãããŠã³ããŒãããŠå®è¡ããããšãã§ããŸãã
詳现ã«ã€ããŠã¯ãã¢ã¹ã¯ã¯ã§è¡ãããOWASP Russiaã®æåŸã®äŒè°ããã¬ãŒã³ããŒã·ã§ã³-www.slideshare.net/OWASP-Russia/yourprezi-49135416ãå«ããCSPãäœåºŠãåæãããŸããã
ãã©ãã·ã¥

æ¬æ°ã§ããïŒ ãã©ãã·ã¥ã«ã€ããŠïŒ äžè¬çã«ã¯ãã äžéšã®äººã«ãšã£ãŠã¯ãããã¯é¢é£æ§ããããŸãããå€ãã®äººã«ãšã£ãŠãæŽå²çã«ã¯ããŸã ã©ããã§æ©èœããŠããŸãã ã¯ãããã§ã«ä»å¹Žã¯ãæ°ããããã°ã®ãããã©ãã·ã¥ã䜿çšãã倧èŠæš¡ãªã±ãŒã¹ã1ã€ãããŸããããRuNetã«ã¯èª°ãæžããŠããŸããã§ãã:(ããããé çªã«èŠãŠã¿ãŸãããã
crossdomain.xml
æãäžè¬çãªãã©ãã·ã¥é¢é£ãã¡ã€ã«ã¯crossdomain.xmlãã¡ã€ã«ã§ãã ããã¯ããã®ãã¡ã€ã³ãæäœããããã®ã¢ããªã±ãŒã·ã§ã³ã®ãã©ãã·ã¥ããªã·ãŒã瀺ãxmlãã¡ã€ã«ã§ãïŒããã§ãSOPã«ã€ããŠèª¬æããŠããŸãïŒã ããã§ã¯ãCORSã®ç¶æ³ã¯æ©èœããŸããã ä»»æã®ãã¡ã€ã³ãïŒCookieãšãšãã«ïŒã¢ã¯ã»ã¹ã§ããããšã瀺ãããŠããå Žå-ä»»æã ãããŠãããã¯ãã¡ããæªãããšã§ãã ãã®ãããªãã¡ã€ã«ã®äŸïŒ
<cross-domain-policy> <allow-access-from domain="*" to-ports="80"/> </cross-domain-policy>
ä»»æã®ãã¡ã€ã³ã®ãã©ãã·ã¥ãã©ã€ãã¯ããŠãŒã¶ãŒã®Cookieãšãšãã«ãã®ãªãœãŒã¹ïŒã¯ãã¹ãã¡ã€ã³ãååšããå ŽæïŒã«ã¢ã¯ã»ã¹ã§ããŸãã ããããããã¯æãäžè¬çãªã±ãŒã¹ã§ãããããèå³æ·±ããã®ã§ãã
wamba.comã§ã®ãã°ãã³ãã£ã³ã°ã®çµéšããããã®ãã¡ã€ã«ã«ã¯å€ãã®ãã¡ã€ã³ããããŸããïŒãªãœãŒã¹ã®ååãäœåºŠã移åããå€æŽããŠããŸããïŒã ãã®çµæããã¡ã€ã«ã«ã¯æå¹æéãé·ããã¡ã€ã³ãå«ãŸããŠããŸãã wamba.comãŠãŒã¶ãŒãæ£åžžã«ç»é²ããŠæ»æããããšãã§ããŸããã 圌ãã¯3000ïŒïŒ
ãã©ãã·ã¥çµç±ã®XSS
XSSã¯Flashãã¡ã€ã«ã§ãå¯èœã§ãã è匱ãªASã³ãŒãã®ãµã³ãã«
getURL(_root.URI,'_targetFrame');
æäœäŸïŒ
http://victim/file.swf?URI=javascript:evilcode
Flashã¯javascriptïŒã«ç§»åããŠãä»»æã®JSã³ãŒããå®è¡ããããšããŸãã SWFã¯ç°¡åã«éã³ã³ãã€ã«ã§ããããããœãŒã¹ã³ãŒãã¯ïŒçŽæ¥ïŒå¿ èŠãããŸããã ãã®æ»ææ¹æ³ã®è©³çŽ°ã«ã€ããŠã¯ã OWASP-www.owasp.org/index.php/Testing_for_Cross_site_flashing_ ïŒOTG-CLIENT-008ïŒã«ããæ©èœã®ãªã¹ããåç §ããŠãã ããã
CVE-2011-2461ãåž°ã£ãŠããïŒ
ããŠã2015幎ããã®ãã©ãã·ã¥ã«ã€ããŠã®ã¡ãã£ãšãã話ããããã®æ¥Troopersã¯ãåäœããPoCãšãAdobe FlexïŒè匱æ§ããŒãžã§ã³ïŒã§æ§ç¯ããããã©ãã·ã¥ãã¡ã€ã«ã®å€ãè匱æ§ãæªçšããæ¹æ³ãåæããããŒã«ãçºè¡šããŸããã ããã¯éåžžã«äººæ°ã®ãããã©ãã·ã¥éçºè ãã¬ãŒã ã¯ãŒã¯ã§ãã ãã®ãããªãã¯ãã«-ãªãœãŒã¹äžã«ãã®ãããªãã©ãã·ã¥ãã©ã€ãïŒè匱ãªAdobe Flexã§ã¢ã»ã³ãã«ãããïŒãèŠã€ãããã®ããã®ç¹å¥ãªãã€ããŒãïŒãªãœãŒã¹ïŒãçæããŠæ¥ç¶ããŸãã ããŒãããããã¡ã€ã³ããã®ãã©ãã·ã¥ãã©ã€ãã¯ããã€ããŒãã§å®è¡ãããŠããŸãã ããã ã©ã€ã³ã¯åã³SOPããã€ãã¹ããŠããŸãã
ãã®ãããªãã¡ã€ã«ïŒSWFã«è匱ãã©ããïŒã確èªããã«ã¯ãããŒã«github.com/ikkisoft/ParrotNGã䜿çšã§ããŸãã
java -jar parrotng_v0.2.jar <SWF File | Directory>
詳现æ å ±
- blog.nibblesec.org/2015/03/the-old-is-new-again-cve-2011-2461-is.html
- www.slideshare.net/ikkisoft/the-old-is-new-again-cve20112461-is-back
ãã®ç 究ã®èè ã¯ããã®ãããªãã©ãã·ã¥ãã©ã€ããGoogleããã®ä»ã®æåãªãªãœãŒã¹ïŒQiwiãYandexãªã©ïŒã§çºèŠããŸããã 圌ã®ãåæžã:)
ã€ã³ãã©ã¹ãã©ã¯ãã£æ å ±æŒæŽ©
JS / CSSãšåããªãŒã¯ãçºçããå¯èœæ§ããããŸãã ãµãŒããŒãAPIããŒãªã©
JSONPãä»ããé瀺
ããã«ã€ããŠã¯ãAPIã»ãã¥ãªãã£ã«é¢ããèšäºã§æ¢ã«æžããŠããŸããããã®èšäºãå®å šã«ããããã«ãç¹°ãè¿ã䟡å€ã¯ãããŸãã
APIã¯ãšã³ããŠãŒã¶ãŒã ãã§ãªãããããžã§ã¯ãå ã§ããŒã¿ãéä¿¡ããããã«æäŸãããããšããããŸãã ããã¯ãå€ãã®å Žåãç°ãªããã¡ã€ã³ãæã€å€§èŠæš¡ãªãµã€ãã§èŠãããŸãã ãããŠã©ãããããããã¯ã©ã€ã¢ã³ãåŽã§ãã¡ã€ã³éã§ããåãããå¿ èŠããããããã§JSONPãå©ãã«ãªããŸãã ããã¯ããã¡ã€ã³1ã«å¿ èŠãªJSONããããã³ãŒã«ããã¯ã«ãªããŸãã ãã¡ã€ã³1ã«ã¢ã¯ã»ã¹ãããšããŠãŒã¶ãŒã¯Cookieãéä¿¡ããŸãããŠãŒã¶ãŒãæ¿èªãããŠãããã©ããã確èªããå¿ èŠãªããŒã¿ãæäŸã§ããŸãã 2çªç®ã®ãã¡ã€ã³ã§ã¯ãåæ§ã®JSãæ¿å ¥ãããŸã
<script type="application/javascript" src="http://server1.example.com/api/getUserInfo?jsonp=parseResponse"> </script>
parseResponseé¢æ°ãæ¢ã«å®çŸ©ãããŠããŸãã ããããèŠç¹ã¯ãæ»æè ããã®ã¹ã¯ãªãããèªåã®ãã¡ã€ã³ã«è²Œãä»ããã³ãŒã«ããã¯ã決å®ããæ©å¯ããŒã¿ãããå Žåã¯ã©ãã«ãããŠããã䜿çšã§ããããšã§ãã ãã®ãããªè匱æ§ã®åªãã䜿çšäŸã¯ãèšäºãFighting Anonymityãã«ç€ºãããŠããŸãã
Xãã¬ãŒã ãªãã·ã§ã³
圌ãã¯1000åãš1åèšã£ãããã§ãããåã³ç¹°ãè¿ããŸãã è¿œå ãªãã®åãªãœãŒã¹ã èšå®ã¯ãã¬ãŒã ã«è¡šç€ºã§ããŸãã ãã¬ãŒã ã«ã¯ãçŸåšã®ãŠãŒã¶ãŒã®Cookieãã€ãŸã ãã¬ãŒã å ã§ãèš±å¯ããããªãœãŒã¹ãéããŸãïŒãã¡ãããèš±å¯ãããŠããå ŽåïŒã ãã®ãã¬ãŒã ã¯æ»æè ã«ãã£ãŠãã®ããŒãžã«åã蟌ãŸããã¢ã¯ã·ã§ã³ãèŠæ±ããäœãããã¿ã³ã®äžã«æãããŸãïŒãã¿ã³ãã¯ãªãã¯ãããªã©ïŒããŠãŒã¶ãŒãã¯ãªãã¯ããŸãããå®éã«ã¯ãã¬ãŒã å ã®èŠçŽ ãã¯ãªãã¯ããŸãïŒããšãã°ãã°ã«ãŒãã«ãµãã¹ã¯ã©ã€ãããŸãïŒã ãã®æ»æã¯ã¯ãªãã¯ãžã£ãã¯ãšåŒã°ããŸãã
WebãµãŒããŒå¿çã®X-Frame-Optionsã«ããã
- ããŒãžããã¬ãŒã ã«è¡šç€ºãããªãããã«ããŸã
- éšåçã«çŠæ¢ïŒããšãã°ãåãèµ·æºã®ã¿ãèš±å¯ïŒ

VKã§ã®clickJackingã«é¢ããèšäº
æ¡åŒµæ©èœ/ SmartTV
ãã©ãŠã¶ã®æ©èœãæ¡åŒµããããã«ããã©ã°ã€ã³ïŒããšãã°-FlashïŒããããŸãããæ¡åŒµæ©èœããããŸãã 2ã€ç®ã¯ãHTML / CSS / JSã®ã¿ã䜿çšããŠèšè¿°ãããŠããŸããããã«ã€ããŠã¯ããã®èšäºã§èª¬æããŸãã SmartTVã¢ããªã±ãŒã·ã§ã³ã¯ãé«åºŠãªTV APIïŒã«ã¡ã©ãžã®ã¢ã¯ã»ã¹ãªã©ïŒã䜿çšããŠåæ§ã®æ¹æ³ã§äœæãããŸãã ãããŠãã¡ãããããã§æ··ä¹±ããããšãã§ããŸãã æ¡åŒµæ©èœã®ã»ãã¥ãªãã£ã«ã€ããŠã¯ãã§ã«èª¬æããŸããããåŸã§SmarTVã¢ããªã±ãŒã·ã§ã³ïŒããã³SmartTVãŠãŒã¶ãŒã®æ»æãã¯ãã«ïŒã®ã»ãã¥ãªãã£ã«ã€ããŠèª¬æããŸãã ç§ã¯ãããªã ããæ®ããŸã
ãã¶ãŒãçš
ããŠãããã³ããšã³ãã®èªè ã®1人ããCSSãæžããŠãåçãæ¿å ¥ããŠãã ããïŒ ã»ãã¥ãªãã£ã«ã€ããŠæããŠãã ããïŒã...ãããç©èªã§ãã
åç §ã«ããé·ç§»æïŒãå žåçãªãæ¡ä»¶ã§ïŒ
<a href=âhttp://external.comâ>Go!</a>
ãªã¯ãšã¹ãå ã®ãã©ãŠã¶ã¯ããªãã¡ã©ãŒãåã®ããŒãžã®ã¢ãã¬ã¹ãæž¡ããŸãã ã¹ã¿ã€ã«ãåçãªã©ã¯ã©ãã§ããïŒ æž¡ããããªãã¡ã©ãŒãããŒãããŸããïŒ ç§ã¯ä»èªãã§åæ¢ããèªåã®ããã«è³ªåã«çããããšããå§ãããŸãã
çã
ã¯ããéä¿¡ãããŸã
ãªããããæªãã®ã§ããïŒ hackerone.comãªãœãŒã¹ã§ãã¬ã€ã¢ãŠãèšèšè ã¯...å€éšãªãœãŒã¹ããïŒãŠãŒã¶ãŒãGETãã©ã¡ãŒã¿ãŒã§ããŒã¯ã³ãååŸããïŒãã¹ã¯ãŒãå埩ããŒãžã«ã³ããã¯ãæ¿å ¥ããŸããã ãã®çµæããã®ãªãœãŒã¹ã®ææè ã¯ããã®ã³ããã¯ãããŠã³ããŒããããšãã«ããã¹ã¯ãŒãããªã»ããããããã®ãã¹ãŠã®ããŒã¯ã³ãaccess.logã§ç¢ºèªããŸããã å¿ èŠãªèªååã«ãããã¢ã«ãŠã³ãããã°ãããçããããšãã§ããŸãã
ãããŠãããã¯èŠããã ãã-"ç§ã¯ã¡ããã©htmlã«ç»åãæ¿å ¥ããŸã"ïŒïŒ
ããã©ãŒãã³ã¹ããã®ãã¬ãŒã³ããŒã·ã§ã³