第6回 [ニッチ]E4Xで攻撃できる? できない?
はせがわようすけ
ネットエージェント株式会社
2010/2/8
XSSにCSRFにSQLインジェクションにディレクトリトラバーサル……Webアプリケーションのプログラマが知っておくべき脆弱性はいっぱいあります。そこで本連載では、そのようなメジャーなもの“以外”も掘り下げていきます (編集部)
ECMAScriptでXMLを扱う“E4X”
- - PR -
皆さんこんにちは、はせがわようすけです。今回は、Mozilla Firefoxでクロスドメイン制約を回避する方法の一例として、E4Xという機能を利用した攻撃方法を紹介します。
E4Xとは、「ECMAScript for XML」の略であり、JavaScriptやActionScriptなどのECMAScript処理系において、XMLをネイティブ機能として扱うための仕様です。
現在、FirefoxのJavaScriptやアドビのActionScriptなどで利用できますが、本稿ではMozilla Firefox上での動作に関して説明します。
| 【参考】 Standard ECMA-357 ECMAScript for XML (E4X) Specification http://www.ecma-international.org/publications/standards/Ecma-357.htm |
E4Xを使うと、例えば以下のようにJavaScript上で文字列や数値と同じようにXMLを直接的に扱うことができます。
var rssItem =
<item>
<title>Blog title</title>
<link>http://example.com/</link>
</item>;
alert( rssItem.title ); |
E4XではXML内で{と}で囲むと、その部分はJavaScriptとして解釈されます。
var s = "abc";
var rssItem =
<item>
<title>{ s + "def" }</title>
<link>http://example.com/</link>
</item>;
alert( rssItem.title ); |
このように、XMLをJavaScriptの一部としてそのまま記述できるのが、E4Xの最大の特徴です。
E4Xを利用した攻撃
E4Xを利用することにより、機密情報の含まれるHTMLやXMLをJavaScriptの一部として扱うことができますので、攻撃者の用意したJavaScriptから機密情報にアクセスすることができる場合があるという問題がこれまで指摘されていました。
例えば、http://example.jp/sns.htmlというURLに以下のようなHTMLがあったとします。 3つある<div>要素のうち、最初と最後のものは攻撃者がコントロール可能で、真ん中の<div>要素については攻撃者は内容を把握できないものであるとします。
<html><body> |
このHTMLを<script>要素を使って読み込むと、E4Xの機能によりXMLリテラルの記述されたJavaScriptとして扱われます。さらに{と}で囲まれている部分はそのままJavaScriptとして実行されますので、関数theftを通じてHTML内の文字列「ようこそ、川口さん!」という文字列に、JavaScriptからアクセスすることができます。
<script>function theft( s ){ alert( s ); }</script> |
このように、本来はスクリプトではないコンテンツを<script>のsrcとして
攻撃者のわなサイト上からSame origin policyを超えて読み込みその内容を盗み見る、という方法がE4Xを利用した典型的な攻撃方法としてこれまで指摘されていました。
この攻撃方法は少なくとも2007年ごろから知られており、Firefox 3.0系列では上記の攻撃が成立しますが、Firefox 3.5および3.6では攻撃を成立させないよう大きく改善されており、上記のような単純な例では攻撃は成立しません。
1/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ジャパン
- 実例で学ぶRailsアプリのテスト方法 (2011/12/22)
具体的なWebアプリを例に簡単なテストを使ったリファクタリングについ
て解説する - Railsの人気テストフレームワーク6選! (2011/8/18)
今回からテストを使ったリファクタリングを解説する。まずはRailsで人
気のあるテストフレームワークをいくつか紹介する - ActiveRecordの更新系操作 (2011/6/27)
Railsのモデル層を担当するActiveRecordを使った登録、更新、削除
など、更新系の機能を中心に見ていきます - 実例アプリで学ぶ“Railsらしさ”の基礎 (2011/5/26)
Ruby on Railsで書かれた実例アプリを取り上げて、初心者が陥りがちなコードの書き方を指摘します。より「Railsらしい」コードとは?
|
|

