- 2018年9月5日
- WordPress脆弱性情報 , その他脆弱性情報
世界中で使用されている2大CMSである「WordPress」と「Movable Type」の両方に、クロスサイトスクリプティングの脆弱性が発見されました。
【参考】WordPress におけるクロスサイトスクリプティングの脆弱性
https://jvndb.jvn.jp/ja/contents/2018/JVNDB-2018-006831.html
【参考】Movable Type におけるクロスサイトスクリプティングの脆弱性
https://jvndb.jvn.jp/ja/contents/2018/JVNDB-2018-000094.html
クロスサイトスクリプティングの脆弱性の対策方法
情報セキュリティの勉強を始めてクロスサイトスクリプティングのことを知った時、「なんてややこしい攻撃手法なんだ」と驚いたことがあります。初見で理解するのが難しい攻撃ですが、理解するポイントとして、クロスサイトスクリプティングは「悪意のあるWebサイト」と「脆弱性のあるWebサイト」の2つのサイトが登場することを頭に入れる必要があります。
クロスサイトスクリプティングの脆弱性の対策として「悪意のあるサイト」に対する訪問を制限することができればベストですが、これがなかなか難しいのです。「悪意のある」と言っても、攻撃はアンカータグに特定のパラメータがついたハイパーリンクを設置するだけでも可能なので、ウィルス対策ソフトが悪意のあるソフトウェアを検出・削除するようには行きません。
そこで、クロスサイトスクリプティングの対策としてはもっぱら、「脆弱性のあるWebサイト」の脆弱性の排除となります。
散々知られていることですが、クロスサイトスクリプティングの脆弱性対策として必要な施策は以下の3つです。
1.フォームの入力値を制限する
2.データの無害化(サニタイジング)をする
3.WAF(Web Application Firewall)を導入する
今回はこの3つの対策について要点を紹介します。
フォームの入力値を制限する
お問い合わせや掲示板に設置する入力フォームが受け付ける入力値を制限しましょう。例えば郵便番号を入力するフォームでは原則として数字以外の文字列が入力される必要はないはずです。
フォームの入力値の制限のポイントは、制限の処理をサーバーサイドで行うことです。最近ではJavaScriptで入力値のチェックを行うケースが多いのですが、JavaScriptはクライアントサイドで動作するプログラムであるため、該当箇所を無効化した上で入力を行うことが可能です。そのため、不正な入力値がサーバーに送信される可能性があります。フォームの入力値のチェックはサーバー上に存在するプログラムにて行うようにしましょう。
データの無害化(サニタイジング)をする
クロスサイトスクリプティングの対策としてデータの無害化も必須です。データの無害化とは、ソースコード上で特定の意味を持つ文字「&,<,>,”,’」の5つの種類の文字について、画面上にそのままの状態で表示されるように置換する作業のことです。
無害化のポイントは、無害化のタイミングをデータ保存時ではなく、HTMLの生成時に行う点です。HTMLの生成時はデータ表示の最終段階であり、ここでしっかり無害化しておけば、仮にサーバー上に「&,<,>,”,’」の5つの文字が保存されていても、HTML生成時にしっかりと対応できたことになります。
WAF(Web Application Firewall)を導入する
WAF(ワフ)とはWebアプリケーションに存在する脆弱性を防御するためのソフトウェアです。導入についてコストがかかったり、設定が難しかったりするため、すべてのサーバーに導入されているといった状況ではありませんが、主要なレンタルサーバーでは、サーバーのオプションとしてボタン一つで有効化するWAFを使用するもあるようです。
クロスサイトスクリプティング対策としてWAFの導入は有効ですが、WAFの動作している環境や設定によっては、正常なプログラムの動作に影響を与えることもあります。WAFを有効化した際には、サーバーに設置されているプログラムが正常に動作するかどうか、しっかり確認しましょう。
まとめ
今回は発見されたクロスサイトスクリプティングの脆弱性はWordPressとMovable Typeにて発見されたものでした。しかし、この脆弱性はWebアプリケーションを構築している開発言語やサーバーの環境によらず、簡単に発生してしまう脆弱性です。もし脆弱性が発見されたWebアプリケーションを使用していたら、速やかに使用を中断し、修正プログラムを適用するようにしましょう。