セキュリティー修正タグの投稿

2009-02-22
晴れ

携帯対応プラグイン Ktai Style バージョン 1.48, 1.70 リリース

Ktai Style 1.70 シングルポスト画面

絵文字対応の WordPress 携帯対応プラグイン「Ktai Style」の安定版バージョン 1.70 および、旧安定版 1.48 をリリースいたしました。今回のバージョンから、WordPress のバージョンごとにサポート対象の Ktai Style のバージョンが分かれます。バージョン 1.70 は WordPress 2.5 以降が対象で、旧安定版の 1.48 は WordPress 2.0〜2.3.3 が対象となります。

1.60→1.70 の変更点は次の通りです。

  • 外部サイト接続確認スクリプト redir.php を、外部からの悪用ができないようにしました。また、携帯サイトが見つかったときでも、元のリンク先とホストが異なる場合は中継画面を出すようにしました。(従来は異なるホストでも自動的にリダイレクトしていました) *** これはセキュリティー修正です***
  • WordPress 2.3.3 以前をサポート対象から外しました。動作するかもしれませんが、できれば Ktai Style 1.48 をご利用ください。EUC-JP の言語リソースの添付も中止しました。(UTF-8 の po ファイルから簡単に生成できます)
  • ニンテンドー Wii および DSi でも携帯表示になるようにしました。
  • コメント返信画面
    WordPress 2.7 以降で個別のコメントに返信するときは、コメントフォームの上に、親コメントの内容を表示するようにしました。
  • 携帯電話表示では DISQUS Comment System プラグインを抑制するようにしました。
  • WP Super Cache 0.6.8 以降の場合、手動で .htaccess を書換えなくて済むようにしました。
  • WordPress 2.7 で、コメント投稿時に端末識別情報を必須としているものの、端末識別情報が取得できなかった場合に、PHP のエラーが出るもしくは反応がない不具合を修正しました。
  • Flickr 画像が medium サイズ以外のとき、うまく表示されない不具合を修正しました。
  • Greenテーマ画面 Lovingテーマ画面 Monolithテーマ画面
    Compact テーマは Default テーマに統合しました (ただし、home.php を削除すれば Compact テーマ同等になります)。新たに、Green, Loving, Monolith の3テーマを添付しました。
  • Redportal テーマの多言語化が不十分だったのを修正しました。また、「前の NN 件」「次の NN 件」の言語リソースを Ktai Style 本体に移動しました。他のテーマでもこのローカライズ文字列が使えるようになります。
  • すべてのテーマで、フロントページを固定ページ (静的ページ) に設定しているとき、ブログページ (最新の投稿) へのリンクをフッター部分に追加するようにしました。
  • ?menu=links の URL および ks_list_bookmarks() で表示できるブログロール (リンク集) について、i-mode, EZweb, Yahoo! ケータイ、ディズニー・モバイルの場合、中継ページ経由のリンクになるようにしました (従来はすべて直接リンクになっていました)。
  • 管理パネル (ダッシュボード/コメント一覧) から、コメント返信できるようになりました。
  • Ktai Style 投稿一覧画面
    管理パネルの投稿一覧・ページ一覧に、それぞれの投稿についたコメントの一覧を見られるリンクを付与しました。
  • 投稿やページの本文で2行目以降の行頭にスラッシュ(/)がある場合、携帯閲覧時や携帯での投稿・ページ編集時に行頭のスラッシュが欠落してしまう不具合を修正しました。
  • 年別アーカイブ用のメニュー (menu_years.php) を追加しました。ここで年を選ぶと、その年の月別アーカイブが表示されます。
  • すべてのテーマで、下矢印を示すローカライズ文字列を ↓ に変更しました (従来は「v」という文字を下矢印にしていました)。また、functions.php にあったコメント関連の関数を comments.php に移動しました。
  • iモード端末の場合、big, small 要素が無効のため font size 要素もしくは span style=”font-size:bigger/smaller” に書換えるようにしました。逆に、EZweb 端末の場合、font size=”+1″, font size=”-1″ が効かないため、big, small 要素に書き換えるようにしました。
  • ks_use_appl_xhtml() テンプレートタグによる、HTML からインラインスタイルシートへの変換機能の精度を向上させました。font 要素が入れ子になっていても正常に動作するなどの改良が行なわれています。(Green, Loving, Monolith テーマが対象)
  • 携帯向けページ分割位置を示す start paging, end paging にパラメータを与えれば、分割時の罫線 (<hr />) をカスタマイズできるようにしました。
  • ks_term_name() が au の新機種に対応しました。
  • ks_in_network() がウィルコムの IP アドレス削減に対応しました。
  • ks_comments_link() で、コメント数を示すパラメーターが空文字列のとき、コメント数表示自体をしないようにしました。つまり、コメントがあるときのみコメント数を表示する/コメント停止中のときはその表示自体を隠すようなデザインが可能になります。
  • ks_comments_link(), ks_comments_post_link(), ks_back_to_post() でリンク用文字列を内部で HTML エスエープするのをやめました。このため、HTML を渡すとそのまま表示されます。適宜、テンプレート側で wp_specialchars() などを使って HTML エスケープしておいてください。
  • ks_switch_pc_view(), ks_switch_inline_images() のリンク色を指定できるようにしました。文字の背景色を暗い色にしている場合、リンク色を明るい色に変更して見やすくできます。
  • 次のテンプレートタグを廃止しました: ks_get_ordered_link() (ks_ordered_link() で代替できるようにしました)。
  • 次のテンプレートタグを追加しました: ks_ext_css_available(), ks_page_title(), ks_excerpt(), ks_cut_html(), ks_dropdown_categories(), ks_get_admin_user()
  • 次のテンプレートタグの引数を、配列やクエリー文字列でも可能としました (オプションも増えています): ks_content(), ks_login_link(), ks_ordered_link(), ks_comments_link()
  • external_link フィルターフック用に $icon 引数 (外部サイトを示す絵文字アイコン) を追加しました。絵文字の変更や除去に使えます。
  • split_page_navi フィルターは、sprint() 用のフォーマット文字列ではなく sprint() フォーマットした後の HTML 文字列を渡すようにしました。
  • 次の独自フィルターフックフィルターフックを追加しました: redir_error

