アンケートご協力のお願いgihyo.jpでは,2010年度に向けて豪華プレゼントが当たる読者属性アンケートを実施しております。ご協力ください。

gihyo.jp » ADMINISTRATOR STAGE » 連載 » 本当は怖い文字コードの話 » 第3回 US-ASCIIによるクロスサイトスクリプティング

本当は怖い文字コードの話

第3回 US-ASCIIによるクロスサイトスクリプティング

今回は,US-ASCIIによるクロスサイトスクリプティング(XSS)という話題について紹介します。

前回までで説明したUTF-7によるXSSと同様に,攻撃者はUS-ASCIIという文字コードを巧みに利用することで,IEを対象にXSSを発生させることができます。US-ASCIIによるXSSは,UTF-7によるXSSと類似点も多いため,前回までの説明も併せて読んでおくとよいでしょう。

US-ASCIIによるXSSについても先に対策を書いてしまうと,UTF-7のときと同様にHTTPレスポンスヘッダにて

Content-Type: text/html; charset=UTF-8
Content-Type: text/html; charset=Shift_JIS
Content-Type: text/html; charset=EUC-JP

のいずれかを出力するという原則を守ることで,完全に攻撃を防ぐことができます。

US-ASCIIによるXSSが発生するメカニズム

US-ASCIIとは,みなさんもご存じのとおり,7ビットで英数字と少数の記号を表現する文字コードで,0x00から0x7Fまでの128種類の文字を扱うことができます。US-ASCIIで記述されたコンテンツをInternet Explorerで開いたときには,0x00から0x7Fの128文字を解釈するだけでなく,0x80から0xFFまでの7ビットにおさまらない範囲の文字について,最上位ビットが無視され0x00から0xFFと等価と解釈されます。

たとえば,「A」「B」「C」という文字はUS-ASCIIではそれぞれ0x41,0x42,0x43と規定されていますが,Internet Explorerではそれらの最上位ビットを1にセットした0xC1,0xC2,0xC3の各バイト値についても,0x41,0x42,0x43と同様に「A」「B」「C」と解釈します(表1)。

表1 Internet Explolerが「A」「B」「C」と解釈するバイト値

 
US-ASCII
最上位ビットを1にセット
文字16進2進16進2進
A0x41010000010xC111000001
B0x42010000100xC211000010
C0x43010000110xC311000011

同様に,0xA2,0xBC,0XBEの各バイト値は,0x22,0x3C,0x3E,すなわち「"」「<」「>」と等価であると解釈されます(表2)。

表2 Internet Explolerが「"」「<」「>」と解釈するバイト値

 
US-ASCII
最上位ビットを1にセット
文字16進2進16進2進
"0x22001000100xA210100010
<0x3C001111000xBC10111100
>0x3E001111100xBE10111110

Webアプリケーション側では通常は「"」「<」「>」といった文字を対象に,HTML生成時にエスケープすることでXSSを防いでいますが,US-ASCIIでは0xA2,0xBC,0XBEといったエスケープ対象ではない各バイト値がブラウザ上で 0x22,0x3C,0x3Eつまり「"」「<」「>」と等価と解釈されるため,XSSが成立してしまいます。

たとえば,リスト1のようなHTMLファイルをメモ帳などで作成し,文字エンコーディングにShift_JIS(メモ帳の場合は文字コードをANSIにします)として保存します。

リスト1 US-ASCIIで半角カナが入ったHTML

<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=us-ascii">
</head>
<body>
シscriptセalert(document.charset)シ/scriptセ
</body>
</html>

半角カタカナの「シ」「セ」は,Shift_JISでは0xBC,0xBEです。このファイルをInternet Explorerで開いた場合には,HTMLはUS-ASCIIと解釈されるため,それぞれ0x3C,0x3Eつまり「<」「>」となり,図1のようにスクリプトが動作します。

図1 リスト1のファイルをIEで開いた結果

図1 リスト1のファイルをIEで開いた結果

攻撃対象となるWebアプリケーション

IEのUS-ASCIIの解釈を悪用したXSSが成立するWebアプリケーションとしては,

  • 明示的に文字エンコーディング名としてUS-ASCIIを指定している
  • 文字エンコーディングが不明瞭

のいずれかが対象となります。

UTF-7によるXSSの場合,明示的に「charset=UTF-7」のように指定しているWebアプリケーションというのは現実的にはほとんど存在しませんでしたが,「charset=US-ASCII」という明示的な指定は,英語でのページやエラーメッセージなどで見かけることがあります。

特に,Webアプリケーションの開発側として明示的にUS-ASCIIを指定しているつもりはなくても,404応答などのエラーページにおいてUS-ASCIIが使われている場合もありますので注意が必要です。

