Security
Headlines
HeadlinesLatestCVEs

Headline

CVE-2023-40281: EC-CUBE 2系におけるクロスサイトスクリプティングの脆弱性(JVN#46993816)

EC-CUBE 2.11.0 to 2.17.2-p1 contain a cross-site scripting vulnerability in “mail/template” and “products/product” of Management page. If this vulnerability is exploited, an arbitrary script may be executed on the web browser of the other administrator or the user who accessed the website using the product.

CVE
#xss#vulnerability#web#java#php

更新履歴

2023/08/09 16:00

JVN番号と謝辞を追加

2023/07/27 13:00

初版公開

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

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

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

  • 修正ファイルを適用する
  • 修正差分を確認して適用する

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

脆弱性の概要****EC-CUBEにおけるクロスサイトスクリプティングの脆弱性****危険度:

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

  • 2.11.0〜2.11.5
  • 2.12.0〜2.12.6
  • 2.13.0〜2.13.5-p1
  • 2.17.0〜2.17.2-p1

詳細:

該当バージョンのEC-CUBEにはXSSの脆弱性が存在します。攻撃者が管理画面にログイン可能な場合に、当該脆弱性を悪用して、他の管理者またはサイトにアクセスした第三者のブラウザ上で任意のスクリプトを実行させる可能性があります。

修正ファイル適用による注意点****以下の注意事項をご確認お願いいたします。

本修正ファイルを適用することにより、スクリプトを含む文字列がサニタイズされます。
そのため、商品情報やメルマガテンプレートの登録内容にスクリプトが含まれる場合は、スクリプトはサニタイズされ機能しなくなります。あらかじめご了承ください。

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

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

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

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

    • 修正ファイル(2.17.2-p1) (SHA256:5d4b2ce7094e78c8a7086ffc40e334ebefccef5e745bc73a6f1a435e516f5958)
    • 修正ファイル(2.13.5-p1) (SHA256:a8f5ccc02bda915433dd8fa0541cbbe02732d8c9ea0ff88623a614141246b886)

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

    2.17.2-p1

    • data/smarty_extends/modifier.script_escape.php

    2.13.5-p1

    • data/Smarty/templates/admin/mail/preview.tpl
    • data/Smarty/templates/admin/products/confirm.tpl
    • data/Smarty/templates/default/products/detail.tpl
    • data/Smarty/templates/mobile/products/detail.tpl
    • data/Smarty/templates/sphone/products/detail.tpl
    • data/smarty_extends/modifier.script_escape_ex.php
  2. EC-CUBEファイルのバックアップ

    あらかじめEC-CUBEファイル全体のバックアップを行ってください。

  3. 修正ファイルの反映

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

    上書きするファイル

    2.17.2-p1

    • data/smarty_extends/modifier.script_escape.php

    2.13.5-p1

    • data/Smarty/templates/admin/mail/preview.tpl
    • data/Smarty/templates/admin/products/confirm.tpl
    • data/Smarty/templates/default/products/detail.tpl
    • data/Smarty/templates/mobile/products/detail.tpl
    • data/Smarty/templates/sphone/products/detail.tpl
    • data/smarty_extends/modifier.script_escape_ex.php

    ※デザインテンプレートの適用や、EC-CUBE本体のカスタマイズをしている場合、修正箇所の差分をご確認のうえ反映をお願いします。
    ※開発環境がある場合は、開発環境での反映・動作確認を行った後に、本番環境への反映をおすすめします。

  4. キャッシュの削除

    キャッシュは自動で更新されますが、念の為EC-CUBE のキャッシュの削除をしておくと安全です。以下のディレクトリ配下のキャッシュファイルを削除をお願い致します。

    • data/Smarty/templates_c/admin/*
    • data/Smarty/templates_c/default/*
    • data/Smarty/templates_c/sphone/*
    • data/Smarty/templates_c/mobile/*
    • data/Smarty/templates_c/お使いのテンプレート/*

    ※ディレクトリごと削除せず、配下のファイルを削除するようにしてください。

  5. 動作確認

    フロント画面と管理画面(ログインが必要)それぞれにおいて、基本操作が正常に行えることをご確認ください。

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

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

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

修正差分

  1. data/smarty_extends/modifier.script_escape.php +30 -6

@@ -9,12 +9,36 @@ function smarty_modifier_script_escape($value)

9

9

{

10

10

if (is_array($value)) return $value;

11

11

12

- $pattern = "/<script.*?>|<\/script>|javascript:|<svg.*(onload|onerror).*?>|<img.*(onload|onerror).*?>|<body.*onload.*?>|<iframe.*?>|<object.*?>|<embed.*?>|<.*onmouse.*?>|(\"|’).*(onmouse|onerror|onload|onclick).*=.*(\"|’).*/i";

12

  • $pattern = "<script.*?>|<\/script>|javascript:|<svg.*(onload|onerror).*?>|<img.*(onload|onerror).*?>|<body.*onload.*?>|<iframe.*?>|<object.*?>|<embed.*?>|";

13

14

  • // 追加でサニタイズするイベント一覧

15

  • $escapeEvents = array(

16

  • 'onmouse’,

17

  • 'onclick’,

18

  • 'onblur’,

19

  • 'onfocus’,

20

  • 'onresize’,

21

  • 'onscroll’,

22

  • 'ondblclick’,

23

  • 'onchange’,

24

  • 'onselect’,

25

  • 'onsubmit’,

26

  • 'onkey’,

27

  • );

28

29

  • // イベント毎の正規表現を生成

30

  • $generateHtmlTagPatterns = array_map(function($str) {

31

  • return “<(\w+)([^>]*\s)?\/?".$str.”[^>]*>";

32

  • }, $escapeEvents);

33

  • $pattern .= implode("|", $generateHtmlTagPatterns)."|";

34

  • $pattern .= "(\"|’).*(onerror|onload|".implode(“|", $escapeEvents).”).*=.*(\"|’).*";

35

36

  • // 正規表現をまとめる

37

  • $attributesPattern = "/${pattern}/i";

38

39

  • // 置き換える文字列

13

40

$convert = '#script tag escaped#’;

14

41

15

- if (preg_match_all($pattern, $value, $matches)) {

16

- return preg_replace($pattern, $convert, $value);

17

- } else {

18

- return $value;

19

- }

42

  • // マッチしたら文字列を置き換える

43

  • return preg_replace($attributesPattern, $convert, $value);

20

44

}

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

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

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

修正差分

  1. data/Smarty/templates/admin/mail/preview.tpl +1 -1
  2. data/Smarty/templates/admin/products/confirm.tpl +2 -2
  3. data/Smarty/templates/default/products/detail.tpl +3 -3
  4. data/Smarty/templates/mobile/products/detail.tpl +1 -1
  5. data/Smarty/templates/sphone/products/detail.tpl +2 -2
  6. data/smarty_extends/modifier.script_escape_ex.php +44 -0

@@ -22,4 +22,4 @@

22

22

*/

23

23

*}–>

