EC-CUBE 4.1/4.2/4.3におけるMFAバイパスが可能な脆弱性(JVN#63765888)

更新履歴
2026/03/05 14:00
JVNからの公表内容情報へのリンクを追加
2026/02/10 15:00
初版公開

EC-CUBE 4.1/4.2/4.3におけるMFAバイパスが可能な脆弱性

EC-CUBE 4.1/4.2/4.3におけるMFAバイパスが可能な脆弱性(危険度: 中)が確認されました。

以下のいずれかの修正方法にてご対応をお願いいたします。

当該脆弱性は、修正ファイルの適用により解消されることを確認しております。 現時点で被害報告はございませんが、可能な限り速やかにご対応いただけますようお願いいたします。

脆弱性の概要

EC-CUBE 4.1/4.2/4.3におけるMFAバイパスが可能な脆弱性

危険度:

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

詳細:

管理者アカウントの認証情報(IDとパスワード)が漏洩し悪用された場合、二要素認証(2FA)がバイパスされる脆弱性があり、管理画面への不正ログインを許容してしまう問題です。


JVNからの公表内容 (2026/03/05 公開)

JVN#63765888 EC-CUBEにおける多要素認証をバイパスされる脆弱性

修正方法1: 修正ファイルを適用

※ 修正の適用にあたっては、まず開発環境にて動作をご確認ください。

以下の手順に従い修正ファイルの適用をお願いします。

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

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

    ダウンロードファイルを解凍後、中身をご確認ください。必ずご利用中のバージョンに合致するファイルを適用してください。

    4.1.2-p5

    • src/Eccube/EventListener/TwoFactorAuthListener.php
    • src/Eccube/Controller/Admin/Setting/System/TwoFactorAuthController.php

    4.2.3-p2

    • src/Eccube/EventListener/TwoFactorAuthListener.php
    • src/Eccube/Controller/Admin/Setting/System/TwoFactorAuthController.php

    4.3.1-p1

    • src/Eccube/EventListener/TwoFactorAuthListener.php
    • src/Eccube/Controller/Admin/Setting/System/TwoFactorAuthController.php
  2. EC-CUBEファイルのバックアップ

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

  3. 修正ファイルの反映

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

    上書きするファイル

    4.1.2-p5

    • src/Eccube/EventListener/TwoFactorAuthListener.php
    • src/Eccube/Controller/Admin/Setting/System/TwoFactorAuthController.php

    4.2.3-p2

    • src/Eccube/EventListener/TwoFactorAuthListener.php
    • src/Eccube/Controller/Admin/Setting/System/TwoFactorAuthController.php

    4.3.1-p1

    • src/Eccube/EventListener/TwoFactorAuthListener.php
    • src/Eccube/Controller/Admin/Setting/System/TwoFactorAuthController.php

    ※デザインテンプレートの適用やEC-CUBE本体のカスタマイズを行っている場合は、
    修正箇所の差分をご確認のうえ反映をお願いします。

  4. キャッシュの削除

    EC-CUBE管理画面にログインして、コンテンツ管理 -> キャッシュ管理 のページからキャッシュの削除を行ってください。

  5. 動作確認

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

修正方法2-1: 修正差分を確認して適用(4.1系)

※修正の適用にあたっては、まず開発環境にて動作をご確認ください。

※本修正方法はEC-CUBE 4.1.2-p4のバージョンを例として提示しております。

下記のコード差分情報を参照して必要な箇所に修正を行ってください。過去バージョンをご利用の場合は、下記修正対象ファイルの修正差分を参考にご対応お願いいたします。

修正差分

src/Eccube/Controller/Admin/Setting/System/TwoFactorAuthController.php CHANGED
@@ -117,6 +117,13 @@ class TwoFactorAuthController extends AbstractController
117
117
  if (!$this->twoFactorAuthService->isEnabled() || $this->twoFactorAuthService->isAuth($Member)) {
118
118
  return $this->redirectToRoute('admin_homepage');
119
119
  }
120
+
121
+ // 既に2FAキーが設定されている場合は、認証画面にリダイレクト
122
+ // 2FA未認証状態での再設定を防ぐ(MFAバイパス対策)
123
+ if ($Member->getTwoFactorAuthKey()) {
124
+ return $this->redirectToRoute('admin_two_factor_auth');
125
+ }
126
+
120
127
  $res = $this->createResponse($request);
121
128
 
122
129
  return $res;
src/Eccube/EventListener/TwoFactorAuthListener.php CHANGED
@@ -28,7 +28,12 @@ class TwoFactorAuthListener implements EventSubscriberInterface
28
28
  /**
29
29
  * @var array 2段階認証のチェックを除外するroute
30
30
  */
31
- const ROUTE_EXCLUDE = ['admin_two_factor_auth', 'admin_two_factor_auth_set'];
31
+ const ROUTE_EXCLUDE = ['admin_two_factor_auth'];
32
+
33
+ /**
34
+ * @var array 2段階認証キー未設定時のみ除外するroute
35
+ */
36
+ const ROUTE_EXCLUDE_WHEN_NOT_CONFIGURED = ['admin_two_factor_auth_set'];
32
37
 
33
38
  /**
34
39
  * @var EccubeConfig
@@ -90,9 +95,18 @@ class TwoFactorAuthListener implements EventSubscriberInterface
90
95
  return;
91
96
  }
92
97
 
98
+ $Member = $this->requestContext->getCurrentUser();
99
+
100
+ // 2FAキー未設定時のみ除外するルートのチェック
101
+ // 既に2FAキーが設定されている場合は除外しない(認証が必要)
102
+ if (in_array($route, self::ROUTE_EXCLUDE_WHEN_NOT_CONFIGURED)) {
103
+ if ($Member instanceof Member && !$Member->getTwoFactorAuthKey()) {
104
+ return;
105
+ }
106
+ }
107
+
93
108
  if (
94
- ($Member = $this->requestContext->getCurrentUser())
95
- && $Member instanceof Member
109
+ $Member instanceof Member
96
110
  && $Member->isTwoFactorAuthEnabled()
97
111
  && !$this->twoFactorAuthService->isAuth($Member)
98
112
  ) {

修正方法2-2: 修正差分を確認して適用(4.2系)

※修正の適用にあたっては、まず開発環境にて動作をご確認ください。

※本修正方法はEC-CUBE4.2.3-p1のバージョンを例として提示しております。

下記のコード差分情報を参照して必要な箇所に修正を行ってください。過去バージョンをご利用の場合は、下記修正対象ファイルの修正差分を参考にご対応お願いいたします。

修正差分

src/Eccube/Controller/Admin/Setting/System/TwoFactorAuthController.php CHANGED
@@ -117,6 +117,13 @@ class TwoFactorAuthController extends AbstractController
117
117
  if (!$this->twoFactorAuthService->isEnabled() || $this->twoFactorAuthService->isAuth($Member)) {
118
118
  return $this->redirectToRoute('admin_homepage');
119
119
  }
120
+
121
+ // 既に2FAキーが設定されている場合は、認証画面にリダイレクト
122
+ // 2FA未認証状態での再設定を防ぐ(MFAバイパス対策)
123
+ if ($Member->getTwoFactorAuthKey()) {
124
+ return $this->redirectToRoute('admin_two_factor_auth');
125
+ }
126
+
120
127
  $res = $this->createResponse($request);
121
128
 
122
129
  return $res;
src/Eccube/EventListener/TwoFactorAuthListener.php CHANGED
@@ -28,7 +28,12 @@ class TwoFactorAuthListener implements EventSubscriberInterface
28
28
  /**
29
29
  * @var array 2段階認証のチェックを除外するroute
30
30
  */
31
- public const ROUTE_EXCLUDE = ['admin_two_factor_auth', 'admin_two_factor_auth_set'];
31
+ public const ROUTE_EXCLUDE = ['admin_two_factor_auth'];
32
+
33
+ /**
34
+ * @var array 2段階認証キー未設定時のみ除外するroute
35
+ */
36
+ public const ROUTE_EXCLUDE_WHEN_NOT_CONFIGURED = ['admin_two_factor_auth_set'];
32
37
 
33
38
  /**
34
39
  * @var EccubeConfig
@@ -90,9 +95,18 @@ class TwoFactorAuthListener implements EventSubscriberInterface
90
95
  return;
91
96
  }
92
97
 
98
+ $Member = $this->requestContext->getCurrentUser();
99
+
100
+ // 2FAキー未設定時のみ除外するルートのチェック
101
+ // 既に2FAキーが設定されている場合は除外しない(認証が必要)
102
+ if (in_array($route, self::ROUTE_EXCLUDE_WHEN_NOT_CONFIGURED)) {
103
+ if ($Member instanceof Member && !$Member->getTwoFactorAuthKey()) {
104
+ return;
105
+ }
106
+ }
107
+
93
108
  if (
94
- ($Member = $this->requestContext->getCurrentUser())
95
- && $Member instanceof Member
109
+ $Member instanceof Member
96
110
  && $Member->isTwoFactorAuthEnabled()
97
111
  && !$this->twoFactorAuthService->isAuth($Member)
98
112
  ) {

修正方法2-3: 修正差分を確認して適用(4.3系)

※修正の適用にあたっては、まず開発環境にて動作をご確認ください。

※本修正方法はEC-CUBE 4.3.1のバージョンを例として提示しております。

下記のコード差分情報を参照して必要な箇所に修正を行ってください。過去バージョンをご利用の場合は、下記修正対象ファイルの修正差分を参考にご対応お願いいたします。

修正差分

src/Eccube/Controller/Admin/Setting/System/TwoFactorAuthController.php CHANGED
@@ -109,6 +109,13 @@ class TwoFactorAuthController extends AbstractController
109
109
  if (!$this->twoFactorAuthService->isEnabled() || $this->twoFactorAuthService->isAuth($Member)) {
110
110
  return $this->redirectToRoute('admin_homepage');
111
111
  }
112
+
113
+ // 既に2FAキーが設定されている場合は、認証画面にリダイレクト
114
+ // 2FA未認証状態での再設定を防ぐ(MFAバイパス脆弱性対策)
115
+ if ($Member->getTwoFactorAuthKey()) {
116
+ return $this->redirectToRoute('admin_two_factor_auth');
117
+ }
118
+
112
119
  $res = $this->createResponse($request);
113
120
 
114
121
  return $res;
src/Eccube/EventListener/TwoFactorAuthListener.php CHANGED
@@ -28,7 +28,12 @@ class TwoFactorAuthListener implements EventSubscriberInterface
28
28
  /**
29
29
  * @var array 2段階認証のチェックを除外するroute
30
30
  */
31
- public const ROUTE_EXCLUDE = ['admin_two_factor_auth', 'admin_two_factor_auth_set'];
31
+ public const ROUTE_EXCLUDE = ['admin_two_factor_auth'];
32
+
33
+ /**
34
+ * @var array 2段階認証キー未設定時のみ除外するroute
35
+ */
36
+ public const ROUTE_EXCLUDE_WHEN_NOT_CONFIGURED = ['admin_two_factor_auth_set'];
32
37
 
33
38
  /**
34
39
  * @var EccubeConfig
@@ -89,9 +94,18 @@ class TwoFactorAuthListener implements EventSubscriberInterface
89
94
  return;
90
95
  }
91
96
 
97
+ $Member = $this->requestContext->getCurrentUser();
98
+
99
+ // 2FAキー未設定時のみ除外するルートのチェック
100
+ // 既に2FAキーが設定されている場合は除外しない(認証が必要)
101
+ if (in_array($route, self::ROUTE_EXCLUDE_WHEN_NOT_CONFIGURED)) {
102
+ if ($Member instanceof Member && !$Member->getTwoFactorAuthKey()) {
103
+ return;
104
+ }
105
+ }
106
+
92
107
  if (
93
- ($Member = $this->requestContext->getCurrentUser())
94
- && $Member instanceof Member
108
+ $Member instanceof Member
95
109
  && $Member->isTwoFactorAuthEnabled()
96
110
  && !$this->twoFactorAuthService->isAuth($Member)
97
111
  ) {

問い合わせ先

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

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