1.47→1.48 の変更点は次の通りです。

  • 外部サイト接続確認スクリプト redir.php を、外部からの悪用ができないようにしました。また、携帯サイトが見つかったときでも、元のリンク先とホストが異なる場合は中継画面を出すようにしました。(従来は異なるホストでも自動的にリダイレクトしていました) *** これはセキュリティー修正です***
  • サポート対象を WordPress 2.3.3 までとしました。WordPress 2.5 以降では Ktai Style 1.61 以降をご利用ください。
  • ニンテンドー Wii および DSi でも携帯表示になるようにしました。
  • 携帯電話表示では DISQUS Comment System プラグインを抑制するようにしました。
  • 投稿やページの本文で2行目以降の行頭にスラッシュ(/)がある場合、携帯閲覧時や携帯での投稿・ページ編集時に行頭のスラッシュが欠落してしまう不具合を修正しました。
  • WordPress 2.0 において、コメント投稿時にコメント本文など必須項目を入力していない場合や、外部サイト接続確認を表示しようとすると PHP のエラーもしくは白紙画面になる不具合を修正しました。
  • WordPress 2.0 で <!--nextpage--> でページ分割させた場合、menu_links.php テンプレートを表示させたとき、または ks_list_bookmarks() を使ったとき、画面が途中で途切れる不具合を修正しました。
  • Redportal テーマを EUC-JP 環境でも文字化けしないようにしました。
  • ks_use_appl_xhtml() テンプレートタグによる、HTML からインラインスタイルシートへの変換機能の精度を向上させました。font 要素が入れ子になっていても正常に動作するなどの改良が行なわれています。(ただし、附属テーマは ks_use_appl_xhtml() を使用していません)
  • ks_term_name() が au の新機種に対応しました。
  • ks_in_network() がウィルコムの IP アドレス削減に対応しました。
  • 次のテンプレートタグを追加しました: ks_cookie_available(), ks_ext_css_available(), ks_get_next_num()
  • split_page_navi フィルターは、sprint() 用のフォーマット文字列ではなく sprint() フォーマットした後の HTML 文字列を渡すようにしました。
  • 次の独自フィルターフックフィルターフックを追加しました: redir_error