24

24

25

- <!–{if $mail.mail_method eq 2}–><!–{$mail.body|h|nl2br}–><!–{else}–><!–{$mail.body}–><!–{/if}–>

25

  • <!–{if $mail.mail_method eq 2}–><!–{$mail.body|h|nl2br}–><!–{else}–><!–{$mail.body|script_escape_ex}–><!–{/if}–>

@@ -200,7 +200,7 @@

200

200

<tr>

201

201

<th>詳細-メインコメント</th>

202

202

<td>

203

- <!–{$arrForm.main_comment|nl2br_html}–>

203

  • <!–{$arrForm.main_comment|nl2br_html|script_escape_ex}–>

204

204

</td>

205

205

</tr>

206

206

<tr>

@@ -249,7 +249,7 @@

249

249

<th>詳細-サブコメント(<!–{$smarty.section.cnt.iteration}–>)</th>

250

250

<td>

251

251

<!–{assign var=key value="sub_comment`$smarty.section.cnt.iteration`"}–>

252

- <!–{$arrForm[$key]|nl2br_html}–>

252

  • <!–{$arrForm[$key]|nl2br_html|script_escape_ex}–>

253

253

</td>

254

254

</tr>

255

255

<tr>

@@ -177,7 +177,7 @@

177

177

</dl>

178

178

179

179

<!–★詳細メインコメント★–>

180

- <div class="main_comment"><!–{$arrProduct.main_comment|nl2br_html}–></div>

180

  • <div class="main_comment"><!–{$arrProduct.main_comment|nl2br_html|script_escape_ex}–></div>

181

181

182

182

<!–▼買い物カゴ–>

183

183

<div class="cart_area clearfix">

@@ -292,7 +292,7 @@

292

292

<!–▼サブ画像–>

293

293

<!–{assign var=lkey value="sub_large_image`$smarty.section.cnt.index+1`"}–>

294

294

<!–{if $arrProduct[$ikey]|strlen >= 1}–>

295

- <div class="subtext"><!–★サブテキスト★–><!–{$arrProduct[$ckey]|nl2br_html}–></div>

295

  • <div class="subtext"><!–★サブテキスト★–><!–{$arrProduct[$ckey]|nl2br_html|script_escape_ex}–></div>

296

296

<div class="subphotoimg">

