Sageの脆弱性情報とSage-Too/Sage++への影響について

■ 自作ソフト Posted by ひぐま (Higmmer) on 2009-11-26 at 06:06:48

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

以下で言及している脆弱性は Sage 1.4.6 において修正されましたが
引き続き 適切な対策 を講じることを推奨します (2010年3月10日追記)

下記サイトにおいて、本家Sageに脆弱性が存在することが公表されています。

この脆弱性の詳細は不明ですが、情報提供者の一人であるRoberto Suggi Liverani氏はBugzillaにおいて今年2月にSageの脆弱性について以下ような報告を行っています。

上記の各報告の中に掲載されている攻撃成功時のスクリーンショットが非常に似ている点から、これら2つの報告は同一又は類似の脆弱性に関するものである可能性が高いと考えられます。

Liverani氏はBugzillaでの報告においては具体的なフィード記述例を示して攻撃方法を解説しています。また、最初に紹介した記事のタイトルが「Zero-day vulnerabilities」となっていることからも、既にこの攻撃方法が広く知られている(と彼は考えている)ことが予想されます。

尚、上記以外にも本家Sageには複数の脆弱性が存在することが当方の調査で判明しています。これらについては2年半以上も前に作者及びIPAに対して報告済みですが、現在もなお未対策のまま放置され続けている状態です(*1)。

本脆弱性が悪用された場合に予想される被害について

本家Sage 1.4.xはchromeスキームを用いてフィードを表示しています。chromeスキームはFirefox自体が動作する際にも使われている特権モードの一種です。ここにスクリプトの侵入を許すことは、Firefox本体やアドオンで実行できること全て、例えばブラウザ動作の監視や改変、外部サイトとの通信、ローカルファイルの読み書きと実行、HDDの内容の全消去など、ありとあらゆる攻撃が可能になることを意味します。しかも、たとえNoScriptを導入していたとしてもchromeスキームにおけるスクリプトの実行を禁止することはできません(ブラウザ自体も動作しなくなるため)。それどころか、Liverani氏は攻撃の一例としてNoScriptの設定を勝手に変更してホワイトリストに任意のサイトを追加する手法を挙げています。

また、この攻撃はSageの設定で「HTMLタグを許可する」をオフにしても防ぐことはできません。Firefox本体側の設定でJavaScriptの実行を禁止した場合も同様です(NoScriptの効果がないのと同じ理由)。

当方の知る限り、この脆弱性に対しては、

  • 信頼できないサイトのフィードを購読しない (消極的な対策)
  • 「コンテンツエリアにフィードを読み込む」をオフにする
  • 本家Sageの使用を直ちに中止する (積極的な対策)

のいずれか以外に有効な対策はないと考えられます。

本脆弱性のSage-Too/Sage++ (Higmmer's Edition)への影響の有無について

現時点で公表されている情報を見る限り、当方としてはSage-Too/Sage++においてはこの方法による攻撃は成立しないと推測します。

Bugzillaでの報告によると本脆弱性はフィードのdescription要素(*2)等に実体参照化されたHTMLタグを埋め込むことで任意のスクリプトの実行が可能になるというものですが、(本家Sageとは異なり)Sage-Too/Sage++ではフィード表示の直前段階において厳密なエスケープ処理を施しており、この方法によってHTMLタグを埋め込むことはできません。link要素内に特殊なURIを記述する手法も紹介されていますが、Sage-Too/Sage++ではこれを排除するための処理も実装しています。実際、Bugzillaで報告されているこれらの攻撃はSage-Too/Sage++に対しては失敗することを確認しています

また現時点において、Liverani氏や他の方からSage++に関する脆弱性の報告は受けていません。

ちなみに本脆弱性とは無関係ですが、Sage-Too/Sage++においてはフィードの各エントリ本文に対してはDOMパーサとホワイトリスト方式の組み合わせによるHTMLフィルタを採用(*3)するなど、本家Sageよりも安全性を高めるための処理を複数導入しています。

但し、このことはSage-Too/Sage++には脆弱性が全く存在せず、100%完全に安全であることを保証するものではありません。少しでも不安な方は、Sage-Too/Sage++の使用を直ちに中止することを推奨します。

尚、Sage-Too/Sage++ではフィードの表示に(chromeスキームではなく)fileスキームを使用していますので、万一スクリプトの侵入を許した場合にも特権モードで動作してしまうことはありません(但しローカルファイルの読取などの攻撃は可能)。そのような場合に備えてNoScript等を併用していればスクリプトの実行を未然に防ぐことも可能です。

(*2) 各エントリではなくフィード全体に対するdescription要素

(*3) 参考:Sage++に搭載されているHTMLフィルタに関する技術的補足 (ひぐまのひまグ)

参考:Sage/Sage-Too/Sage++の脆弱性対策状況一覧

Sage/Sage-Too/Sage++の各アドオンについて現時点において当方が把握している脆弱性対策の状況を下表に示します。
表中で「○」となっている項目はあくまで「問題未確認」であり、必ずしも「安全」であることを意味しているわけではないので注意して下さい。

  Sage++
2.2.0
2.1.3
1.3.21.2
Sage-Too
2.0.0
Sage
1.3.10
Sage
1.4.6
正規表現ブラックリスト方式 HTMLフィルタ
(旧Sageオリジナル実装)
(無効化
済み)
(無効化
済み)
× (削除済み)
Fx内蔵API使用 DOMベース HTMLフィルタ
(Sage 1.4.4以降で採用 (*4))
(非実装) (非実装) (非実装)
DOMベース ホワイトリスト方式 HTMLフィルタ
(Higmmer's Edition独自実装)
(非実装) (非実装)
「HTMLタグを許可する」をオフ ×
「コンテンツエリアにフィードを読み込む」をオフ
NoScriptを導入
(ホワイトリストが適切に管理されていることが前提)
○ (*5)
Firefox本体の「JavaScriptを有効にする」をオフ ○ (*5)
(○:問題未確認/×:脆弱性確認/?:不明) ※2010年3月10日現在 (ひぐま調べ)
(*4) 但し Sage 1.4.5 とそれ以前では実装が不十分なため脆弱性が存在。
(*5) 既知の脆弱性は Sage 1.4.6 にて修正済み。但し仮に未知の脆弱性が存在した場合、フィードに埋め込まれたスクリプトがchromeスキームで動作してしまうのを防ぐことができない。

>>続きを読む