[重要] Sage++ (Higmmer's Edition) 1.3.10 リリース

■ 自作ソフト Posted by ひぐま (Higmmer) on 2007-01-30 at 17:44:26

◆共有テーマ: Firefox [コンピュータ]

先日来皆様にご心配ご迷惑をおかけしておりましたSage++の脆弱性情報の件ですが、本日、本家Sageプロジェクトより、当該脆弱性が修正されたと思われるバージョン1.3.10がリリースされましたこれを受けて当ひまグで公開していた「Sage++ (Higmmer's Edition)」につきましても、公式版における修正内容を反映したバージョン1.3.10を本日リリースさせて頂きます(*)。Sage及びSage++に未知の脆弱性があるとの情報を受けて公開停止しました。(2/10追記) →2007/7/2より公開再開しています。

(*) Firefox本体の設定でアドオンの自動更新機能を有効にしていたり手動で更新チェックを実行してしまうといったん公式版Sageの方に更新されてしまいます(GUIDが同じため)。その場合はお手数ですが上記ページからファイルをダウンロードして再度インストールし直して下さい。 Version 1.3.10aよりGUIDを変更しましたので、アドオンの更新機能によって公式版Sageが上書きされることはありません。(2/3追記)

インストール作業が終わったら、念のためオプションパネルを開いてHTMLフィルタ方式の設定が以下の画像のようになっていることを確認して下さい。

Sage++ 1.3.10 でのHTMLフィルタ方式の設定

HTMLフィルタ方式の「高速」が無効となり、「詳細」が選択されている

尚、こちらで調査した結果、今回修正された脆弱性はSage++ 1.3.9においてはHTMLフィルタ方式が「高速」の場合にのみ発生し、「詳細」の場合は影響を受けないことを確認しております。

今回のバージョンで更新された内容は以下の通りです。

今回の更新では公式版Sage 1.3.10で行われた脆弱性対策(高速HTMLフィルタの修正)コードを一応マージしてありますが、同時に高速HTMLフィルタモードを使用不能にしたため、実際には意味を持たない修正となっております。従来のSage++で詳細HTMLフィルタモードを使用されていた場合は実動作上の違いはありません。但し、誤って高速HTMLフィルタモードに設定してしまうことを防止するために、Sage++ユーザーの方はできるだけ速やかに1.3.10にバージョンアップされることを推奨します。

この度は、私の軽率な行動によりSage及びSage++ユーザーの皆様、脆弱性の第一発見者及びJPCERT/CCの関係者の方々、並びに多くの皆様にご心配ご迷惑をおかけしてしまいましたことにつきまして、ここに改めてお詫び申し上げます。

>>続きを読む

Sage++に搭載されているHTMLフィルタに関する技術的補足

■ 自作ソフト Posted by ひぐま (Higmmer) on 2007-01-30 at 02:04:41

◆共有テーマ: Firefox [コンピュータ]

本エントリは「Sage++ (Higmmer's Edition)の高速HTMLフィルタの脆弱性対策について」に関する技術的補足です。

拙作の「Sage++ (Higmmer's Edition)1.3.9以前では「高速」「詳細」の2種類のHTMLフィルタを搭載していました(下線部追記)。両者の違いについてこちらのページでは以下のように説明しています。

  • 高速 … 公式版Sage 1.3.7以降で導入されたHTMLフィルタ。内蔵のブラックリストに一致する要素/属性を遮断する(それ以外は許可)。動作は比較的高速。
  • 詳細 … Higmmer's Edition独自方式。許可する要素/属性等を指定するホワイトリスト方式(CSSフィルタはブラックリスト方式)。フィルタの設定はカスタマイズ可能だが動作はやや遅い。

ブラックリスト方式かホワイトリスト方式か、或いはカスタマイズ可能か否か、というのも確かに相違点ではあるのですが、技術的に見た場合に両者が根本的に異なっている要素があります。それは、テキストベースのフィルタか、DOMベースのフィルタかということです。その観点から見た場合、両者の動作は次のように説明できます。

  • 高速 … テキストベースのHTMLフィルタ。正規表現に基づいて構文解析を行い、ブラックリストにマッチした要素/属性を削除する。
  • 詳細 … DOMベースのHTMLフィルタ。入力HTMLをDOMパーサで構文解析してドキュメントツリーを構築、ホワイトリストを参照しながらDOMノードを走査して不要な要素・属性をツリー上から削除する。その後、残ったツリーを(X)HTMLに変換して出力する。

これで詳細HTMLフィルタが遅い理由が分かって頂けたと思います(*)。

(*) ちなみに詳細HTMLフィルタがノードを削除・置換する様子は
about:config で "sage.filter_debug_mode" を true に設定することで観察することができます。

一見するとテキストベースの正規表現に基づく方式の方がシンプルに書けて動作速度上も有利なように思えますが、そこに大きな落とし穴があります。それは「正規表現で書かれた構文解析器と、ブラウザに内蔵されている構文解析器の動作は同じではない」ということです。便宜上、正規表現で書かれた構文解析器を「オレ構文解析器」と呼ぶことにします。

>>続きを読む