297

297

<!–{if $arrProduct[$lkey]|strlen >= 1}–>

298

298

<a href="<!–{$smarty.const.IMAGE_SAVE_URLPATH}–><!–{$arrProduct[$lkey]|h}–>" class="expansion" target="_blank" >

@@ -307,7 +307,7 @@

307

307

<!–{/if}–>

308

308

</div>

309

309

<!–{else}–>

310

- <p class="subtext"><!–★サブテキスト★–><!–{$arrProduct[$ckey]|nl2br_html}–></p>

310

  • <p class="subtext"><!–★サブテキスト★–><!–{$arrProduct[$ckey]|nl2br_html|script_escape_ex}–></p>

311

311

<!–{/if}–>

312

312

<!–▲サブ画像–>

313

313

</div>

@@ -59,7 +59,7 @@

59

59

<!–{/if}–>

60

60

61

61

<!–★詳細メインコメント★–>

62

- [emoji:76]<!–{$arrProduct.main_comment|nl2br_html}–><br>

62

  • [emoji:76]<!–{$arrProduct.main_comment|nl2br_html|script_escape_ex}–><br>

63

63

<br>

64

64

65

65

<!–▼商品ステータス–>

@@ -118,7 +118,7 @@

118

118

<section id="detailarea">

119

119

120

120

<!–★詳細メインコメント★–>

121

- <p class="main_comment"><!–{$arrProduct.main_comment|nl2br_html}–></p>

121

  • <p class="main_comment"><!–{$arrProduct.main_comment|nl2br_html|script_escape_ex}–></p>

122

122

123

123

<form name="form1" id="form1" method="post" action="<!–{$smarty.const.ROOT_URLPATH}–>products/detail.php">

124

124

<div id="detailrightblock">

@@ -342,7 +342,7 @@

342

342

</p>

343

343

<!–{/if}–>

344

344

<!–★サブテキスト★–>

345

- <p class="subtext"><!–★サブテキスト★–><!–{$arrProduct[$ckey]|nl2br_html}–></p>

345

  • <p class="subtext"><!–★サブテキスト★–><!–{$arrProduct[$ckey]|nl2br_html|script_escape_ex}–></p>

346

346

</div>

347

347

<!–{/if}–>

348

348

<!–{/section}–>

@@ -0,0 +1,44 @@

1

  • <?php

2

  • /**

3

  • * Scriptタグをエスケープする

4

  • *

5

  • * @param string $value 入力

6

  • * @return string $value マッチした場合は変換後の文字列、しない場合は入力された文字列をそのまま返す。

7

  • */

8

  • function smarty_modifier_script_escape_ex($value)

9

  • {

10

  • if (is_array($value)) return $value;

11

12

  • $pattern = "<script.*?>|<\/script>|javascript:|<svg.*(onload|onerror).*?>|<img.*(onload|onerror).*?>|<body.*onload.*?>|<iframe.*?>|<object.*?>|<embed.*?>|";

13

14

  • // 追加でサニタイズするイベント一覧

15

  • $escapeEvents = array(

16

  • 'onmouse’,

17

  • 'onclick’,

18

  • 'onblur’,

19

  • 'onfocus’,

20

  • 'onresize’,

21

  • 'onscroll’,

22

  • 'ondblclick’,

23

  • 'onchange’,

24

  • 'onselect’,

25

  • 'onsubmit’,

26

  • 'onkey’,

27

  • );

28

29

  • // イベント毎の正規表現を生成

30

  • $generateHtmlTagPatterns = array_map(function($str) {

31

  • return “<(\w+)([^>]*\s)?\/?".$str.”[^>]*>";

32

  • }, $escapeEvents);

33

  • $pattern .= implode("|", $generateHtmlTagPatterns)."|";

34

  • $pattern .= "(\"|’).*(onerror|onload|".implode(“|", $escapeEvents).”).*=.*(\"|’).*";

35

36

  • // 正規表現をまとめる

37

  • $attributesPattern = "/${pattern}/i";

38

39

  • // 置き換える文字列

40

  • $convert = '#script tag escaped#’;

41

42

  • // マッチしたら文字列を置き換える

43

  • return preg_replace($attributesPattern, $convert, $value);

44

  • }

問い合わせ先

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

EC-CUBE 運営チーム
MAIL: [email protected]

謝辞

本脆弱性は、

  • 三井物産セキュアディレクション株式会社 島峰 泰平 様

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

CVE: Latest News

CVE-2023-50976: Transactions API Authorization by oleiman · Pull Request #14969 · redpanda-data/redpanda
CVE-2023-6905
CVE-2023-6903
CVE-2023-6904
CVE-2023-3907