Cambria Mathフォントを使用したUI偽装

Office製品(又はPower Point Viewer)に付属する数学記号フォントのCambtia Mathには、次のような特徴があります。

  1. BMP外のコードポイントの文字(サロゲートペアで表現される文字)のグリフがある
  2. 数学記号のグリフが充実している(他のフォントは持っていないことが多い)
  3. 一部の文字の行高が極端に高い(上下に文字自身の2倍近いの高さの余白がある)
  4. 通常使用フォントにグリフが無い場合に、代替としてCambria Mathが使用される場合がある(詳しいメカニズムは知りません)

そのため、Cambria Mathでしか表示できない文字を含む文字列をアプリケーションに渡すと、Cambria Mathの異常に高い行高によって表示が乱れてたり、行が表示領域の外にはみ出して必要な情報が読み取り不能になってしまったりします。

実例

これを利用したUI偽装の実例の1つが Firefox 3.5.3 で修正されたURL偽装の脆弱性 CVE-2009-3087 (MFSA 2009-50, 過大な行高のUnicode 文字を通じたロケーションバーの偽装)です。

これは、Cambria Mathの巨大な余白の取り扱いに問題があり、文字列の表示エリアがロケーションバーの下にはみ出して空のように見えてしまうというバグでした。

修正

 当初、

インストーラが自動的にFontlinkを設定する(つまり、数学記号のグリフが無いフォントを使っていると勝手にCambria mathが使用される)

と書いたのは間違いでした

2009/11/17,2009/11/30,2009/12/02修正

fontlinkについての間違いの修正など