FR-088 · 需求索引 · 本頁由 build 掃資料夾生成
🟡 已開卡待派(2026-09-12 首腦讀碼切六棒、母子卡一次建完 CM-1669~1675)。套件 72 檔+宿主 92 檔,切成六棒共 150 檔(宿主四棒 78 檔、套件兩棒 72 檔);第 1 棒 CM-1670 待決策者發令。一次只派一棒。
還沒掃。 首腦讀完程式碼,切成六棒、卡開好了,等決策者發令派第一棒。
讀碼時看到的三個最值得先驗的疑點(未經工具驗證,行號已開檔核對):
job_evidences 連租戶欄位都沒有——猜到一個編號就能讀(留言還能寫)別家客戶的資料。與 FR-086 檔案存取同一個病。force 旗標有兩個版本:權限檢查看外層的、實際做事的 handler 讀 ctx 裡的。外層填 false、ctx 裡填 true,非管理者可能跳過「規劃就緒檢查」啟動稽核。資料庫層實況(DEV 唯讀實查):流程相關 10 張表只有 1 張隔離是開的,其餘 9 張關閉,其中 3 張連租戶欄位都沒有。FR-087 只盤了其中 3 張,另 7 張是本 arc 新增的實況。
產品裡每一個稽核專案都是照一張「流程圖」在跑:規劃 → 稽核 → 改善 → 結案。每個階段誰能按「推進」、按了之後系統要做什麼,都由「流程引擎」決定。它也負責讀寫流程圖本身(BPMN 格式的 XML 檔),以及每個任務的完成、退回、留言、證明文件。
這個 arc 要回答三個問題:① 有沒有辦法操作別家客戶(或別的專案)的流程與任務?② 有沒有辦法用一張惡意流程圖把系統弄掛?③ 流程資料在資料庫層有沒有隔離兜底?
| 表 | 隔離開關 | 規則數 | 有租戶欄 | 筆數 | 備註 |
|---|---|---|---|---|---|
compliance.flow_templates |
✅ 開 | 4 | 有 | 12 | 本 arc 唯一開的 |
compliance.workflow_templates |
❌ 關 | 4 | 有 | 17,206 | 規則寫好但關(FR-087 第 2 項);191 筆凍結副本無租戶 |
compliance.workflow_executions |
❌ 關 | 3 | 有 | 10,944 | 缺 SELECT 規則(FR-087 第 4 項) |
compliance.job_executions |
❌ 關 | 0 | 有 | 10,783 | 03:10 排程依賴 CM-1559 fail-open(FR-087 第 5 項) |
compliance.element_variables |
❌ 關 | 0 | 無 | 3,011 | 流程留言存這裡 |
compliance.job_evidences |
❌ 關 | 0 | 無 | 782 | 任務證明 |
compliance.project_audit_rounds |
❌ 關 | 0 | 無 | 41 | 有 project_id 欄但服務層從不核對 |
compliance.stage_objects |
❌ 關 | 0 | 無 | — | 階段定義(平台層,可能刻意) |
compliance.round_stage_transitions |
❌ 關 | 0 | 無 | — | 階段歷程 |
compliance.workflow_templates_trans |
❌ 關 | 0 | 無 | 5,749 | 翻譯表 |
| 順序 | 棒 | 範圍 | 檔數 | scanRoot | 為什麼獨立一棒 |
|---|---|---|---|---|---|
| 1 | H2 任務完成/回退/留言/證明 | api/flow_engine/(除範本與階段 route)+job_evidence_service+common/authz/workflow.py+證明的 domain/infra |
23 | BE repo | 門檻最低:只要登入+猜編號;守門檔檔頭自陳「原本任何 JWT 持有者猜出 id 即可跨租戶操作」,補的守門只補了寫 |
| 2 | H1 稽核階段推進與回退 | stage_advance/stage_rollback/stage_object 三條鏈+oscal_stage_* handler+registry |
21 | BE repo | 改變稽核狀態的最高權限操作;專案↔︎輪次不核對、ctx.force 雙版本 |
| 3 | P1 流程圖範本與 BPMN 解析 | jedi_flow_engine/common/+範本鏈 10 檔 |
30 | jedi monorepo jedi-flow-engine/ |
XML 解析安全判準不同(解析炸彈、深度、實體);三支吃檔案路徑的方法 |
| 4 | H3 流程範本管理 | flow_template_route+flow_template_app_service+snapshot_service+範本 domain/infra |
13 | BE repo | 惡意 XML 的入口;本 arc 唯一隔離開著的表;凍結副本無租戶的成因 |
| 5 | H4 流程執行宿主服務與接線 | 1,559 行 workflow_execution_service+DI+儀表板申報+控制項對應 |
21 | BE repo | 守門與反查鏈的實作;三支申報給 AI 儀表板的 **kwargs 查詢 |
| 6 | P2 流程執行核心 | 套件其餘 42 檔(執行/任務/變數三條鏈+plugin) | 42 | jedi monorepo jedi-flow-engine/ |
零守門是設計;要做「公開方法 vs 宿主守門」對照表 |
排序判準是「可利用門檻」不是嚴重度標籤(決策者 2026-09-12 定的判準)。一次只派一棒。合理停損點在第 3 棒之後(74 檔已涵蓋門檻最低與解析面),但沒跑完六棒不能宣稱「jedi-flow-engine 掃過了」。
接縫:H2 的守門政策檔 ↔︎ H4 的 assert_project_participant/反查鏈(同一條鏈兩端,互相允許越界讀);P1 的 BpmnUtils ↔︎ P2 的執行 service(P2 只看餵進去的是什麼,不重審解析器);H1 的 complete_main_workflow_job 住在 H4 檔內。
檔數核對:總表寫「套件 80 檔/宿主約 60-80」,實際 git ls-files 套件 72(含 3 個 .bpmn 範例)、宿主 92。六棒合計 150 檔覆蓋宿主 78+套件 72;宿主未入棒的 14 檔全是空 __init__.py 與一支 deprecated shim(common/util/workflow_project_guard.py,2 行 re-export)。
| 棒 | 卡 | 檔 | 面板 | 發現 | 報告 |
|---|---|---|---|---|---|
| H2 任務完成/回退/留言/證明 | CM-1670 | 23 | ⬜ 待派 | — | — |
| H1 稽核階段推進與回退 | CM-1671 | 21 | ⬜ 待派 | — | — |
| P1 流程圖範本與 BPMN 解析 | CM-1672 | 30 | ⬜ 待派 | — | — |
| H3 流程範本管理 | CM-1673 | 13 | ⬜ 待派 | — | — |
| H4 流程執行宿主服務與接線 | CM-1674 | 21 | ⬜ 待派 | — | — |
| P2 流程執行核心 | CM-1675 | 42 | ⬜ 待派 | — | — |
(掃完驗收後才會有。依決策者裁定,修正卡先不開,發現登記進跨 arc 總表 §3。)
~/Projects/Jedicogy/module/jedi-python-package/jedi-flow-engine/(scanRoot 指此子目錄,與 FR-086 B1 同做法)api/flow_engine/、app/flow_engine/、domain/flow_engine/、infra/flow_engine/、di_containers/flow_engine/、di_containers/dashboard_apis/flow_engine.py、common/authz/workflow.py、app/flow_control/service/oscal_stage_*.pyworkflow_templates/workflow_executions/job_executions 三張表與 191 筆無主凍結副本)、FR-083 D2(儀表板 27 支零守門)、FR-079 F13(**kwargs 掉租戶過濾)、FR-086(四層全空的檢查清單).claude/skills/security-scan-lead/SKILL.mdsecurity-scan-consolidated/FR-075/handoff/security-scan-STATE.md卡片內容(決策紀錄、驗收條件)以 Notion 為準,本頁只記座標。
| 關係 | 卡號 | 標題 | 狀態 |
|---|---|---|---|
| 母案 | CM-1669 | FR-088 流程引擎(jedi-flow-engine)資安掃描(六棒 150 檔,只掃不修) | — |
| 子卡 | CM-1670 | H2 任務完成/回退/留言/證明(23 檔,BE repo) | Not started |
| 子卡 | CM-1671 | H1 稽核階段推進與回退(21 檔,BE repo) | Not started |
| 子卡 | CM-1672 | P1 流程圖範本與 BPMN 解析(30 檔,jedi monorepo) | Not started |
| 子卡 | CM-1673 | H3 流程範本管理(13 檔,BE repo) | Not started |
| 子卡 | CM-1674 | H4 流程執行宿主服務與接線(21 檔,BE repo) | Not started |
| 子卡 | CM-1675 | P2 流程執行核心(42 檔,jedi monorepo) | Not started |