EC-CUBE 4系におけるクロスサイトスクリプティングの脆弱性(JVN#04785663)

更新履歴
2023/02/28 11:00
謝辞を追加
2023/02/17 11:30
【重要】修正ファイル(4.2.0用、4.1.2-p1用、4.0.6-p2用の3点)の内容に不具合がありましたので、ファイルを更新いたしました。
公開されていた時間:2023/02/14 17:00 〜 2023/02/17 11:30 上記時間帯にファイルの適応を行った方は、再度のご確認と修正対応をお願いいたします。 なお、誤ったファイルを適用していた場合でも、脆弱性そのものの修正は行われています。
2023/02/16 18:00
【重要】修正ファイルに不具合を確認
修正ファイルにより脆弱性は解消されますが、ファイル管理画面のサムネイルが一部表示されなくなる不具合があり、新しい修正ファイルを準備中です。
2023/02/14 17:00
初版公開

EC-CUBEにおけるクロスサイトスクリプティングの脆弱性

EC-CUBE 4.0系、4.1系、4.2系におけるクロスサイトスクリプティングの脆弱性(危険度: 低)があることが判明いたしました

脆弱性そのものは、修正の反映によりすぐに解決するものです。
以下のいずれかの方法により、ご対応をお願いいたします。

皆様にはお手数おかけし誠に申し訳ございません。
本脆弱性における被害報告は現時点でございませんが、できるだけ速やかにご対応をお願いいたします。

脆弱性の概要

EC-CUBEにおけるクロスサイトスクリプティングの脆弱性

危険度:

不具合が存在するEC-CUBEのバージョン:

詳細:

EC-CUBEにはXSSの脆弱性が存在します。攻撃者は当該脆弱性を悪用して、被害者のブラウザ上で任意のスクリプトを実行させる可能性があります。


JVNからの公表内容 (2022/02/28公開)

JVN#04785663: EC-CUBE における複数のクロスサイトスクリプティングの脆弱性

修正方法1: 修正ファイルを利用する場合

開発環境がある場合は、まず開発環境でお試しください。
以下の手順に従って、修正ファイルの反映をお願いいたします。

  1. 修正ファイルのダウンロード

    ご利用中のEC-CUBEのバージョンに該当する修正ファイルをダウンロードしてください。
    ※EC-CUBEのバージョンはこちらの手順でご確認ください。
    ※修正ファイルは各バージョンの最新版に対して作成しています。旧バージョンをご利用の場合は、「修正方法2」のご対応をお願いします。

    ダウンロードし、解凍していただきますと、以下の修正ファイルがあります。必ず該当するバージョンのファイルをご利用ください。

    • src/Eccube/Resource/template/admin/Store/authentication_setting.twig
    • src/Eccube/Resource/template/admin/Store/plugin_confirm.twig
    • src/Eccube/Resource/template/default/Product/detail.twig
    • src/Eccube/Resource/template/default/Product/list.twig
    • src/Eccube/Resource/template/admin/Content/file.twig
  2. EC-CUBEファイルのバックアップ

    あらかじめEC-CUBEファイル全体のバックアップを行ってください。
    ※作業中はメンテナンスモードに切り替えることをおすすめします。

  3. 修正ファイルの反映

    以下のファイルを上書き更新してください。

    上書きするファイル

    • src/Eccube/Resource/template/admin/Store/authentication_setting.twig
    • src/Eccube/Resource/template/admin/Store/plugin_confirm.twig
    • src/Eccube/Resource/template/default/Product/detail.twig
    • src/Eccube/Resource/template/default/Product/list.twig
    • src/Eccube/Resource/template/admin/Content/file.twig

    下記にファイルが存在する場合は同様に上書きをお願いします

    • app/template/admin/Store/authentication_setting.twig
    • app/template/admin/Store/plugin_confirm.twig
    • app/template/default/Product/detail.twig
    • app/template/default/Product/list.twig
    • app/template/admin/Content/file.twig
    ※EC-CUBE本体のカスタマイズをしている場合、修正箇所の差分をご確認のうえ反映をお願いします。
    ※開発環境がある場合は、開発環境での反映・動作確認を行った後に、本番環境への反映をおすすめします。

  4. キャッシュの削除

    EC-CUBE のキャッシュの削除が必要です。
    EC-CUBE の管理画面にログインいただき、コンテンツ管理 -> キャッシュ管理 のページからキャッシュの削除をお願いいたします

  5. 動作確認

    管理画面にログインし、基本操作が正常に行えることをご確認ください。
    ※メンテナンスモードにされていた場合は解除をお願いします。

修正方法2: 修正差分を確認して適宜反映する場合(4系)

以下のコード差分情報を参照して頂き、必要な箇所に修正を反映してください。

本修正方法はEC-CUBE 4.2.0のバージョンを例として提示しております。
過去バージョンをご利用の場合は、下記修正対象ファイルの修正差分を参考にご対応お願いいたします。

※4.0, 4.1, 4.2それぞれのファイル差分は同一です

修正差分

src/Eccube/Resource/template/admin/Content/file.twig CHANGED
@@ -167,14 +167,14 @@ file that was distributed with this source code.
167
167
  {% endif %}
168
168
  {% for file in arrFileList %}
169
169
  <tr id="{{ loop.index }}">
170
- <td class="align-middle text-center" onDblClick="eccube.fileManager.setTreeStatus('tree_status');eccube.fileManager.doubleClick(arrTree, '{{ file.file_path }}', {% if file.is_dir %}true{% else %}false{% endif %}, '{{ tpl_now_dir }}', false)">
170
+ <td class="align-middle text-center">
171
171
  {% if file.is_dir %}
172
172
  <i class="fa fa-folder-o fa-2x"></i>
173
173
  {% else %}
174
174
  {% if file.extension|file_ext_icon({}, true) == 'fa-file-image-o' %}
175
175
  <div class="d-inline-block p-3 bg-light"
176
176
  style="background: no-repeat center center;
177
- background-image: url('{{ asset('', 'user_data') }}{{ file.file_path|slice(1) }}');
177
+ background-image: url('{{ asset(file.file_path|slice(1)|escape('css'), 'user_data') }}');
178
178
  background-size: contain; width: 49px; height: 57px;">
179
179
  </div>
180
180
  {% else %}
src/Eccube/Resource/template/admin/Store/authentication_setting.twig CHANGED
@@ -63,7 +63,7 @@ file that was distributed with this source code.
63
63
  "captcha": $('#captcha_text').val(),
64
64
  "eccube_url": '{{ eccubeUrl }}',
65
65
  "eccube_version": "{{ constant('Eccube\\Common\\Constant::VERSION') }}",
66
- "eccube_shop_name": "{{ eccubeShopName }}"
66
+ "eccube_shop_name": "{{ eccubeShopName|escape('js') }}"
67
67
  }
