WordPress 用 PS PHPCaptcha WP プラグインにおける入力確認に関する脆弱性が明らかになりました。

WordPressのプラグインであるPS PHPCaptcha WPに入力確認に関する脆弱性が明らかになりました。

【参考】WordPress 用 PS PHPCaptcha WP プラグインにおける入力確認に関する脆弱性

https://jvndb.jvn.jp/ja/contents/2019/JVNDB-2019-001619.html

この脆弱性により、Webサイト上の情報が改ざんされたり、サービスの運用が妨害されたりする可能性があります。

脆弱性が存在するのはバージョン1.2.0未満です。2019年3月28日現在で最新のバージョンである1.2.0が公開されています。旧バージョンのプラグインを使用中の人は、最新のバージョンへアップデートしましょう。

 

Webアプリケーションと切っても切り離せない「サニタイジング」

外部から入力されたデータを処理して結果の表示をさせる機能を持つプログラムは、Webアプリケーションではありふれたものです。しかし外部から入力されるデータは、プログラムの開発者が想定したデータばかりであるとは限りません。

悪意の有る無しに関わらず、想定外のデータ入力によって、思いもしなかった処理が実行されたり、表示されてはならない情報が表示されたりすることがあります。

このように思わぬ動作を起こさないために、入力されたデータをチェックして無害化させることを「サニタイジング」と呼びます。

 

そもそも、Webアプリケーションはブラウザ上で動作するため、HTMLとデータを適切に扱うことが求められます。HTMLをHTMLとして表示するのか、あるいはサニタイジングして無害化するべきなのか、Webアプリケーションの設計の段階で見極めて、サニタイジングを適切に行うことが重要になります。

 

「サニタイジング」のやり方

サニタイジングの具体的な方法はHTMLとして意味のある文字列を、ただの文字列に置き換える処理が一般的です。HTMLタグには「<」や「>」といった不等号の記号が頻繁に用いられますが、これらをただの文字列に置き換えることが、サニタイジングの基本的な処理となります。

例えばプログラミング言語PHPではサニタイジング行うための専用の関数を使うことができます。それがhtmlspecialchars関数です。変数$strを引数とした時、

$output = htmlspecialchars($str, ENT_QUOTES, ‘UTF-8’);

このようにhtmlspecialchars関数の戻り値として$outputが返却されます。この$outputが$strを無害化した結果となります。htmlspecialchars関数の引数として「ENT_QUOTES」や「UTF-8」が設定されています。これらはサニタイジングのルールを設定したり、サニタイジング後の文字コードを設定したりするための引数として使われています。「ENT_QUOTES」を引数と設定することで、不等号記号だけでなく「”(ダブルクォート)」や「’(シングルクォート)」も無害化された文字列へと変換させることができます。htmlspecialchars関数を使う時は、一般的にはこの引数とセットで使用します。

 

「サニタイジング」しないことでXSSの脆弱性が発生する

Webアプリケーションにおけるログインフォームやコメント投稿フォームなど、外部からデータ入力を引き受ける箇所では、適切にサニタイジング処理させることが重要です。もしこれらの箇所にサニタイジングが行われなかった場合、XSS(クロスサイトスクリプティング)の脆弱性の発生源となることがあります。

XSSの脆弱性とは、外部から悪意のあるJavaScriptのコードを入力することで、クッキーの情報を盗み、セッションハイジャックなどの攻撃が発生する脆弱性のことです。

最近のWebサーバーではXSSの脆弱性対策ができるWAF(Web Application Firewall)などがあります。

しかしWordPressのプラグインなど、不特定多数の人が様々な環境のサーバーで使用する可能性があるソフトウェアでは、開発時においてサニタイジング処理のコードをしっかり実装するなどの対策は必要不可欠です。なぜならWAFを搭載していないWebサーバー上で動作させる可能性もあり、何よりも脆弱性は根源から解消させることが、セキュリティ対策の原則だからです。

レオンテクノロジーは現在、一緒に働く仲間を募集しております!
興味がある方はこちらから!

セキュリティに関するご相談はこちらから!

こんな記事も読まれています