WordPress 2.5 以降用: ktai_style170.zip (517.3 KB)
より新しいバージョンが出ています。
WordPress 2.0〜2.3.3 用: ktai_style148.tar.bz2 (256.6 KB)
13:50ごろ、ドキュメントを直した版に差し替えました。

今回から、予告通り WordPress のバージョンによって、サポート対象の Ktai Style を分離しました。WordPress 2.3.3 以前を使っている人には申し訳ないですが、Ktai Style 1.48 をご利用頂くか、WordPress をバージョンアップして頂きますようお願いします。(追記: WordPress 2.3 以降は UTF-8 版しか存在しないため、Ktai Style 1.70 はEUC-JP の言語リソース添付を中止しました。EUC-JP を利用する数少ない例外は XOOPS モジュール版 WordPress の XPressEUC ぐらいだと思いますが、これの利用者の方には手動で ktai_style-ja_EUC.mo を作って頂きますようお願いします。Ktai Style 1.48 の方は EUC-JP の言語リソースがあります)

Ktai Style 1.48, 1.70 における大きなトピックは、外部サイト中継用スクリプト redir.php の悪用対策を打ったことです。Ktai Style 0.97 ごろから、外部サイトへのリンクに中継ページを使うようにしましたが、このときは必ず中継ページが出たため悪用する意味がありませんでした。しかし、バージョン 1.40 から相手先に携帯サイト URL を示す Mobile Link Discovery があるか確認し、あればそこに自動的にリダイレクトさせるようにしました。これによって、任意の Ktai Style 利用サイトにある redir.php を経由して悪意あるサイトにリダイレクトする URL を作ることができてしまいます。ただし、redir.php への接続は従来から携帯端末に限定してたため悪用は困難でした。今回、一定時間ごとに変化するランダムな文字列 (ノンス) をキーとして redir.php に与えることを必須としたため、悪用はさらに難しくなりました (コメントやトラックバック等で悪意あるサイト URL を送り込んで携帯サイトに表示させるしかない)。

ホストが違うときの中継ページ画面

また、携帯サイト URL を発見したときでも、ホスト名が元のサイトと異なる場合は「怪しい」と判断して中継ページを出すようにしました。世の中には、ネタフルのように、マトモなサイトであっても PC サイト (netafull.net) と携帯サイト (netafull.jp) のホスト名が違う場合がありますが、こういう事例は例外に近いでしょう。作者としては、PC サイトと携帯サイトの URL が同一であるべきと思います。

Yuriko.Net では、アクセスログを見る限り悪用された形跡はなさそうなのですが、さらなるセキュリティー向上をめざして、対策を打つことにしました。Ktai Style 附属テーマをそのまま使っている場合は、特に作業は不要です。自作テーマにおいて独自の redir.php テンプレートを作っている場合は、修正が必要です (附属ドキュメントや附属テーマを参照してください)。お手数をおかけしますが、よろしくお願いします。

Ktai Style 1.70 の開発におきましては、多くの方から頂いた改善案や不具合報告が助けになりました。まことにありがとうございます。今後も、お気軽に、質問・要望・不具合報告を寄せて頂ければ幸いです。

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 をご利用頂きますようお願いします。

2009-01-14
晴れ

WordPress メール投稿プラグイン Ktai Entry 0.8.9 リリース

WordPress 用メール投稿プラグイン「Ktai Entry」のバージョン 0.8.9 をリリースいたします。変更点は以下の通りです。

  • 画像を添付しないときの問題2点、本文に SQL コマンドを書くと実行できることがある脆弱性、および、publish_phone フックを利用するフィルターが正しく実行されない不具合、を改善しました。*** これはセキュリティー修正です ***
  • ウィルコムの新しいメールアドレス willcom.com に対応しました。
  • ソフトバンク 3G 端末および EMNet 利用のイー・モバイル音声端末から Gmail に絵文字送信した場合の絵文字検出に対応しました。
  • iPhone (ファームウェアバージョン 2.2 以降) からの絵文字送信に対応しました。
  • メールメッセージの解析に失敗したとき (添付ファイル付きメールが異常な場合など)、「No sender address found.」ではなく、「Invalid MIME structure」のメッセージを出すようにしました。
  • Nokia 製端末で添付ファイル付きメールを送信したとき、Ktai Entry が添付ファイルの解析に失敗して「No sender address found.」のエラーを吐いていた不具合を改善しました。
