【3/18〜】Amazon、VMwareが語る『クラウドの未来』 スラッシュドット    はてなブックマーク  Yahoo!ブックマークに登録  印刷

第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>
<div>{theft("</div><div>ようこそ、川口さん!</div><div>")}</div>
</body></html>

 このHTMLを<script>要素を使って読み込むと、E4Xの機能によりXMLリテラルの記述されたJavaScriptとして扱われます。さらに{と}で囲まれている部分はそのままJavaScriptとして実行されますので、関数theftを通じてHTML内の文字列「ようこそ、川口さん!」という文字列に、JavaScriptからアクセスすることができます。

<script>function theft( s ){ alert( s ); }</script>
<script src="http://example.jp/sns.html"></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の世界を体験してみよう
  Coding Edgeフォーラムフィード  2.01.00.91

Coding Edge フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

スキルアップ/キャリアアップ(JOB@IT)

お勧め求人情報

キャリアアップ 〜JOB@IT
@IT Special -PR-
  TomcatやJBossなどAPサーバ環境に関する
情報を集約! “業務”用APサーバ大百科

New!
  一気に解説! 最新のクラスタストレージ
「RAIDを超えたストレージ基準」……など

New!
  クラウド的ユーザー体験の変化は脅威か?
仮想化技術を使いこなす運用管理術を紹介

New!

  上司や部下、部署内メンバーとの情報共有
を“ガラッ”と変えるコラボツールとは?

New!
  おばかアプリ選手権、第4弾開催中!!
ムダにカッコよくてくだらない作品求ム!

  社内ファイルサーバを“クラウド”に統合
VPN直結「クラウド型ストレージ」を紹介

  Twitterのアカウントはなぜ突破された?
メールによる新手の攻撃手法とその対策

  もう仮想化のお試しフェイズは終わりだ!
Hyper-V 2.0が基幹システムも仮想化

  美人!? まあまあ? 気になる いやし系!!
PV急増で「美人時計」がとった手段とは?

  クライアント企業から求められる人材
⇒IT技術と経営戦略を併せ持つ「戦略家」

  .NET編集長が実践する「技術情報検索術」
サンプル・コードを簡単に探す“技”は?

  業務効率と情報セキュリティ対策を両立!
手間なく確実に機密情報を守る方法とは?

  進化を続ける富士通ストレージETERNUS DX
製品開発者の自信を裏付けるものとは何か

  運用管理の課題を“2つの観点”から分析
ユーザー満足度の高い「仮想環境」とは?

  【CTC事例】約30の基幹システムを統合!
膨大なバッジジョブを制御した方法は?

  仮想化すればコストは削減できるか?
仮想化に必要な「3つの視点」を解説する

  その数、なんと400台以上! グループ内
サーバの「統合管理」によるメリットは?