いまも通用するかも? こんな攻撃の手口
- - PR -
最新のバージョンでは、外部のHTMLおよびXMLをJavaScriptソースとして簡単に読み込めなくなりましたが、依然としてE4Xを利用した攻撃が成り立つ場合が現実に存在します。実際に過去に見つけた事例を紹介しましょう。
攻撃の対象となったのは、Twitterとよく似たあるミニブログサービスでした。そのミニブログは非常に高機能なAPIを豊富に揃えており、外部の他のアプリケーションとの連携のため、ユーザーのタイムラインをCSVで出力することも可能でした。
例えば、ユーザーhasegawaがログインした状態で、
http://api.example.jp/statuses/friends_timeline.csv?id=hasegawa |
のようなURLにアクセスすると、hasegawa がフォローしている人たちの発言の一覧がCSV形式で、
0003,今日はもう帰ろう,yamagata,2010/02/01,18:02:13 |
のように取得できました。各列は左からユニークID、発言内容、発言したユーザー、日付、時刻です。
このとき、例えば悪意あるユーザーkazuhoは、APIから取得できるCSVが次のようになるよう、タイミングを見計らって発言をします。
0006,s=<s><![CDATA[,kazuho,2010/02/01,18:22:03 |
このようなCSVが生成されることを見越して、攻撃者kazuhoはユーザーhasegawa に以下のようなHTMLを含むURLに誘導します(途中改行していますが、実際には1行です)。
<script src="http://api.example.jp/statuses/ |
すると、hasegawaあてに生成されるCSVは、スクリプトとして解釈されます。この例では、CSVをJavaScriptとして解釈すると、
0006, |
となります。変数sには、E4Xの機能によりユーザーnakamuraの発言を含むXMLが代入されますので、攻撃者はnakamuraからhasegawaあてに発言された内容を取得することができる、というわけです。
この事例自体は2008年夏ごろ、Firefox 3.5のリリース以前に発覚したものですが、仮にFirefox 3.5/3.6であっても、<script>のsrcとして読み込ませている対象がHTMLやXMLリテラルだけではないので、Firefox 3.5で導入されたE4Xによるのぞき見対策が機能せず、攻撃が成立するのではないかと考えます。
なおこのミニブログサービスでは対策として、UserAgentを判別し通常のブラウザに対してはCSV形式でのレスポンスを返さないようにしたそうです。
機能が増えると「攻撃が成功する可能性」は上がる
実際のところ、今回紹介した事例のような、E4X機能を応用することによって攻撃が成立する対象はそれほど多くはないと思います。
その理由の1つには、Firefox自身の改善により通常のHTMLやXMLがJavaScriptとして扱われなくなり、それ以外の種類のコンテンツ、特にCSVのようにJavaScriptとして解釈されやすいデータ形式はそれほど使われていないからです。
加えて、例えCSVで出力する場合であっても、実際に攻撃を成功させるためにはJavaScriptとしてきちんと解釈できるよう出力を工夫しなければならず、攻撃側にも相当な手間もかかります。
とはいえ、E4Xという機能によりさまざまなコンテンツをJavaScriptとして解釈可能にできる可能性、言い換えると「攻撃の成功する可能性」が引き上げられていることも事実です。
通常のWebアプリケーションの開発者がE4Xのようにニッチな機能を必ずしも熟知しておく必要はないとは思いますが、HTMLやXML以外の特殊な形式で機密情報を含むコンテンツを生成するようなWebアプリケーションの場合、そのコンテンツがJavaScriptとして解釈可能な余地がないかを把握しておくとよいでしょう。
3/3 |
| Index | |
| [ニッチ]E4Xで攻撃できる? できない? | |
| Page1 ECMAScriptでXMLを扱う“E4X” E4Xを利用した攻撃 |
|
| Page2 E4Xによるのぞき見を防止するFirefoxの改善 |
|
| Page3 いまも通用するかも? こんな攻撃の手口 機能が増えると「攻撃が成功する可能性」は上がる |
|
| 教科書に載らないWebアプリケーションセキュリティ |
| Coding Edgeお勧め記事 |
| いまさらアルゴリズムを学ぶ意味 コーディングに役立つ! アルゴリズムの基本(1) コンピュータに「3の倍数と3の付く数字」を判断させるにはどうしたらいいか。発想力を鍛えよう |
|
| Zope 3の魅力に迫る Zope 3とは何ぞや?(1) Pythonで書かれたWebアプリケーションフレームワーク「Zope 3」。ほかのソフトウェアとは一体何が違っているのか? |
|
| 貧弱環境プログラミングのススメ 柴田 淳のコーディング天国 高性能なIT機器に囲まれた環境でコンピュータの動作原理に触れることは可能だろうか。貧弱なPC上にビットマップの直線をどうやって引く? |
|
| Haskellプログラミングの楽しみ方 のんびりHaskell(1) 関数型言語に分類されるHaskell。C言語などの手続き型言語とまったく異なるプログラミングの世界に踏み出してみよう |
|
| ちょっと変わったLisp入門 Gaucheでメタプログラミング(1) Lispの一種であるScheme。いくつかある処理系の中でも気軽にスクリプトを書けるGaucheでLispの世界を体験してみよう |
|
TechTargetジャパン
- 派生型でもっと便利にデータを扱う (2012/4/26)
基本型を組み合せて使える派生型を学びます。派生型には構造体、共用体、配列などがあります - 実例で学ぶRailsアプリのテスト方法 (2011/12/22)
具体的なWebアプリを例に簡単なテストを使ったリファクタリングについ
て解説する - Railsの人気テストフレームワーク6選! (2011/8/18)
今回からテストを使ったリファクタリングを解説する。まずはRailsで人
気のあるテストフレームワークをいくつか紹介する - ActiveRecordの更新系操作 (2011/6/27)
Railsのモデル層を担当するActiveRecordを使った登録、更新、削除
など、更新系の機能を中心に見ていきます
|
|