ダウンロード: ktai_entry089.tar.bz2 (87.7 KB)
より新しい版が出ています。

今回は、セキュリティー修正1件、ソフトバンク 3G・iPhone 2.2・イーモバイルの絵文字対応、ウィルコムの新メールアドレス (なんちゃら@willcom.com) への対応、およびバグ修正です。willcom.com は明日1月15日から提供されるので、それに合わせてリリースした次第です。旧バージョンでは絵文字が認識されないので、新アドレスを入手した人は、0.8.9 の利用をお願いします。

セキュリティー修正がありますが、攻略するには、メール投稿できる権限が必要であり、また、データベースを削除したりの SQL コマンドは実行できないと考えられるため、あまり重大ではありません。

Nokia 製端末での不具合は、フォーラムに投稿された報告をもとに修正したもので、すでにかーきさんがウェブで公開された内容を、より厳密にした (シングルクォートだけいじるようにした) ものです。

以前、ベータ版として「0.9.0 ベータ1」を出しましたが、新機能の追加が少ないため、バージョン番号は 0.8.9 といたしました。0.9.0 は次のバージョン番号として、いよいよ「カテゴリー一覧をメールで取り寄せる機能」などを実装しようかと思っています。zip 形式での配布も次回から採用する予定です。

2009-01-07
くもり

Mobile Eye+ パッチ (その2) リリース

ゆりこ による 13:07:37 の投稿
カテゴリー: WordPressハック
タグ: , , , , , ,

以前公開したMobile Eye+ へのパッチですが、セキュリティーホールが発見されたため修正版をリリースいたします。

  • 全角→半角変換に伴なうセキュリティーホールを修正します。
  • イー・モバイルの音声端末 H11HW, H12HW でも携帯表示にします。(EMONSTER, Touch Diamond 等スマートフォンは携帯表示になりません)

ダウンロードは「Mobile Eye+ パッチ配布ページ」から行なってください。急いで修正を行ないたい場合は、mobile_eye/lib/functions.php だけ更新すれば OK です。なお、脆弱性の詳細については後日発表いたします。

Ktai Style 1.60-beta3 配布

ゆりこ による 06:48:16 の投稿
カテゴリー: WordPressハック
タグ: , , ,

Ktai Style 次期バージョン 1.60 のベータ版 (その3) を配布いたします。ベータ版その2からの変更点は以下の通りです。

  • classic テーマに存在したセキュリティーホールを修正しました。
  • 画像をインライン表示しているとき、元画像のサイズが 50KB 以下ならば元画像へのリンクを携帯用サムネール画像に直接付与するようにしました。それ以上のサイズの場合は、従来通り、画像の後ろに「元画像 (xxxKB)」というテキストリンクになります。
  • ページ編集画面で、2ページ目以降が表示されない不具合を修正しました。
  • 次のテンプレートタグを標準搭載しました: ks_convert_kana()
ダウンロード: ktai_style160-beta3.zip (465.8 KB)
ベータ4を配布開始しました。

今回は、Ktai Style 1.47 同様の classic テーマのセキュリティー修正に加えて、編集機能のバグ修正です。今回のベータ版は、ほぼ正式版レベルといえる状態です。ただし、WordPress 2.7 で導入された、コメントのページ分割処理については未実装です。URL に comment-page-NN が含まれる場合にコメント一覧画面を出すだけで、何ページ目かどうかは判断していません。これを実装すれば正式版とする予定です。

今回は試しに zip 形式での配布としてみます。tar.bz2 よりもファイルサイズが増えますが、WordPress 2.7 ではインストールが簡単になるはずです。

携帯対応プラグイン Ktai Style バージョン 1.47 リリース

Ktai Style サンプル画面