68
68
  }).done(function(data) {
69
69
  $('#captcha').modal('hide');
src/Eccube/Resource/template/admin/Store/plugin_confirm.twig CHANGED
@@ -101,12 +101,12 @@ $(function() {
101
101
  relatedTarget = $(e.relatedTarget);
102
102
  mode = MODES[relatedTarget.data('mode')];
103
103
  $('.modal-title', modal).text(mode.name + '確認');
104
- message.text('「{{ item.name }} ({{ item.version }})」を' + mode.name + 'しますか?');
104
+ message.text('「{{ item.name|escape('js') }} ({{ item.version }})」を' + mode.name + 'しますか?');
105
105
  $('#installBtn').text(mode.name);
106
106
  });
107
107
 
108
108
  $('#installBtn').on('click', function() {
109
- message.text('「{{ item.name }} ({{ item.version }})」を' + mode.name + '中。この処理には数分かかる場合があります。画面をリロードせずにこのままお待ち下さい。');
109
+ message.text('「{{ item.name|escape('js') }} ({{ item.version }})」を' + mode.name + '中。この処理には数分かかる場合があります。画面をリロードせずにこのままお待ち下さい。');
110
110
  var footer = $('div.modal-footer', modal).hide();
111
111
  var progress = $('div.progress', modal).show();
112
112
  var statusBar = $('#installStatus').text('');
src/Eccube/Resource/template/default/Product/detail.twig CHANGED
@@ -218,7 +218,7 @@ file that was distributed with this source code.
218
218
  }).done(function(data) {
219
219
  // レスポンス内のメッセージをalertで表示
220
220
  $.each(data.messages, function() {
221
- $('#ec-modal-header').html(this);
221
+ $('#ec-modal-header').text(this);
222
222
  });
223
223
 
224
224
  $('.ec-modal').show()
src/Eccube/Resource/template/default/Product/list.twig CHANGED
@@ -65,7 +65,7 @@ file that was distributed with this source code.
65
65
  }).done(function(data) {
66
66
  // レスポンス内のメッセージをalertで表示
67
67
  $.each(data.messages, function() {
68
- $('#ec-modal-header').html(this);
68
+ $('#ec-modal-header').text(this);
69
69
  });
70
70
 
71
71
  $('.ec-modal').show()

問い合わせ先

本脆弱性に関するお問合せ:

EC-CUBE 運営チーム
MAIL: support@ec-cube.net

謝辞

本脆弱性は、

コンテンツ管理におけるクロスサイトスクリプティング CVE-2023-22438

認証キー設定におけるクロスサイトスクリプティング CVE-2023-25077

商品一覧および商品詳細におけるクロスサイトスクリプティング CVE-2023-22838

よりご報告いただきました。
この場をお借りして、厚く御礼申し上げます。