Security
Headlines
HeadlinesLatestCVEs

Headline

CVE-2023-46845: EC-CUBE4系におけるRCE可能な脆弱性(JVN#29195731)

EC-CUBE 3 series (3.0.0 to 3.0.18-p6) and 4 series (4.0.0 to 4.0.6-p3, 4.1.0 to 4.1.2-p2, and 4.2.0 to 4.2.2) contain an arbitrary code execution vulnerability due to improper settings of the template engine Twig included in the product. As a result, arbitrary code may be executed on the server where the product is running by a user with an administrative privilege.

CVE
#csrf#vulnerability#ios#android#js#git#php#ssl

更新履歴

2023/11/09 15:00

目次の追加

2023/11/07 14:00

JVNからの公表内容情報へのリンクを追加

2023/10/26 13:00

初版公開

目次

  • EC-CUBEにおけるRCE可能な脆弱性
  • 脆弱性の概要
  • Twigの更新手順
  • 修正方法1: 修正ファイルを利用する場合(4.0系)
  • 修正方法2: 修正差分を確認して適宜反映する場合(4.0系)
  • 問い合わせ先
  • 謝辞

EC-CUBEにおけるRCE可能な脆弱性

EC-CUBE 4.0系におけるRCE可能な脆弱性(危険度: 低)があることが判明いたしました。

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

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

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

脆弱性の概要****EC-CUBEにおけるRCE可能な脆弱性****危険度:

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

  • 4.0.0〜4.0.6-p3

詳細:

該当バージョンのEC-CUBEにはRCE可能な脆弱性が存在します。EC-CUBEはテンプレートエンジンとしてTwigを利用していますが、EC-CUBEの一部画面でTwigに対する設定不備が存在し、攻撃者が対象のシステム上で任意のコードを実行できる可能性があります。

JVNからの公表内容 (2023/11/07公開)

JVN#29195731: EC-CUBE 3系および 4系において任意のコードを実行される脆弱性

  • EC-CUBE 3系および 4系において任意のコードを実行される脆弱性 CVE-2023-46845

Twigの更新手順

EC-CUBE4.0系で利用している場合、Twigの不具合によりSandBox機能が動作しません。
修正方法を実施する前に、Twigのアップデートを行ってください。

Twigをアップデートするためには、composerを使用する方法とファイルを手動でアップデートする方法の2つがあります。
以下のどちらかを実施してください。

  • composerコマンドにて、Twigをアップデート:

    以下のコマンドを実行し、Twigを新しいバージョンに更新してください。
    $ composer update twig/twig
    $ composer update twig/extensions

    また、以下のコマンドを実行し、Twigが更新されていることを確認してください。

    $ composer show twig/twig
    ※以下のように表示されることを確認してください。
    name : twig/twig
    versions : * v2.15.5

    $ composer show twig/extensions
    ※以下のように表示されることを確認してください。
    name : twig/extensions
    versions : * v1.5.4

  • Twigのファイルを手動でアップデート:

    Twigを手動でアップデートする時は、以下の手順に従ってください。

    twig/twigのファイルを以下のURLからダウンロードします。
    https://github.com/twigphp/Twig/archive/refs/tags/v2.15.5.zip

    [EC-CUBEの設置先]/vendor/twig/twigディレクトリ内を削除してください。
    ダウンロードしたZIPファイルを[EC-CUBEの設置先]/vendor/twig/twigディレクトリに展開してください。

    twig/extensionのファイルを以下のURLからダウンロードします。
    https://github.com/twigphp/Twig-extensions/archive/refs/tags/v1.5.4.zip

    [EC-CUBEの設置先]/vendor/twig/extensionsディレクトリ内を削除してください。
    ダウンロードしたZIPファイルを[EC-CUBEの設置先]/vendor/twig/extensionsディレクトリに展開してください。

    ファイルが正しく上書きされたことを確認してください。
    また、EC-CUBEの動作を確認し、テンプレートが正しく表示されることを確認してください。

修正方法1: 修正ファイルを利用する場合(4.0系)****

※本修正を実施する前に、Twigの更新を必ず行ってください。

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

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

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

    • 修正ファイル(4.0.6-p3) (SHA256:0bcbb847ea1aaf8443f49f30015066122ce27f253574dcc92cae4b5859a6646f)

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

    4.0.6-p3

    • app/config/eccube/packages/twig_extensions.yaml
    • src/Eccube/Resource/template/default/Product/detail.twig
    • src/Eccube/Resource/template/default/default_frame.twig
    • src/Eccube/Twig/Extension/IgnoreTwigSandboxErrorExtension.php
    • src/Eccube/Twig/Sandbox/SecurityPolicyDecorator.php
  2. EC-CUBEファイルのバックアップ

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

  3. 修正ファイルの反映

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

    上書きするファイル

    4.0.6-p3

    • app/config/eccube/packages/twig_extensions.yaml
    • src/Eccube/Resource/template/default/Product/detail.twig
    • src/Eccube/Resource/template/default/default_frame.twig
    • src/Eccube/Twig/Extension/IgnoreTwigSandboxErrorExtension.php
    • src/Eccube/Twig/Sandbox/SecurityPolicyDecorator.php

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

    • app/template/default/Product/detail.twig
    • app/template/default/default_frame.twig

    また、snippet.twigに関してはプラグインで拡張する箇所となるため対応不要となります。

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

  4. キャッシュの削除

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

  5. 動作確認

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

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

※本修正を実施する前に、Twigの更新を必ず行ってください。

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

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

修正差分

  1. app/config/eccube/packages/twig_extensions.yaml +143 -0
  2. src/Eccube/Resource/template/default/Product/detail.twig +1 -1
  3. src/Eccube/Resource/template/default/default_frame.twig +1 -1
  4. src/Eccube/Twig/Extension/IgnoreTwigSandboxErrorExtension.php +78 -0
  5. src/Eccube/Twig/Sandbox/SecurityPolicyDecorator.php +47 -0

@@ -8,3 +8,146 @@ services:

8

8

#Twig\Extensions\DateExtension: ~

9

9

Twig\Extensions\IntlExtension: ~

10

10

#Twig\Extensions\TextExtension: ~

11

12

  • eccube.twig_sandbox.policy:

13

  • class: Twig\Sandbox\SecurityPolicy

14

  • arguments:

15

  • $allowedTags: “%eccube.twig_sandbox.allowed_tags%”

16

  • $allowedFilters: “%eccube.twig_sandbox.allowed_filters%”

17

  • $allowedFunctions: “%eccube.twig_sandbox.allowed_functions%”

18

  • $allowedMethods: “%eccube.twig_sandbox.allowed_methods%”

19

  • $allowedProperties: “%eccube.twig_sandbox.allowed_properties%”

20

  • eccube.twig_sandbox.extension:

21

  • class: Twig\Extension\SandboxExtension

22

  • arguments:

23

  • - ‘@eccube.twig_sandbox.policy’

24

  • - false

25

  • tags: [‘twig.extension’]

26

  • Eccube\Twig\Sandbox\SecurityPolicyDecorator:

27

  • decorates: ‘eccube.twig_sandbox.policy’

28

  • parameters:

29

  • eccube.twig_sandbox.allowed_tags:

30

  • - ‘apply’

31

  • - ‘block’

32

  • - ‘deprecated’

33

  • - ‘embed’

34

  • - ‘extends’

35

  • - ‘flush’

36

  • - ‘for’

37

  • - ‘if’

38

  • - ‘set’

39

  • - ‘spaceless’

40

  • - ‘verbatim’

41

  • - ‘with’

42

  • - ‘form_theme’

43

  • - ‘stopwatch’

44

  • - ‘trans’

45

  • - ‘trans_default_domain’

46

  • eccube.twig_sandbox.allowed_filters:

47

  • - ‘abs’

48

  • - ‘batch’

49

  • - ‘capitalize’

50

  • - ‘column’

51

  • - ‘convert_encoding’

52

  • - ‘date’

53

  • - ‘date_modify’

54

  • - ‘default’

55

  • - ‘escape’

56

  • - ‘first’

57

  • - ‘format’

58

  • - ‘join’

59

  • - ‘json_encode’

60

  • - ‘keys’

61

  • - ‘last’

62

  • - ‘length’

63

  • - ‘lower’

64

  • - ‘merge’

65

  • - ‘nl2br’

66

  • - ‘number_format’

67

  • - ‘replace’

68

  • - ‘reverse’

69

  • - ‘round’

70

  • - ‘slice’

71

  • - ‘spaceless’

72

  • - ‘split’

73

  • - ‘striptags’

74

  • - ‘title’

75

  • - ‘trim’

76

  • - ‘upper’

77

  • - ‘url_encode’

78

  • - ‘abbr_class’

79

  • - ‘abbr_method’

80

  • - ‘file_link’

81

  • - ‘format_args’

82

  • - ‘format_args_as_text’

83

  • - ‘humanize’

84

  • - ‘trans’

85

  • - ‘yaml_dump’

86

  • - ‘yaml_encode’

87

  • - ‘date_day’

88

  • - ‘date_day_with_weekday’

89

  • - ‘date_format’

90

  • - ‘date_min’

91

  • - ‘date_sec’

92

  • - ‘doctrine_pretty_query’

93

  • - ‘doctrine_replace_query_parameters’

94

  • - ‘e’

95

  • - ‘ellipsis’

96

  • - ‘file_ext_icon’

97

  • - ‘form_encode_currency’

98

  • - ‘format_log_message’

99

  • - ‘no_image_product’

100

  • - ‘price’

101

  • - ‘time_ago’

102

  • - ‘doctrine_minify_query’

103

  • - ‘localizedcurrency’

104

  • - ‘localizeddate’

105

  • - ‘localizednumber’

106

  • - ‘transchoice’

107

  • eccube.twig_sandbox.allowed_functions:

108

  • - ‘cycle’

109

  • - ‘date’

110

  • - ‘max’

111

  • - ‘min’

112

  • - ‘random’

113

  • - ‘range’

114

  • - ‘absolute_url’

115

  • - ‘asset’

116

  • - ‘asset_version’

117

  • - ‘csrf_token’

118

  • - ‘is_granted’

119

  • - ‘logout_path’

120

  • - ‘logout_url’

121

  • - ‘path’

122

  • - ‘relative_path’

123

  • - ‘url’

124

  • - ‘active_menus’

125

  • - ‘class_categories_as_json’

126

  • - ‘csrf_token_for_anchor’

127

  • - ‘currency_symbol’

128

  • - ‘get_all_carts’

129

  • - ‘get_cart’

130

  • - ‘get_carts_total_price’

131

  • - ‘get_carts_total_quantity’

132

  • - ‘has_errors’

133

  • - ‘is_reduced_tax_rate’

134

  • - ‘product’

135

  • - ‘workflow_can’

136

  • - ‘workflow_has_marked_place’

137

  • - ‘workflow_marked_places’

138

  • - ‘workflow_transitions’

139

  • - ‘device_version’

140

  • - ‘full_view_url’

141

  • - ‘is_android_os’

142

  • - ‘is_device’

143

  • - ‘is_full_view’

144

  • - ‘is_ios’

145

  • - ‘is_mobile’

146

  • - ‘is_mobile_view’

147

  • - ‘is_not_mobile_view’

148

  • - ‘is_tablet’

149

  • - ‘is_tablet_view’

150

  • eccube.twig_sandbox.allowed_methods:

151

  • 'Symfony\Bridge\Twig\AppVariable’: [ ‘getrequest’ ]

152

  • 'Symfony\Component\HttpFoundation\Request’: [ ‘geturi’ ]

153

  • eccube.twig_sandbox.allowed_properties: []

@@ -375,7 +375,7 @@ file that was distributed with this source code.

375

375

</div>

376

376

{% if Product.freearea %}

377

377

<div class="ec-productRole__description">

378

- {{ include(template_from_string(Product.freearea)) }}

378

  • {{ include(template_from_string(Product.freearea), sandboxed = true) }}

379

379

</div>

380

380

{% endif %}

381

381

</div>

@@ -28,7 +28,7 @@ file that was distributed with this source code.

28

28

<meta name="robots" content="{{ Page.meta_robots }}">

29

29

{% endif %}

30

30

{% if Page.meta_tags is not empty %}

31

- {{ include(template_from_string(Page.meta_tags)) }}

31

  • {{ include(template_from_string(Page.meta_tags), sandboxed = true) }}

32

32

{% endif %}

33

33

<link rel="icon" href="{{ asset('assets/img/common/favicon.ico’, ‘user_data’) }}">

34

34

<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">

@@ -0,0 +1,78 @@

1

  • <?php

2

3

  • /*

4

  • * This file is part of EC-CUBE

5

  • *

6

  • * Copyright© EC-CUBE CO.,LTD. All Rights Reserved.

7

  • *

8

  • * http://www.ec-cube.co.jp/

9

  • *

10

  • * For the full copyright and license information, please view the LICENSE

11

  • * file that was distributed with this source code.

12

  • */

13

14

  • namespace Eccube\Twig\Extension;

15

16

  • use Twig\Environment;

17

  • use Twig\Error\LoaderError;

18

  • use Twig\Extension\AbstractExtension;

19

  • use Twig\Extension\SandboxExtension;

20

  • use Twig\Sandbox\SecurityError;

21

  • use Twig\TwigFunction;

22

23

  • /**

24

  • * \vendor\twig\twig\src\Extension\CoreExtension の拡張

25

  • */

26

  • class IgnoreTwigSandboxErrorExtension extends AbstractExtension

27

  • {

28

  • /**

29

  • * {@inheritdoc}

30

  • */

31

  • public function getFunctions(): array

32

  • {

33

  • return [

34

  • new TwigFunction('include’, [$this, ‘twig_include’], [‘needs_environment’ => true, ‘needs_context’ => true, ‘is_safe’ => [‘all’]]),

35

  • ];

36

  • }

37

38

  • /**

39

  • * twig sandboxの例外を操作します

40

  • * app_env = devの場合、エラーを表示する

41

  • * app_env = prodの場合、エラーを表示しない

42

  • *

43

  • * @param Environment $env

44

  • * @param $context

45

  • * @param $template

46

  • * @param $variables

47

  • * @param $withContext

48

  • * @param $ignoreMissing

49

  • * @param $sandboxed

50

  • *

51

  • * @return string|void

52

  • *

53

  • * @throws LoaderError

54

  • * @throws SecurityError

55

  • */

56

  • public function twig_include(Environment $env, $context, $template, $variables = [], $withContext = true, $ignoreMissing = false, $sandboxed = false)

57

  • {

58

  • try {

59

  • return \twig_include($env, $context, $template, $variables, $withContext, $ignoreMissing, $sandboxed);

60

  • } catch (SecurityError $e) {

61

62

  • // devではエラー画面が表示されるようにする

63

  • $appEnv = env(‘APP_ENV’);

64

  • if ($appEnv === ‘dev’) {

65

  • throw $e;

66

  • } else {

67

  • // ログ出力

68

  • log_warning($e->getMessage(), [‘exception’ => $e]);

69

70

  • // 例外がスローされた場合、sandboxが効いた状態になってしまうため追加

71

  • $sandbox = $env->getExtension(SandboxExtension::class);

72

  • if (!$sandbox->isSandboxedGlobally()) {

73

  • $sandbox->disableSandbox();

74

  • }

75

  • }

76

  • }

77

  • }

78

  • }

@@ -0,0 +1,47 @@

1

  • <?php

2

3

  • /*

4

  • * This file is part of EC-CUBE

5

  • *

6

  • * Copyright© EC-CUBE CO.,LTD. All Rights Reserved.

7

  • *

8

  • * http://www.ec-cube.co.jp/

9

  • *

10

  • * For the full copyright and license information, please view the LICENSE

11

  • * file that was distributed with this source code.

12

  • */

13

14

  • namespace Eccube\Twig\Sandbox;

15

16

  • use Twig\Sandbox\SecurityPolicy as BasePolicy;

17

  • use Twig\Sandbox\SecurityPolicyInterface;

18

19

  • class SecurityPolicyDecorator implements SecurityPolicyInterface {

20

21

  • /** @var BasePolicy */

22

  • private $securityPolicy;

23

24

  • public function __construct(BasePolicy $securityPolicy)

25

  • {

26

  • $this->securityPolicy = $securityPolicy;

27

  • }

28

29

  • public function checkSecurity($tags, $filters, $functions)

30

  • {

31

  • $this->securityPolicy->checkSecurity($tags, $filters, $functions);

32

  • }

33

34

  • public function checkMethodAllowed($obj, $method)

35

  • {

36

  • // __toStringの場合はチェックをスキップする

37

  • if ($method === ‘__toString’) {

38

  • return;

39

  • }

40

  • $this->securityPolicy->checkMethodAllowed($obj, $method);

41

  • }

42

43

  • public function checkPropertyAllowed($obj, $method)

44

  • {

45

  • $this->securityPolicy->checkPropertyAllowed($obj, $method);

46

  • }

47

  • }

問い合わせ先

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

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