■Mozillaにクロスサイトスクリプティング脆弱性の可能性

Full-Disclosure ML を見ていたら変なものが。

Mozilla系にて下記のようなソースで外部JSを呼び出せてしまうとのこと。

<html>
<head>
</head>
<body>
  <p>If you cannot see "VULNERABLE" below, the browser is safe.</p>
  <div>
    <script src="indexvuln.js"
  </div>
  <p>I am able to parse text after the script tag above.</p>
</body>
</html>

デモページは、http://smgl.positivism.org/music/indexvuln.htmlです。

仮にSGML的に正しいのであるのならば各サイトのサニタイズが安全であることを検証するべきですし、そうでなければ至急パッチが出なければなりません。でもサイト側ではこういう閉じタグないのまで面倒みきれないかもしれませんね。SGMLの短縮記法に関係あるのかしら。明日あたりばけらさんのサイトに行って色々参考文書を見てきたいなぁ。上のコードをもっときっちり書いてヴァリデーションすれば参考になるかなぁ。

鳩丸よもやま話 : SGML の短縮タグ機構
http://bakera.jp/hatomaru.aspx/yomoyama/shorttag

追記:これについての分析のオリジナル出典

最初、ここに書かれた模様ですね。

Bug 226495 - Mozilla parses "half-tags" gullibly, leading to XSS security problems
http://bugzilla.mozilla.org/show_bug.cgi?id=226495

で、この記事の本論をはずれていますが思ったこと。"<.*?>"でのみタグを取り除いているツモリのヘタレなCGIなりアプリなりって、そんなに多くはないのではないのかなぁとか。で、なぜ、数値文字参照実体参照を使わない?ってところでしょうか。一方、あえてHTMLなりなんなりを書き下すことを許すサービスって結構あるのですが、凄く不安なのは、そのような場合の一般的なXSS脆弱性防衛策って、決定版が出ていないような気がするのですよ。こうすれば安心、みたいな定本ってどこかにあります?

スタイルアタック防衛策の観点から分類すると2通りぐらいあるのでしょうか。ええっと、スタイル属性全面禁止でスタイル要素を出きる限り自由に書いてもらおう、という方式ですと、他ならぬ、この「はてなダイアリー」が代表格かもしれません。逆に、スタイル要素全面禁止で、スタイル属性のみ可能な限り許そう、という方式もありまして、Htmlfilter for PHPは、かなり固そうです。PHPだけどソース公開中なので何しているか良くわかるし。ksesも定評高いのではありますまいか。ksesはいじったことないので実感わきませんが。

追記:スラッシュ

既述、ばけらさんのSGML の短縮タグ機構のお話を読んで連想したことがあります。属性の略記の説明、特に引用符の省略について、もやもやと。

HTMLはSGMLの上に構築されていますので、短縮タグ機構は有効です。XHTMLXMLの上に構築されていますので短縮タグ機構は無効です。さて、短縮タグ機構は、ばけらさんも仰る通り、どうしても使わないと駄目な一部の例外(ブラウザのバグ起因)を除いて、使わないでおいたほうが良いでしょう。ところが、この短縮タグ機構を、割合と多くのWebアプリがときたまヤラカシているような気がします。どういう局面かと云えば、属性値における引用符の省略なんですね。省略しているCGIとか、まだまだあると思います。で、これはXSS脆弱性の発現するポイントでもあるのです。詳しくはIPAのサイトでXSS関連の防衛についての資料が出ています。まぁ基本なのですが、引用符を省略しているととんでもないことがおこりえます。

さて、とあるXSS防衛策として次のようなものが(かつて)ありました。サニタイズは以下のものをするべし、と。

  • スペース → &nbsp;
  • & → &amp;
  • < → &lt;
  • > → &gt;
  • " → &quot;
  • ' → &#39;

いやぁ、めずらしいですね。スペースをサニタイズしろって何?なのですが。このサニタイズ案を発表されていた人の説明を読んで見たら、実はコレ、世のCGIやWebアプリが引用符省略をしばしば行っている現状を踏まえての対抗策、だったのです。引用符を省略すると何が悪いかというと、属性を勝手に追加される、ということなのですね。思いつかない人は上で挙げたIPAのテキスト参照。で、スペースを実体参照してしまえば悪意ある属性の追加は出来ないだろうと。

一瞬、ナイス!と思いました。布教して廻ろうと思いました。だっていかにも有効そうなのですもの。ほどなくしてガッカリしました。これでは防衛になっていないことに気がついたからです。スラッシュ(/)を使うと属性値から次の悪意ある属性を分離するケースが多いのです。シェアが高いWindowsIEではスラッシュが以下のように使えます。

