EC-CUBE / ec-cube2

EC-CUBE official repository version 2
https://www.ec-cube.net
Other
86 stars 97 forks source link

削除済みメンバー名義でログインされることがある #929

Open seasoftjapan opened 3 months ago

seasoftjapan commented 3 months ago

削除済みメンバーと同じ login_id でメンバー登録した場合、削除済みの情報 (member_id, authority, login_date, name) でログインされる場合がある。(実際に管理画面の操作で発生することを確認済み。)

パスワード認証は、削除済みメンバーのパスワードで行われることはなく、新たなメンバーのパスワードで行われる。よって、致命的な脆弱性ではない認識。意図しない権限でログインされる懸念はあるが、現実的な影響は低いと想定している。

LC_Page_Admin_Index::lfDoLogin() が、ガバガバなのが原因。 根本的には当該クラス全体で login_id を使いすぎで、後半は member_id をキーとして扱うのが望ましい。

lfIsLoginMember() と lfDoLogin() がやや離れている印象もある。

seasoftjapan commented 3 months ago

応急修正コード (根本的にはダメだけど、多分動くやつ)

diff --git data/class/pages/admin/LC_Page_Admin_Index.php data/class/pages/admin/LC_Page_Admin_Index.php
index 40a8cb784..678a5a5cf 100644
--- data/class/pages/admin/LC_Page_Admin_Index.php
+++ data/class/pages/admin/LC_Page_Admin_Index.php
@@ -165,7 +165,7 @@ public function lfDoLogin($login_id)
         //メンバー情報取得
         $cols = 'member_id, authority, login_date, name';
         $table = 'dtb_member';
-        $where = 'login_id = ?';
+        $where = 'login_id = ? AND del_flg <> 1 AND work = 1';
         $arrData = $objQuery->getRow($cols, $table, $where, array($login_id));
         // セッション登録
         $sid = $this->lfSetLoginSession($arrData['member_id'], $login_id, $arrData['authority'], $arrData['name'], $arrData['login_date']);