JVN#99312352 MTS Simple Booking Cの脆弱性とその対応について

WordPressのプラグインとして動作するMTS Simple Booking 簡易予約システムに、クロスサイトスクリプティング(以下XSSと呼びます)の脆弱性が存在することが判明しました。

この脆弱性を悪用された場合、WordPressの管理画面を操作する管理者が悪意ある第三者の攻撃により、第三者が仕込んだ任意のJavaScriptプログラムを実行させられてしまう危険性があります。

ページ下部に置き換えの必要がある修正ファイル、あるいは、PHPプログラムの知識がある方は直接プログラムの編集により対応いただけるよう説明をいたします。それぞれの状況に合った方法で対処くださるようお願いします。

お手数をお掛けして大変申し訳ございません。ご協力下さいますようよろしくお願いします。

該当製品について

・無償版の「MTS Simple Booking C Ver.1.2.1」ならびに他のバージョンも含む全製品

・「MTS Simple Bookingビジネス版 Ver.1.28.0」以下の全製品

脆弱性の詳細

脆弱性に対する攻撃の対象は、WordPressサイトを操作する管理者を狙った攻撃が第一次攻撃となります。

XSSの脆弱性は予約時に入力する「会社名」と「名前」の入力項目で、当該項目にJavaScriptプログラムを入力して予約を実行すると、管理画面において当該項目を表示する「予約リスト」、あるいは「予約カレンダー」の「表示」で入力項目を表示するとき、挿入されたJavaScriptプログラムが実行されるものです。

脆弱性がもたらす脅威

埋め込まれたJavaScriptプログラムは、WordPressサイトを操作する管理者が使用するパソコンのブラウザー上で動作します。ですので、サーバーのシステムやファイル、あるいはパソコンのシステムやファイルを直接改竄することはできません。

予想される危険な攻撃は、特にフィッシングと思われます。

予想される動作は、ブラウザー操作において突然画面が切り替わり、ログインIDとパスワードの入力画面が現れたり、あるいは見覚えのないページが表示されたりするものです。

この状況は大変危険な状態で、そこでログインIDやパスワードを入力したり、あるいはリンクを踏んでマルウェアを含むプログラムをダウンロードしてしまう可能性が非常に高くなります。

もしログイン画面がWordPressのそれと似ていた場合、利用者は不思議に思いながらもIDとパスワードを入力してしまう、可能性が心配されます。

攻撃を認識する方法

この攻撃は必ず予約処理を伴うため、管理者へ予約メールが送信されます。攻撃プログラムは予約者の「会社名」、または、「名前」に埋め込まれますので、メールの該当箇所にそれが表示されます。

攻撃プログラムは通常判別されにくいように、意味のない文字列の羅列で、暗号化されていると思われます。

攻撃者の情報

攻撃を受けた場合、受信メールの時間からサイトへアクセスした時間を推定し、サーバーに保存されたアクセスログを確認すれば、サイトへ接続した端末のIPアドレスを確認できるかもしれません。

またビジネス版では、保存した予約データに利用した端末のIPアドレスが保管されます。

IPアドレスから直接攻撃者を割り出すことはできませんが、利用されたプロバイダー、踏み台にされたと思われるサーバー、アクセス地域などの情報がわかります。

無償版の対策方法

無償版の「MTS Simple Booking C」において、脆弱性のあるプログラムファイルは次の2つあります。それぞれダウンロードしてzipファイルを解凍後、プラグインディレクトリの古いファイルを削除して新しくアップロードするか、あるいは上書きしてください。

mtssb-calendar-admin.phpのzipファイル
ダウンロード開始

mtssb-list-admin.phpのzipファイル
ダウンロード開始

無償版のパッチ修正について

ソースプログラムの修正箇所を記載します。この作業は、ファイルの置き換えが困難な場合(例えば改造して利用している場合など)に、脆弱箇所を直接修正することで対策することを目的とします。

作業の対象者は、PHPプログラムの修正・編集が可能な技術者です。

ソースプログラムが収められているフォルダーはプラグインのディレクトリです。

mtssb-calendar-admin.php

修正対象箇所390行目

echo empty($client['name']) ? __('No Name', $this->domain) : $client['name'];

修正後

echo empty($client['name']) ? __('No Name', $this->domain) : esc_html($client['name']);

mtssb-list-admin.php

修正対象箇所305行目

return (empty($item['client']['company']) ? '' : "{$item['client']['company']}<br />") . $item['client']['name'];

修正後

return (empty($item['client']['company']) ? '' : sprintf('%s<br />', esc_html($item['client']['company']))) . esc_html($item['client']['name']);

ビジネス版の対策方法

ビジネス版の脆弱性のある箇所は「mtssb-calendar-admin.php」ファイルで、「mtssb-list-admin.php」ファイルはVer.1.6.0(2013年)以降で脆弱性はありません。

「MTS Simple Bookingビジネス版」の対策は、ダウンロードサイトに新しいシステム「Ver.1.28.1」を用意しましたので、こちらにアップデートしてご利用ください。なおアップデートを実施する際は、データベースのバックアップを用意して作業を進めるようにお願いします。

ダウンロードサイトは以下のURLです。ログイン後アドミンバー右上のユーザー名からユーザーページを開き、製品名からダウンロードページへ移動いただけます。

https://app.mt-systems.jp/

ビジネス版のパッチ修正について

修正箇所の説明は、ダウロードが可能だったビジネス版Ver.1.26.0(Ver.1.28.0)の「mtssb-calendar-admin.php」ファイルが対象となります。ソースプログラム上部にアップデートのバージョンの履歴がありますが、「Ver.1.21.0」と記載されたものです。

作業の対象者は、PHPプログラムの修正・編集が可能な技術者です。

修正箇所は2箇所あります。

1箇所目の修正箇所425行目

echo empty($client['name']) ? __('No Name', $this->domain) : $client['name'];

修正後

echo empty($client['name']) ? __('No Name', $this->domain) : esc_html($client['name']);

2箇所目の修正箇所433行目

echo empty($client['name']) ? __('No Name', $this->domain) : $client['name'];

修正後

echo empty($client['name']) ? __('No Name', $this->domain) : esc_html($client['name']);

 

その他クッキーについての考察

攻撃された場合、管理者が接続するWordPressサイトとの間のブラウザーに保存されているクッキーデータが、攻撃者に知られてしまう可能性があります(WordPressサイト以外のデータを知られることはありません)。

クッキーにパスワードなど重要なデータを保存することはほとんどありませんが、意図的に重要なデータを保存しているようであれば、それが知られてしまう可能性は残ります。

なお「セッションハイジャック」と呼ばれるサイト接続の乗っ取り行為は、WordPressはPHPのセッション機能を利用していないため、ログインに関して発生することはありません。また、現在のところそのような攻撃は存じ上げておりません。

関連情報

JVN#99312352
WordPress用プラグイン MTS Simple Booking C におけるクロスサイトスクリプティングの脆弱性

謝辞

東京電機大学の高木様より本脆弱性のご報告をいただきました。高木様、ならびにご対応いただきましたJPCERT/CCの関係者、皆様に感謝申し上げます。

更新履歴

2018年02月01日 このページを公開しました。
2018年02月02日 関連情報にJVNのページへのリンクを追加しました。

連絡先

本説明内容に関してご不明な点があれば、以下へメールにてお問い合わせください。多数いただいた場合は順次返信いたしますが、内容により返信が難しいことがあるかもしれませんのでご了承ください。

有限会社エムティシステム <mt-systems@mt-systems.jp>

お問い合わせフォーム:http://mtssb.mt-systems.jp/inquiry/