<img/width=30/height=20/src="hoge.png">

ですのでスペースをサニタイズしても無駄無駄無駄無駄ァ!!ということになりかねません。属性を挿入するときに空白を用いずスラッシュを使えばいいいからです。onerror属性などを挿入したりとか容易くなってしまいます。

当時は、WinIEってなんてお馬鹿さんなの!と憤慨しました。でもひょっとして、このスラッシュって、SGMLの短縮タグ機構と関係あるのかも、と、、ふと思ったのです。いや、正しく実装しているとか、そういうことではなくて、実装しそこねている、のかもしれないと思いまして。NET関連で。

結論。何はともあれ、スペースをサニタイズするとか考える前に、引用符をしっかりつけましょう、ということです。ユーザからの入力がありえない時でも、そのような習慣をつけておきましょう。いつ使いまわしされるかわかりませんから。

以上でもやもやとした考えについての記述終了です。

■ブラックホールは帯電するか

Junkyard Review: ホーキング、また賭けに負ける

otsune様のvoid GraphicWizardsLair( void );(20040717)経由で以下の記事を読みました。

Junkyard Review: ホーキング、また賭けに負ける
http://lts.coco.co.jp/isana/review/view.cgi?search_id=20040616011756

なんて読みやすい記事でしょう。ホーキングさん、かつてブラックホールの蒸発について(上記記事参照)語り、またブラックホールエントロピーまで定義して見せてくれましたのに。その時には確か情報も消えるとかおっしゃっていましたねぇ。

じゃぁ類似の思考実験。情報ではなく電荷(物理量)ではどうか。適度に成長したブラックホールを充分に隔離した後、電子・陽電子の対発生を別途行っておき(これは医療で使われています。PET。)陽電子のみをブラックホールに多量に投げ入れて行きます。思考実験だからお金がかかることは気にしない。すると、正電荷に帯電したブラックホールが出来るのか?

ホーキングさんがブラックホールの蒸発を最初に謳ったときに、確かブラックホールに吸いこまれた物質の電荷も意味を持たなくなるとかおっしゃっていなかったかしら。記憶違いならごめんなさい。

さて、自信がないのは棚に上げて。仮に帯電していないとする。ブラックホール表面で空間が揺らぎ、正物質と反物質の対発生がおこり、片割れがブラックホールに吸いこまれ片割れがブラックホールから遠ざかる、これがブラックホールの輻射だ。この時、輻射されて出てきたブツの電荷は恐らく確率的に正も負も等しいだろう。ブラックホールが蒸発しきった時点で考えると、それまでに輻射されたブツの電荷の総和は統計的にニュートラルだと考えられる。すると、ブラックホールを帯電させようと陽電子をさんざん打ちこんだ為に手元には過剰に負の電荷が残る事になる。これは電荷の保存則に反しないだろうか。矛盾は発生したいないだろうか。もしくは、ビッグバン以後宇宙に反物質が充分にないことは(電荷ではないが)このアナロジーでトンデモ説明が出来ないか。

ずいぶんとあやしくなってきた。陽電子をさんざん打ちこんだ後のブラックホールが正に帯電していないと考えると上のような感じだ。で、もうひとつの可能性を考えて見る。ブラックホールは正に帯電する、という考えだ。ブラックホールの表面で対発生がおこると、正に帯電した粒子群はブラックホールにクーロンの反発力を感じて輻射されるはずだ。負に帯電した粒子群はクーロン力ブラックホールに引きこまれるはずだ。結果、ブラックホール内では若干ではあるが正電荷が中和されることになり、また、輻射は正の電荷を帯びたものになるはずだ。つまりブラックホールは蒸発の際に正電荷もあわせて輻射することになる。また、最終的にはブラックホールが全部蒸発しきった時には、正電荷の粒子群れは全部輻射されていることだろう。かくして、陽電子を打ちこむ前と比べてブラックホールが蒸発完了した時点では電荷のバランスはくずれていない事になる。

うーむ。どっちが定性的に正しいのかなぁ。ブラックホールは帯電しますか?また、電荷がなんぼ、という情報量をブラックホールは保持しますか?

ホーキングさんの今度の発表が上の私の思考実験と全く無関係であることを保証いたします。すみませんが、さっきまで友達と飲んでいました。このブラックホールについての話はヨタです。申し訳ありません。