第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の世界を体験してみよう |
|
- PHPでGAE上に社員検索アプリを作る (2010/3/18)
GAEの制約により使うことができなかったテンプレートエンジン。PHP4GではSmartyが使えるようになった - 構造体の便利な用途、インターフェイス入門 (2010/3/10)
継承機能を排除したインターフェイス機能でダックタイピングが可能となった。サンプルで確かめてみよう - プライベートモードの履歴状態 (2010/3/1)
仕事に集中できるときと、なかなかできないとき、ありますよね。状態遷移図で考えてみよう - Goのswitch文で解くFizzBuzzと構造体のイントロ (2010/2/25)
Goではif文と同等の制御構造をswitch文で表現できる。試してみよう
|
|
スキルアップ/キャリアアップ(JOB@IT)
スポンサーからのお知らせ
| 「いつかは壊れるサーバ」そんな故障に 迅速で安価に手軽に対応する方法とは? New! |
| 「特権ユーザー」の事件を防げ! 万能権限を持つユーザーの管理方法とは? New! |
| 仮想環境の構築とデータ保護の特効薬?! 実績と信頼性の高いパッケージで安心運用 |
| 仮想環境のバックアップもこれまでどおり 「まるごと取ってまるごと戻す」簡単運用 |
| おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |
| その数、なんと400台以上! グループ内 サーバの「統合管理」によるメリットは? |
| 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |
| 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |
お勧め求人情報

**先週の人気講座ランキング**
〜CCNA編〜
| ◆ | 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台以上! グループ内 サーバの「統合管理」によるメリットは? |







