本卡屬 FR-114 資安修正(母卡 CM-2019),第 5 批子集 C 卡 5C-2,修 SUMMARY #14 M02 側(M02-5,客戶端物件儲存密鑰外洩)與 #124(M02-11,儲存連線未加密)。#14 高,#124 高。計畫在 docs/features/FR-114-2609-security-fix-dispatch/batches/plan-b5C.md「卡 5C-2」段。#14 的 M22 側(總部管理層)由卡 5A-3 處理,兩張互相註明。

問題是什麼(白話)

#14(M02 側):客戶自己設定的物件儲存(MinIO/SeaweedFS)連線密鑰,系統會把真實值原樣回傳給前端畫面,任何看得到這個設定頁或攔得到網路封包的人都能拿到密鑰。既有的兩份遮蔽名單都各自漏掉了這組儲存設定,證明「靠名單」這招已經失敗兩次。

#124:系統連線客戶端的物件儲存(MinIO/SeaweedFS)目前是不加密連線,內容與密鑰在客戶內網以明文傳輸。這不是「沒填就預設不加密」——現有 7 組設定全部都是明確設成不加密,改預設值對既有環境完全沒有效果。與 Google Drive 無關(Google 工具自帶加密、沒有開關)。

首腦核對:

工作區

在哪裡

app/upload_file/service/managed_file_upload_service.py:104-110    MinIO 分支,secret_key=v.get('minio_secret_key', '') 明文讀出,#14
app/upload_file/service/managed_file_upload_service.py:119-125    SeaweedFS 分支,同一密鑰用兩個名字都收,#14
app/upload_file/service/managed_file_upload_service.py:109    MinIO 分支 secure=v.get('secure', False),#124
app/upload_file/service/managed_file_upload_service.py:124    SeaweedFS 分支同樣寫法,#124
src/views/storage-config/StorageConfigForm.vue:33    passwordHasChange ref,步驟②「是否真的改了密碼」判斷要用它
src/views/storage-config/StorageConfigForm.vue:131    minio_secret_key 驗證規則
src/views/storage-config/StorageConfigForm.vue:353,358    送出邏輯把 minio_secret_key 塞進一般 key 與加前綴 key 兩個欄位
src/views/storage-config/StorageConfigForm.vue:469-491    Password 元件與驗證訊息
scripts/installer/install.sh:1206-1207    讀 GUIDANT_S3_ACCESS_KEY/GUIDANT_S3_SECRET_KEY,步驟⑤盤點起點
scripts/installer/install.sh:1963    psql 變數注入,同上盤點
scripts/installer/install.sh:2607-2608,2640-2645    出貨快照行也寫入密鑰,步驟⑤盤點;:2644 是 'secure', false,#124
scripts/installer/install.sh:1954,2002    另兩處 'secure', false,#124
jedi-system-jedi-system-core/jedi_system_core/api/guards.py:94-124    mask_secret_value,唯讀參考不動(卡 5A-3 工作)
jedi-system-jedi-system-core/jedi_system_core/plugin/contract.py:61,65    DEFAULT_SECRET_MASKED_GROUPS/DEFAULT_SECRET_VALUE_KEYS,唯讀參考不動(卡 5A-3 工作)

怎麼修

D-b5C-3(既有 7 組設定要不要換成加密)決策者已裁照建議:開發期只動 DEV,STG/POC 等各環境明確放行;本卡只交付「怎麼切換與怎麼回滾」的文件,不自己動 STG/POC。