2021年6月に公開されている「クロスサイトスクリプティングの脆弱性(JVN#95292458)」について解説します。
この脆弱性は公式サイトでは「リスク:中」と高めに設定されています。
管理画面の支払方法設定画面に関するものですが、なぜリスクがあるのか伝わっておらず放置されているサイトを頻繁に見かけますので再度確認をお願い致します。
クロスサイトスクリプティングの脆弱性とは?
クロスサイトスクリプティング(XSS)の脆弱性は、ウェブサイトがユーザーから提供されるデータを適切に検証やエスケープしないことで生じるセキュリティホールです。この脆弱性を悪用すると、攻撃者はウェブサイトに悪意あるスクリプトを注入できる可能性があります。
本脆弱性の概要
対象ファイル
src/Eccube/Resource/template/admin/Setting/Shop/payment_edit.twig
app/template/admin/Setting/Shop/payment_edit.twig
管理画面の支払方法設定画面で、修正が必要な箇所の1つは下記のようなコードになっています。支払方法画像アップロード処理の関連部分です。
var payment_image = $('#{{ form.payment_image.vars.id }}').val();
if (payment_image != '') {
var filename = $('#{{ form.payment_image.vars.id }}').val();
if (payment_image == '{{ oldPaymentImage }}') {
var path = '{{ asset('', 'save_image') }}' + filename;
} else {
var path = '{{ asset('', 'temp_image') }}' + filename;
}
var $img = $(proto_img.replace(/__path__/g, path));
$('#{{ form.payment_image.vars.id }}').val(filename);
$('#thumb').append($img);
hideThumbnail();
}
このコードの問題点はかなり気づきにくいのですが、filename, pathという変数がリクエストで送信される値を使用しており、適切なエスケープ処理がないreplaceメソッドを使用して画面に生成するコンテンツを生成している点です。
そのため、管理ユーザーが外部サイトに誘導された後で自社サイトに悪意あるリクエストを送信されるとXSS攻撃が成功する可能性があります。対策としては適切なエスケープ処理に置き換えることとなります。
なお、支払方法の画像をアップロードしてければ修正の必要がないわけではないため、ご注意ください。
支払方法画像を設定していないサイトでも攻撃を受ける可能性があります。
独自カスタマイズ部分やプラグインについても対応が必要か
必須です。独自カスタマイズ部分やプラグインについても、該当箇所がないか確認してください。
この画像アップロード処理を真似て独自カスタマイズやプラグイン実装が行われている可能性は十分にあります。(実際にいくつか確認させていただいたサイトで存在しました)
脆弱性修正の難易度について
この脆弱性の指摘箇所の修正自体は難しくありません。twigファイルを修正してキャッシュを削除するだけです。
ただし独自カスタマイズやプラグインに対して類似の脆弱性がないかを確認する作業はjavascriptに関する知識が必要でかなり骨が折れる作業になると考えられます。
対応が難しい場合は下記よりお問い合わせください。
EC-CUBEに関するお問い合わせ
[重要]現在公式にセキュリティサポートが切れていないPHPは8.1以上、MySQLは8.0以上で、対応しているEC-CUBEバージョンは4.2以上です。古いEC-CUBEを使っている方は適切なタイミングでバージョンアップをご検討ください。