また,明示的にUS-ASCIIを指定していない場合でも,「文字エンコーディングが不明瞭」なWebアプリケーションでは,UTF-7によるXSSと同様に,IEにとって「コンテンツがUS-ASCIIである」と判断させることでXSSが発生することがあります。

まとめ

このように,明示的に文字エンコーディングを指定している場合でも,US-ASCIIの場合にはIEの過剰なまでのHTMLの解釈によってXSSが発生することがあるということがわかっていただけたと思います。

冒頭にも書いたとおり,UTF-7によるXSSも含め副作用のない対策としてHTTPレスポンスヘッダにおいて

Content-Type: text/html; charset=UTF-8
Content-Type: text/html; charset=Shift_JIS
Content-Type: text/html; charset=EUC-JP

のいずれかをHTTPレスポンスヘッダに出力する,というのをルールとして徹底することを強くお勧めします。

著者プロフィール

はせがわようすけ

ネットエージェント株式会社 研究開発部。
Unicodeなどの文字コードが引き起こすセキュリティ上の問題点について調査・研究を行っている。Internet Explorer,Mozilla Firefox をはじめソフトウェア製品およびWebアプリケーションに関する脆弱性を多数発見。

URLhttp://utf-8.jp/

コメント

コメントの記入

パスサポ

多数の情報処理技術者試験対策書籍の発行実績を誇る技術評論社がお届けする,資格試験合格サイト「めざせ! 情報処理試験 パスサポ」が開設されました。

ピックアップ

サクセスストーリーに続く,快適サーバー運用管理のヒント!

データの増大,煩雑な管理,システムダウン,セキュリティなど,迫りくる課題からシステム管理者の負担を軽くするポイントを解説します。

gihyo.jp インフラエンジニア情報局

ネットワークやITにかかわるあらゆる業種で必要とされるインフラエンジニアに向けた技術情報や心構え,その魅力について多角的に紹介。

テストエンジニア ステーション

いま,ITに関わるあらゆる開発業務で注目されつつあるテスト系エンジニアをターゲットにしたコンテンツサイトを展開します。

一行クイックアンケート

gihyo.jpで取り上げてほしいネタは?

※検索はページ右上の検索ボックスをご利用ください。

その他の連載

読むウェブ ~本とインタラクション

ディスプレイで読む活字とそのインタラクション(interaction:相互作用)について,最新Webを紹介しながら読み解いていく。

いま,見ておきたいウェブサイト

この連載では,国内外の最新のウェブサイトを隔週更新で取り上げ,これら最新サイトの特徴や素晴らしい部分を,さまざまな角度から解説していきます。

Windows phoneアプリケーション開発入門

Windows Marcketplace for Mobileがサービス開始され,作成したアプリケーションを個人でも世界をターゲットに公開できる環境が整ってきました。これを機にWindows phoneアプリケーションの開発をしてみませんか?

ここは知っておくべき!Windows Server 2008技術TIPS

5年ぶりのサーバOSとなったWindows Server 2008が出荷されて早2年。2009年にはR2が出荷され,再び注目を集めています。発売前から実施したトレーニングによって感じた,インフラエンジニアの方々に知っておいていただきたい機能を中心にご紹介します。

キーパーソンが見るWeb業界

本連載はWeb Site Expert/gihyo.jpとの連動企画です。阿部淳也, 長谷川敦士, 森田雄のお三方による,Web業界をテーマにした座談会です。

きたみりゅうじの聞かせて珍プレー

ソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。みなさんからの投稿もお待ちしてます!

ActionScript 3.0で始めるオブジェクト指向スクリプティング

野中文雄氏が,簡単なスクリプトは書いたことがあるという初級者を対象に,ActionScript 3.0の基本からクラス定義までを解説します。

まだ間に合う「ITパスポート」受験対策 原山先生の短期合格塾

この連載では,4月18日のITパスポート試験の受験に向けて,短い期間で効率良く受験対策を行う方法や,確実に得点するための裏ワザなどを伝授していきます。

連載一覧

gihyo.jp

  • DEVELOPER STAGE
  • ADMINISTRATOR STAGE
  • WEB+DESIGN STAGE
  • LIFESTYLE STAGE
  • SCIENCE STAGE
  • NEWS & REPORT

書籍案内

  • 新刊書籍
  • 書籍ジャンル一覧
  • 書籍シリーズ一覧
  • 新刊ピックアップ
  • ロングセラー
  • 電脳会議

定期刊行物一覧

  • Software Design
  • WEB+DB PRESS
  • Web Site Expert
  • 組込みプレス