Yuriko.Net 個別記事

2009-01-17
晴れ

mb_convert_kana の a オプションで XSS 脆弱性

ゆりこ による 14:45:58 の投稿
カテゴリー: WordPressハック,ソフトウェア
タグ: ,

先日修正した、Ktai Style および Mobile Eye+ パッチの脆弱性ですが、詳細を公開しておきます。リリース時に公開した情報としては、Ktai Style では「classic テーマに存在したセキュリティーホールを修正」であり、Mobile Eye+ パッチでは「全角→半角変換に伴なうセキュリティーホールを修正」となっていましたが、具体的には「コメントやトラックバックの表示に関して XSS 脆弱性があった」のです。

これは、全角→半角変換で、mb_convert_kana() 関数を a オプション付きで使っていたのが原因でした。このため、(いわゆる) 全角の英数字のみならず、記号類も半角に変換されていました。つまり、<, > というかっこが <, > になってしまったのです。これだと、コメントに以下のようなコードを書かれてしまうと、半角変換によって、JavaScript コードとなってしまいます。

 <script>alert(document.cookie);</script>

しかし、シングル/ダブルクォートは WordPress によってエスケープされるため、以下のコードは通りません。

<script>alert('hogehoge');</script>

シングル/ダブルクォートが使えないため、危険なコードを作るのは困難でしょうが、それでも安全とは言い難いです。

対策としては、a オプションを使わないのが一番確実でしょう。Ktai Style, Mobile Eye+ の場合、画面出力すべてをバッファリングしてその結果を mb_convert_kana() に通しているため、HTML エスケープすることは不可能です (変換前に HTML コードが含まれているため)。といって、<, > に変換されそうな全角記号を先に &lt;, &gt; に置換しておくのは、漏れがありそうで怖いです。

なお、MobilePressNEO は、逐次全角→半角変換を行う方式でしたが、今のところ a オプションをやめる方向で直しています。ちなみに、MT4i の方は、Encode モジュールおよび Jcode.pm による全角半角変換は厳密に英数字のみなので、この脆弱性はないようです (作者にも確認ずみ)。

この脆弱性の発覚により、未パッチの Mobile Eye+ は大変危険な状態となりました。すぐにパッチを当てるか、PHP を 5.0 以降にして Ktai Style をご利用頂きますようお願いします。

トラックバック・コメント »

  1. [...] Yuriko.Netのゆりこさんから、脆弱性に関するご連絡をいただきました。 詳細は→mb_convert_kana の a オプションで XSS 脆弱性 [...]

上に戻る

※スパム対策プラグインの影響により、すぐにトラックバックが反映されない場合があります。お手数ですが、半日ほど待ってみてください。

コメント投稿

※発言の責任を明確にするため「名無し」「通りすがり」「匿名希望」等の匿名は不可とします。捨てハンドルでもいいので必ず名乗ってください。
XHTML (使えるタグ): <a href="" title="" ktai=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <img localsrc="" alt=""> .
※スパム対策プラグインの影響により、すぐにコメント内容が表示されない場合があります。お手数ですが、半日ほど待ってみてください。

上に戻る