File tree Expand file tree Collapse file tree
Controller/Admin/Setting/System Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -109,6 +109,13 @@ public function set(Request $request)
109109 if (!$ this ->twoFactorAuthService ->isEnabled () || $ this ->twoFactorAuthService ->isAuth ($ Member )) {
110110 return $ this ->redirectToRoute ('admin_homepage ' );
111111 }
112+
113+ // 既に2FAキーが設定されている場合は、認証画面にリダイレクト
114+ // 2FA未認証状態での再設定を防ぐ(MFAバイパス脆弱性対策)
115+ if ($ Member ->getTwoFactorAuthKey ()) {
116+ return $ this ->redirectToRoute ('admin_two_factor_auth ' );
117+ }
118+
112119 $ res = $ this ->createResponse ($ request );
113120
114121 return $ res ;
Original file line number Diff line number Diff line change @@ -28,7 +28,12 @@ class TwoFactorAuthListener implements EventSubscriberInterface
2828 /**
2929 * @var array 2段階認証のチェックを除外するroute
3030 */
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 ' ];
3237
3338 /**
3439 * @var EccubeConfig
@@ -89,9 +94,18 @@ public function onKernelController(ControllerArgumentsEvent $event)
8994 return ;
9095 }
9196
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+
92107 if (
93- ($ Member = $ this ->requestContext ->getCurrentUser ())
94- && $ Member instanceof Member
108+ $ Member instanceof Member
95109 && $ Member ->isTwoFactorAuthEnabled ()
96110 && !$ this ->twoFactorAuthService ->isAuth ($ Member )
97111 ) {
You can’t perform that action at this time.
0 commit comments