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バイパスが可能な脆弱性(危険度: 中)が確認されました。
以下のいずれかの修正方法にてご対応をお願いいたします。
- 修正方法1:修正ファイルを適用
- 修正方法2:修正差分を確認して適用
当該脆弱性は、修正ファイルの適用により解消されることを確認しております。 現時点で被害報告はございませんが、可能な限り速やかにご対応いただけますようお願いいたします。
脆弱性の概要
EC-CUBE 4.1/4.2/4.3におけるMFAバイパスが可能な脆弱性
危険度:
中
不具合が存在するEC-CUBEのバージョン:
- 4.1.0〜4.3.1
詳細:
管理者アカウントの認証情報(IDとパスワード)が漏洩し悪用された場合、二要素認証(2FA)がバイパスされる脆弱性があり、管理画面への不正ログインを許容してしまう問題です。
JVNからの公表内容 (2026/03/05 公開)
修正方法1: 修正ファイルを適用
※ 修正の適用にあたっては、まず開発環境にて動作をご確認ください。
以下の手順に従い修正ファイルの適用をお願いします。
- 修正ファイルのダウンロード
ご利用中のEC-CUBEのバージョンに該当する修正ファイル(パッチファイル)をダウンロードしてください。
※EC-CUBEのバージョンはこちらの手順でご確認ください。
※修正ファイルは各バージョンの最新版に対して作成しています。旧バージョンをご利用の場合は、「修正方法2」のご対応をお願いします。
※対象のファイルに対してカスタマイズを行っている場合は、「修正方法2」のご対応をお願いします。-
修正ファイル(4.1.2-p5用)
(SHA256: a124baf4743923e0500829e561c4b2b1606958af07abb3817660a478af487274) -
修正ファイル(4.2.3-p2用)
(SHA256: bececb7a5a2a7e496dec827c5eaeb2ef7fb8a8713b9e47a96f6735c6f0e4f2d8) -
修正ファイル(4.3.1-p1用)
(SHA256: 78aa754893b1f78f560288ad44fa5411a2be8b76c92f6754dc2de10c9734abb7)
ダウンロードファイルを解凍後、中身をご確認ください。必ずご利用中のバージョンに合致するファイルを適用してください。
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
-
修正ファイル(4.1.2-p5用)
- EC-CUBEファイルのバックアップ
あらかじめEC-CUBEファイル全体のバックアップを行ってください。
※作業中はメンテナンスモードに切り替えることをお勧めします。 - 修正ファイルの反映
以下のファイルを上書き更新してください。
上書きするファイル
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本体のカスタマイズを行っている場合は、
修正箇所の差分をご確認のうえ反映をお願いします。 - キャッシュの削除
EC-CUBE管理画面にログインして、コンテンツ管理 -> キャッシュ管理 のページからキャッシュの削除を行ってください。
- 動作確認
フロント画面と管理画面それぞれにおいて、基本操作が正常に行えることをご確認ください。
※メンテナンスモードにされた場合は解除を行ってください。
修正方法2-1: 修正差分を確認して適用(4.1系)
※修正の適用にあたっては、まず開発環境にて動作をご確認ください。
※本修正方法はEC-CUBE 4.1.2-p4のバージョンを例として提示しております。
下記のコード差分情報を参照して必要な箇所に修正を行ってください。過去バージョンをご利用の場合は、下記修正対象ファイルの修正差分を参考にご対応お願いいたします。
修正差分
|
@@ -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;
|
|
@@ -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'
|
|
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
|
-
|
|
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のバージョンを例として提示しております。
下記のコード差分情報を参照して必要な箇所に修正を行ってください。過去バージョンをご利用の場合は、下記修正対象ファイルの修正差分を参考にご対応お願いいたします。
修正差分
|
@@ -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;
|
|
@@ -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'
|
|
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
|
-
|
|
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のバージョンを例として提示しております。
下記のコード差分情報を参照して必要な箇所に修正を行ってください。過去バージョンをご利用の場合は、下記修正対象ファイルの修正差分を参考にご対応お願いいたします。
修正差分
|
@@ -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;
|
|
@@ -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'
|
|
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
|
-
|
|
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]