33
Binary × JavaScript 江江江江江江江江江江江江 LT 2015.01.24 + Blob 江江

Binary × JavaScript (+ Blob の話)

Embed Size (px)

Citation preview

Binary × JavaScript

江戸前セキュリティ勉強会LT2015.01.24

+ Blob の

自己紹介

くらりど a.k.a. clariroid

• 普通の大学生

• 専攻:電気電子 (not 情

報 )

• mixi Scrap Challenge

• LT 初めてです。

自己紹介

くらりど a.k.a. clariroid

• 普通の大学生

• 専攻:電気電子 (not 情報 )

• mixi Scrap Challenge

• LT 初めてです。

本題

こんなものを作りました

JavaScript 製バイナリエディタ

BinaryEditor-JS

• http://clariroid.com/#editor

• 現状、 Firefox のみ安定動作

• とにかく重い

BinaryEditor-JS

【 ~ JS でバイナリファイルを作る手順 ~】

マシンのメモリに固定長バッファを用意↓

用意したバッファに書き込む↓

データを blob スキーム URL に変換

BinaryEditor-JS

【 ~ JS でバイナリファイルを作る手順 ~】

マシンのメモリに固定長バッファを用意↓

用意したバッファに書き込む↓

データを blob スキーム URL に変換

固定長バッファの欠点

• 指定したサイズでバッファをゼロクリア↓

• 所望の値でバッファの先頭から書き換え↓

• 不正な入力値を書き換え途中で弾くと末尾に余分なゼロパディングが残る

BinaryEditor-JS

【 ~ JS でバイナリファイルを作る手順 ~】

マシンのメモリに固定長バッファを用意↓

用意したバッファに書き込む↓

データを blob スキーム URL に変換

BinaryEditor-JS

【 ~ JS でバイナリファイルを作る手順 ~】

マシンのメモリに固定長バッファを用意↓

用意したバッファに書き込む↓

データを blob スキーム URL に変換

blob URL Scheme

blob URL Scheme

Binary Large OBject -- blob

• 元々はデータベースでのデータ型不定長バイナリデータを扱うためのもの

• Web ではブラウザからマシンのメモリ内データにアクセスするスキーム

blob URL Scheme

Blob URL の基本形

blob:550e8400-e29b-41d4-a716-

446655440000

UUID (Universal Unique Identifier, RFC4122)

blob URL Scheme

Blob URL の基本形

blob:550e8400-e29b-41d4-a716-

446655440000

Version Number↓

UUID version 4(モダンブラウザは今現在 version 4 )

blob URL Scheme

Blob URL の基本形

blob:550e8400-e29b-41d4-a716-

446655440000

疑似乱数 (UUID version 4)

blob URL Scheme

Web アプリケーションからメモリ内のバイナリデータに安全にアクセスするため

• Same Origin Policy が適用される

• URL に生存時間がある

  → http:// と違って非永続的

• 「メモリ内の」 Blob のみにアクセス可

Blob URL × HTML5

Blob URL × HTML5

// JavaScript

var blob = new Blob(

[ArrayBuffer],

{type: Content-Type}

);

Blob URL × HTML5

// JavaScript

var blob = new Blob(

[ArrayBuffer],

{type: Content-Type}

); // デフォルトでは

text/plain

Blob URL × HTML5

Content-Type 怪しい…Content-Type 怪しくない?

Blob URL × HTML5

もし BinaryEditor-JS でContent-Type が指定されなかったら

Blob URL × HTML5

<script>alert(1);</script>をバイナリで入力してみる

Blob URL × HTML5

Demo

Blob URL × HTML5

実際の BinaryEditor-JS では

“application/x-msdownload”

を Content-Type に指定

Blob URL × HTML5

“application/x-msdownload”↓

ファイルを開かずにダウンロードする

Blob URL × HTML5

“application/x-msdownload”↓

ファイルを開かずにダウンロードする

Blob URL × HTML5

“application/x-msdownload”↓

MS Windows 向けLinux or Mac はどーなの?

XSSer の皆さんの出番…?

異論・反論・ Objection ?