FR-083 · 需求索引 · 本頁由 build 掃資料夾生成

FR-083 AI 儀表板(jedi-ai-dashboard)資安檢查

🔄 兩棒掃完一棒(2026-09-10)。D2(宿主接線 18 檔)已掃完並驗收——11 條(2 HIGH/9 MEDIUM),stamp verified、33 票全投。D1(套件本體 34 檔)尚未跑。 依決策者裁定先不開修正卡,發現已登記進跨 arc 總表 §3,之後從總表決定要修哪些

狀態:🔄 進行中 文件 1 份

🔴 一頁看完

任何一個最基層的員工,只要對 AI 儀表板打字說「列出所有使用者」,就能拿到全公司的帳號名冊——而且回傳的資料裡還夾帶了每個帳號密碼加密用的「鹽值」。

同一個查詢功能,走正常的網頁路徑需要「使用者讀取」權限,走 AI 儀表板這條路完全不用

§1

這在做什麼(白話)

「AI 儀表板」讓使用者用自然語言打字問問題(例如「列出所有專案的進度」),AI 自己決定要呼叫系統裡的哪一支查詢功能,把查到的資料拿去設計版面做成圖表。

可以被 AI 呼叫的查詢功能總共有 27 支,這個 arc 要回答的是:那 27 支有沒有檢查權限?查到的資料會不會被送到公司外面?使用者能不能用打字誘導 AI 去查他本來看不到的東西?

§2

為什麼掃它

上一個案子(FR-079)已經證明這條路有洞,但當時只驗證了 27 支裡的 1 支。

FR-079 的 F13 查到「AI 儀表板可以直接呼叫公告查詢,不經過網頁那層的任何權限檢查,而且結果前三筆原文送給第三方 AI」。這次是專門來查剩下那 26 支的。

§3

進度

掃什麼 檔數 狀態 報告
D2 主專案的接線與 27 支查詢功能名冊 18 已掃完並驗收(11 條) 報告
D1 套件本身(AI 怎麼決定要查什麼) 34 尚未跑
§4

D2 找到什麼

範圍內 3 條(都跟「繞過權限檢查」有關)

# 這是什麼問題 嚴重度
F3 任何登入者可透過 AI 儀表板列出全公司的帳號、角色、租戶、部門。產品自己定義了四個權限點(user.readrole.readtenant.readdepartment.read),這條路四個全繞過 🟡 中
F9 回應夾帶每個帳號的密碼鹽值。正常的列表功能刻意排除了這個欄位,唯獨 AI 儀表板這條路沒做過濾 🟡 中
F10 專案清單有「當作管理員」後門,非成員可列舉租戶內全部專案。🔴 這是刻意設計不是寫錯(見報告) 🟡 中

最能說明問題的是這個對比(首腦已開檔核對):

同一個 UserService.get_users 方法,兩條路:

走正常網頁路徑                        走 AI 儀表板
user_route.py:80                      dashboard_apis/auth.py:31
  @capability_required("user.read")     (沒有任何權限檢查)

範圍外 8 條(密碼被寫進版控檔案,順手撿到的)

其中 2 條是新的、比較嚴重

  • F1(🔴 高):GitLab 個人存取權杖寫在版控文件裡,綁著本專案的 CI 專案編號
  • F2(🔴 高)公司套件倉庫(Nexus)的管理員帳密 + 檔案儲存(MinIO)金鑰寫在交接文件裡

F2 值得特別注意:上一個案子查到「同一個套件倉庫走沒加密的連線」,現在又查到「管理員帳密外流」——同一個目標的兩個弱點,加起來比單看任何一個都嚴重

其餘 6 條多與先前已記錄的重複(POC 資料庫密碼、四家 AI 金鑰、Google OAuth 密鑰、原廠管理員密碼等)。

§5

⚠️ 卡片點名的「27 支 API 權限形狀表」,工具只做了 5 支

開卡時明寫那是「本 arc 最有價值的產出」。工具實際只查了 auth 4 支 + project 1 支,其餘 22 支沒碰——尤其 participant 那 7 支(「你在這個專案能幹嘛」的資料源,風險僅次於 auth)。

這是連續第三個案子出現同樣的事(FR-081 三棒、FR-082 一棒都是「卡片點名的重點工具沒答」)。這張表要靠人補,建議在 D1 驗收時一起補完。

§6

這次結果可信到什麼程度

「這 11 條是真的嗎」→ ✅ 可信。 33 票全投、零漏投、零中斷,stamp 乾淨的 verified。檢查員主動降了兩條嚴重度。首腦另開檔核對範圍內三條,全部屬實,而 F10 多查出「這是刻意設計」這件工具沒講的事。

「是不是只有這 11 條」→ ❌ 不可信。 快篩模式;而且 27 支 API 只查了 5 支,剩下 22 支等於沒查。8 條範圍外的發現也不代表 docs/scripts/ 被檢查過。

§7

修正卡

依決策者 2026-09-10 裁定:先不開卡。 三條範圍內發現已登記進跨 arc 總表 §3(「掃出來但還沒開卡的」),之後從總表統一決定要修哪些。

登記時已寫進具體修法與行號,任何人接手都能直接動工。

§8

座標

  • 跨 arc 總表:../security-scan-consolidated/README.md(§3 有這三條的完整修法)
  • 直接相關的前案FR-079 F13——本 arc 的起點
  • 同屬 AI 功能面:FR-082(AI 聊天機器人,共用同一把 AI 金鑰)
  • 首腦手冊:.claude/skills/security-scan-lead/SKILL.md
  • branch:BE repo 與 jedi monorepo 都在 feature/FR-075
§9

文件

以下全部由 build 掃資料夾產生,新增檔案重 build 即自動出現。標題連結指向渲染後的 HTML,md 連向源檔。

其他文件

文件 類型 標題 最後更新
scan-D2-host-wiringmd 文件 D2 檢查結果:AI 儀表板的接線與 27 支查詢功能 未提交
§10

Notion 卡

卡片內容(決策紀錄、驗收條件)以 Notion 為準,本頁只記座標。

關係 卡號 標題 狀態
母案 CM-1639 FR-083 AI 儀表板(jedi-ai-dashboard)資安掃描(兩棒,只掃不修)
子卡 CM-1640 D2 宿主接線與 27 支 API 名冊(18 檔,BE repo) 修正待驗證
子卡 CM-1641 D1 套件本體(34 檔,jedi monorepo) Not started