絵文字対応の WordPress 携帯対応プラグイン「Ktai Style」の安定版バージョン 1.47 をリリースいたしました。1.46 からの変更点は次の通りです。

  • classic テーマに存在したセキュリティーホールを修正しました。
  • EZweb の新しい IP アドレス帯域に対応しました。
  • 最新コメント一覧で、下書き/レビュー済み/非公開の投稿・ページに対して付与されたコメントを除外するようにしました (従来はリストされてしまっていました)。
  • ドコモ mova, ソフトバンク PDC において、本来出ないはずの「画像:表示する | リンクに変換」の切り替えメニューが出る不具合を修正しました (Ktai Style 1.44 からエンバグ)。
  • イー・モバイル音声端末用の個別テーマを PC 向け管理パネルで選択しても反映されない不具合を修正しました。
  • 管理機能の投稿一覧で、投稿者での絞り込みが動作していなかった不具合を修正しました。
  • 携帯電話で新規投稿したとき、wp_posts テーブルの guid フィールドが、スラッシュ (/) で始まるパス文字列になっていた不具合を改善しました。(パーマリンクの URI 形式で格納)
  • 次のテンプレートタグを追加しました: ks_convert_kana()
ダウンロード: ktai_style147.tar.bz2 (248.3 KB)
より新しいバージョンが出ています。

今回はセキュリティー修正が入っていますので、すべてのユーザーに早急なアップデートをお願いいたします。ただし、影響するのは classic テーマ (およびそれを改造したもの) を使っている場合だけですので、それ以外のテーマを使っている場合は慌てなくても大丈夫です。脆弱性の詳細については、後日公開する予定です。

WordPress 2.7 にきっちり対応した Ktai Style 1.60 は順調に開発が進んでいますが、まだ未実装の機能があるので、とりあえずベータ3として配布することにします。とはいえ、WordPress 2.7 を使っているならば、1.47 よりも 1.60 ベータ3 の方がおすすめです。

2008-05-07
晴れ

携帯対応プラグイン Ktai Style バージョン 1.34 リリース

Ktai Style 1.32 サンプル画面

絵文字対応の WordPress 携帯対応プラグイン「Ktai Style」のバージョン 1.34 をリリースいたしました。今回はセキュリティー修正を含んでおり、バージョン 1.20 以降の利用者はこのバージョンへの更新が必須です。変更点は以下の通りです。

  • WordPress 2.3.3 以前において「絵文字投稿を許可する」設定にした場合、投稿本文にシングルクォート (‘) を含む場合に、投稿編集に失敗する不具合を修正しました。*** これは Ktai Style 1.20 〜 1.33 に存在するセキュリティー欠陥です ***
  • WordPress 2.5 以降において、「絵文字投稿を許可する」設定でコメント編集をするとシングルクォート (‘) の前にバックスラッシュ (\) がついてしまう不具合を修正しました。
  • ウィルコム絵文字で 0xF052 は「バイク」が正当なため、変換テーブル等を修正しました (従来は「船」だと思っていました)。
  • Nokia 端末の判別で取りこぼしがあったのを修正しました (ソフトバンク X02NK など対応)。
  • 投稿一覧で、ワード検索が正常に動作していなかった不具合を修正しました (Ktai Style 1.30 でエンバグ)。
  • テンプレートタグ ks_mb_get_form() において、絵文字投稿の設定によってエスケープを外す/外さないの違いがあった問題を修正しました (エスケープありのままとしました)。
ダウンロード: ktai_style134.tar.bz2 (196.4 KB)
バージョン 1.35 をリリースしました。

今回は単純なバグ修正ではなく、セキュリティー修正を含んでいます。ただし、攻撃を行うには当該ウェブログに投稿できる権限が必要なため、影響は軽微と思われます。編集機能のバグは、セキュリティー欠陥に繋がる恐しいものだったのですね〜〜。

正直なところ、WordPress の API に与えるデーターを「DB 用にエスケープしたものにする」というルールがいまいちに思います。WordPress 2.5 以降はプリペアードステートメントが導入されたので、「エスケープしないデーターを与える」方が自然に思えるのですが、そうするとプラグインの対応が大変になるかもしれません。だいたい、wp-settings.php で $_GET, $_POST をまるごと magic_quote しているのは、安全ではあるもののいまいちですよね ;-)