本卡為 FR-096 母案:掃 jedi-system-core 這支套件與它在主專案的接線,三棒共 82 檔,只掃不修。子卡清單在末段。

這系列在做什麼(白話)

這支套件管的是「系統設定」與「選單字典」兩張表。設定表裡存的是寄信伺服器、LDAP 目錄服務、物件儲存這些外部系統的連線資料——包含帳號與密碼。選單字典存的是前端下拉選單的選項文字(例如「啟用/停用」)。

前面幾支掃的是「誰能看到誰的資料」。這一支的風險形狀不一樣:這裡存的不是客戶資料,是系統自己的鑰匙。一把寄信伺服器的密碼外流,攻擊者就能用公司名義寄釣魚信;一把物件儲存的密碼外流,所有客戶上傳的檔案都在他手上。而且改設定是全站生效的總開關——改掉 LDAP 伺服器位址,等於把全公司的登入驗證導去攻擊者的機器。

為什麼要做

① 這支是「起手式五支」之一(common/iam/log/system-core/notification),每個新客戶裝上就有,出問題是全產品範圍。

② 總表已經登記了好幾條「密碼被寫進日誌檔」與「儲存設定的帳密沒遮罩就回給前端」的問題(FR-085 C2、FR-086 B2-A),源頭都是這張設定表。這一棒要把源頭那一段查清楚,而不是繼續在下游一條一條撿。

③ 主專案側有一支名字就寫著「守門版」的服務(guarded_system_config_service.py)——名字說它擋了什麼,那就要查「有沒有路徑繞過它」。首腦開卡時已經查出四處繞過,見下一段。

首腦讀完程式碼後,最值得看的六點

以下都是首腦 2026-09-15 親自開檔看過的,行號與內容屬實。不是要 runner 重新確認這些,是要他從這裡往外追

已經查證過的事——不要重報

system_menus 這張表沒有隔離,是正確的,不是漏洞。 首腦 2026-09-15 對 DEV 實查:這張表 rls=false、0 條規則、共 74 筆,內容全是下拉選單的碼表(USER_STATUS/ENABLE_STATUS/ANS_TYPE 這類),沒有客戶資料、沒有個資。選單字典是全站 UI 的資料來源,隔離起來會壞掉所有頁面。掃到請不要當發現報。

但有一件相關的事要記一句:查選單的請求格式(api/serializers/system_menu.py:25-31SystemMenuQueryRequest)六個欄位全部非必填,送一個空的查詢條件就會回全表。以這張表的內容而言影響有限,但它屬於首腦正在盤的「共用底層送空條件就回全表」那條線(總表 §6 A 組第 15 項,已經是第三次撞到)。報告裡寫一句、標明歸那條線即可,不要當獨立發現升級。

DEV 另一半的實查數字(給對照用,未經面板驗證):system_configs 有隔離(rls=true、4 條規則),共 23 筆分佈在 6 個客戶,分組是 ISSUE_INTEGRATE_CONFIG 2/NOTIFY_CONFIG 2/RUNTIME_CONFIG 7/SMTP 2/STORAGE_CONFIG 7/THIRD_PARTY_LOGIN 2/WEB_IDEL_CONFIG 1。其中 6 筆的密碼欄位是有值的(不是空字串),也就是說這不是空表,真的有東西可偷。