■XSS脆弱性はどこに隠れているのでしょう

XSS脆弱性の隠れ場所

本来、HTMLの世界って静かなもので便利なリンクがあるハイパーテキストだったわけでして。いつのまにやら動的なコンテンツ、WebアプリケーションやCGIが登場して、うかつなことにXSS脆弱性も誕生した、そのように捉えていてほぼ間違いないことは衆目の一致するところでしょう。インターネットで商売したり個人情報を預けたりする割りにはイロイロな種類の問題が起っています。要するに対話型のインターフェースを具現した時にXSS脆弱性は産声をあげたと。

XSS脆弱性はどこに生まれたのでしょう、そしてどこに隠れているのでしょう。サーバOSにもありますね、ブラウザにもあるかな、メーラにもあるかも。httpdにもあるかな。各種ミドルウェアにもあるかな、Webアプリにもあるかな、CGIと呼ばれているのも要注意。これらのアタリを注意しておけばいいのかな?

静的なHTML文書にもXSS脆弱性はありうる?

WebアプリやCGIは、HTML文書のようなものからユーザ入力を受けてなんらかの加工をサーバ側で行い、その結果をブラウザに返すわけですね。ですので、よくあるXSS脆弱性の解説や図表では、そのことがよくわかるように書いてあり描いてあるわけです。ユーザの入力をサーバでチェックせずに出力するからXSS脆弱性が発生するのだと。そのへんがよくわかるわけです。

以前からこれらの図解にはちょっと違和感がありました。なんだかわかりませんがサーバへの攻撃のように見える図解がほとんどだからです。まぁ初学者が見れば一瞬間違えるのかなぁと思うだけなのです。それにしても、もっともっと、本質的にはブラウザへの攻撃であることを示す方法は無いものかとずっと考えているのですが良い方法は見当たりません。

ずっと前に考えたこと、、のひとつなのですが、そもそもサーバとの対話を全く考慮にいれないXSS脆弱性はあるのか、具体的にはWebアプリケーションやCGIなどではなく、単なるHTML文書、そのへんにあるHTMLエディタでほいほい作っておいて、CGIなどの使用を禁止されているサーバにアップロードした時点でXSS脆弱性が発生する事例はあるのか、などと、一時期真剣に考えました。ありえないと思いますでしょうか?たとえばジオシティーなど、CGIの設定なり使用なりは不可能ですがXSS脆弱性については考えなくてもいいのでしょうか、そんな理念的なことを昔、集中的に考えたものです。

語弊がある言い方で申し訳ないのですが、静的なHTML文書にもXSS脆弱性はありうる?のかと言う質問です。神様はよくしたもので真剣に問えば答えをくれるらしぃですね。ありうるのです。この結果を得たのは、ずいぶん前です。忘れちゃうほどの過去です。office氏がとある世界的なベンダーのサイトにある脆弱性を報告し修正してもらっている、その後その脆弱性は修正され、とりたてて話題になることもなく時は過ぎ去っていったのですが、そんななか、なんだかモヤモヤしたものが私にあったのは事実です。HTML文書であってもXSS脆弱性がありうるのだと気がついてしまったからです。office氏の指摘はまったくもってめずらしいタイプのCGI?に対するものでした。恐らく世界にひとつしかなかったのではありますまいか。そして一歩進めば、理念的には、静的なHTML文書にもXSS脆弱性はありうる、ということを示していたのです。

静的なHTML文書にもXSS脆弱性はありうるけれど心配不要

その後なにくれとなく、そのテーマは私の中でアラートを出し続けていました。幸いなことに、同種の脆弱性を持つようなページなりサイトなりとは出会いませんでした。尋常な精神ならばそんなにめずらしいXSS脆弱性を内在するHTMLページなど作りえないのです。既に私はその種のXSS脆弱性などこの世には、(実用上)存在していないだろうと推測しています。心配不要でしょう。恐らく。(追記:この文章を書いた後、結構事例があるのだと気がつきました。Googleで検索できるほど多量に。)

ネタなのか嘘なのか

誓って真実です。実験環境として(どこでもいいのですが)たとえばジオシティーにてCGIを使わずにXSS脆弱性が発生するたった1ページのHTMLファイルをアップロードしたことがあります。別な罠ページで仮にXSS脆弱性を露呈するような罠リンクを作ったとして、被害者に踏ませたとしても、サーバへはその仕掛けの本体は伝送されません。サーバ側のいかなるログにも証拠は残らないのだろうなぁと強く確信しています。サーバはほとんど何もしません。HTMLファイルをブラウザからのGET要求にしたがって提供するだけです。対話型の(セッションを伴う)サービスなどはしないのです。それゆえ、サーバ側に痕跡など記録されずフォレンジック的には少々まずいかもしれません。

このことは、XSS攻撃がブラウザへの攻撃であることを強く示唆しています。

私達が住んでいるこの世界には、上であげた理念的なモデルに合致する脆弱性は存在していません。ですので、心配は不要です。たぶんに畸形なのでしょう。もしもXSS脆弱性について調べたければ、XSS脆弱性を孕んでいるHTMLファイルを作成してみることにチャレンジしてみてください。

特定のブラウザの性質を使いますが、そのブラウザの脆弱性ではありません。HTML文書の作り方がアホなだけです。(^^)わざとヨワヨワにしてみましょう。発想の転換できっとすぐにわかりますよ。

次の日に続きます。