大垣さんの本に秘技らしきものが

ええと。大垣さんが書いたウェブアプリのセキュリティについての入門本の130ページあたりを読んでいました。そこにまったく理解できないXSSアタックのベクタが書いてあって、その破壊力は震撼しなくてはいけないぐらいです。って恐れているのは私だけで、既にセキュリティ研究者には常識なのかしらん?

ええと。Aliceが運営しているサイトでは、他者が他のサイトの画像を貼り付けることができます。AliceのページにBobのサイトの画像を、以下のように埋め込むことができるわけです。


<img src="http://bob.tld/gazou.gif" >

このとき、Bobは、任意のJavaScriptを埋め込むことが可能である、やりかたはかくかくしかじか…と大垣さんの本に書いてあったのです。 ただし、ブラウザによって挙動が異なるとのこと。

大垣さんによれば、いくつかある方法の中で簡単なのは次のとおり。 悪意あるJSをテキストにしておいて、gazou.gifという名前でサーバーに保存。HTTPサーバの設定をいじくって拡張子がgifであっても、text/javascriptでサーブしてやればよい。

※くどいようですが。Bobが攻撃者でAliceが被害者です。また、img要素で貼り付けるだけでオッケーのようです。念のため。
※実は大垣さんの本の130ページでは上記のような攻撃者視点でのスッキリした形では書いてありませんでした。私が誤読して解釈しなおしてしまった…ということも充分にありうると思います。そうであるならば大垣さんに大変申し訳ないことをしていると思います。でも、大垣さんの本には以下のように書いてあります。


「リモート画像による」
この場合、リモート画像という言葉の意味を、私はアタッカーのサイトの画像と解釈したのでした。仮に被害者のサイトにアップロードされた偽画像であるとすると、大変に不思議な文脈になるからです。 たとえば、大垣さんによる攻略方法を解釈すると被害者のサーバの設定を変更可能でなければ攻撃が成立しない、大垣さんがあげられていたもうひとつの別攻略方法では、phpで偽画像を出力しつつtext/javascriptでサーブすると書いてあり、これは、攻撃者が既に被害者のサーバにphpスクリプトをアップロードした上実行可能であることを意味している、などです。このような不思議な文脈であるはずはありません。XSS攻撃以前にサーバを乗っ取られているとみなさざるをえないからです。このように、偽画像が被害者のサーバにおかれているということは認められませんから、偽画像は攻撃者のサーバに置かれていると考えざるを得ません。以上により、私は、被害者であるAliceを想定し、攻撃者Bobのサイトに置かれた偽画像を、Aliceのサイトのページにimg要素で埋め込まれた、と解釈したのです。ここで大事なことは、上であげたサンプルコードでも示したように、Aliceのサイトのページに埋め込まれている悪意あるimg要素のhref属性は、http://なスキームで構わない、という点にあります。javascriptな擬似スキームではありませんから、従来私が知っていたようなよくあるXSSベクタとは明らかに異なります。


しょうしょう頭が混乱してきました。大垣さんのあげられた攻撃方法は実にシンプルで強力です。私にとっては、こんな簡単なことを今まで知らなかったということに、我ながらうんざりしたことも確かです。…でも、私は、上の攻撃が成立するような、そんなブラウザの存在を知らないのです。どうしたら良いのでしょう。同書籍のERATTAのページも拝見しましたが、この件についてはあがっていません。はたしてこんなXSSベクタが本当にあるのでしょうか、識者のみなさま、PoCは入りませんから、攻撃が成立するかしないのかだけでも、ぜひぜひご教示ください。IPA/ISECが出しているXSS防御策にも影響が出るかもしれませんしね。

追記:: 上のようになったAliceのページを閲覧直後に、くだんの画像だけをマウス操作で開くことを考えてみましたが、昔のIEJavaScriptが作動したとしても、そのドメインは攻撃者のBobのサイトのそれでしょう。あんまり意味がありません。・・・referrer取得?でもそれならJSでなくてもいいじゃん…

追記:: Bobが自分のサイトのページからiframe要素でくだんのAliceのページを呼び出し、そのページにあるBobのサイト上の偽画像が悪さするというストーリーを考えてみましたが、実験するまでもなく、攻撃は不成立であるような気がいたします。 うーん。 もっと不思議な状況セッッテイがあるのかしらん?