Yuriko.Net 個別記事

mb_convert_kana の a オプションで XSS 脆弱性
先日修正した、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 コードが含まれているため)。といって、<, > に変換されそうな全角記号を先に <, > に置換しておくのは、漏れがありそうで怖いです。
なお、MobilePressNEO は、逐次全角→半角変換を行う方式でしたが、今のところ a オプションをやめる方向で直しています。ちなみに、MT4i の方は、Encode モジュールおよび Jcode.pm による全角半角変換は厳密に英数字のみなので、この脆弱性はないようです (作者にも確認ずみ)。
この脆弱性の発覚により、未パッチの Mobile Eye+ は大変危険な状態となりました。すぐにパッチを当てるか、PHP を 5.0 以降にして Ktai Style をご利用頂きますようお願いします。
[...] Yuriko.Netのゆりこさんから、脆弱性に関するご連絡をいただきました。 詳細は→mb_convert_kana の a オプションで XSS 脆弱性 [...]