お世話になります。カトーです。この見ているサイトは、リニューアル時に テーマを作り直すのが、面倒だったので、 サポート付き有料テーマに釣られて入れていたのですが、某所から検索の部分に脆弱性ありますよとの連絡。おいおい、WordPress自体は最新で、プラグインもいつも最新で、有料でサポートされているテーマを利用してるのにそれはないだろ……と思って、調べるとテーマが独自に追加している関数が受け取りデータをパースしてない状態だった模様。まじか!という事で同じテーマを使ってる他所のサイトを観てもモロにスクリプトが実行できる状態。
またログ確認したところ、この脆弱性での被害はございません。まずはお詫び致します。
そして速攻で直した記録になります。
脆弱性 XSSの箇所の確認
今回利用しているテーマは、お値段も16,000円程と買い切りの安いテーマですが、現時点でユーザーサポートページ・フォーラムにも一切の情報も脆弱性の話題は無い模様。指摘を受けた検索からの部分を調べると、検索の際に使われるパラメーター” ドメイン/?s= “での<script>の文字列がタグ閉じと含めて、”><script>実行</script>で動作可能だった。ひとまず検索で受けるコントローラーを探すとテーマ独自に設定してある模様。スタッフに依頼してひとまず該当部分の修正を依頼。
デフォルトの状態:/テーマ名/inc/front/archive_controller.php
64 65 66 67 68 69 70 71 72 |
echo '<form method="get" name="popular" action="'.$url.'">'; if (isset($_GET["s"])) { echo '<input type="hidden" name="s" value="'.$_GET["s"].'" />'; } if (isset($_GET["cat"])) { echo '<input type="hidden" name="cat" value="'.$_GET["cat"].'" />'; } if (isset($_GET["tag"])) { |
確かにGETしたあとにそのまま利用してる模様。
このテーマは通常のfunctionだけでなく、機能が多い分、フロントやDB絡みと細かくディレクトリーを分けて機能を追加しております。ひとまず、修正
64 65 66 67 68 69 70 71 |
echo '<form method="get" name="popular" action="'.$url.'">'; if (isset($_GET["s"])) { //echo '<input type="hidden" name="s" value="'.$_GET["s"].'" />'; echo '<input type="hidden" name="s" value="'. htmlspecialchars($_GET["s"], ENT_QUOTES) .'" />'; } if (isset($_GET["cat"])) { //echo '<input type="hidden" name="cat" value="'.$_GET["cat"].'" />'; echo '<input type="hidden" name="cat" value="'. htmlspecialchars($_GET["cat"], ENT_QUOTES) .'" />'; |
パースしておく。このテーマは独自に関数を意外とガツガツいれてるので、$_GET部分も洗い出しを行う。テーマの関数だけで55箇所でGET値を利用してるが、主に検索ワードとタグ、スラッグだけなのでひとまずはこれで時間を見つけて修正を行うことに。
サーバのアクセスログを確認
当然ですが、脆弱性が見つかったらログを切り分けて調査するのですが、現時点で外部への不正操作は見つからず。どのサーバもそうですが、相変わらず不正アクセスは多い模様。あとは会社のインフラ担当に確認を依頼。
折角なので、この機会に攻撃で国内も不正アクセスは洗い出すことに。相変わらずGET値は興味がそそられるアクセスは多いです。
ちなみにですが、普通のウェブアクセスとしては、法人の企業ページとしては、意外とアクセスが多く30分あたり70~120PV程あり、月間で60,000~140,000PVがあります。主に技術的な部分を記事に書いているので、検索からの流入が多く感謝です。色々とサービスやメールサーバを切り分けておいてよかった何気に安心しております。
最後に
まず直接、報告してくれたS氏に感謝。
また指摘があったようにWordPressは本当に機能が豊富なだけに、思わぬ場所に脆弱性があったりします。特に今回のような有料テーマだと安心と慢心してました。大変、申し訳ございません。ちなみに、この有料テーマ、アフィリエイターでは有名なテーマだったりします。外部の脆弱性をテストしている会社ですから、自社の公式サイトも検査しなきゃだめですよね。さて、今後どうするかですが、WordPressの便利さは使いたいが、アップデートして動かないとか手直しとかになると手間です。自分で定期的に見直しは必要ですが、またやはりWordPressの機能は某WEB制作会社が利用するように静的なページに埋め込むほうがより理想的な気がします。