本卡屬 FR-076(母卡 CM-1566),掃 License 鏈的第 2 棒:License 授權狀態與 API(jedi-license-runtime)。只掃不修。
用 Claude Code 的 claude-security plugin,掃 jedi-license-runtime 的「License 授權狀態與 API」這一塊(約 33 個檔),找出資安問題並產出報告。只找問題、不修問題——修正是後續另外開卡的事。
驗章之後的部分:照存哪、狀態怎麼轉(生效/到期/寬限/停權)、誰能上傳或指派照、租戶之間怎麼隔離。驗章再嚴,這層寫錯一樣能繞——例如把別人的照塞進自己租戶、或讓停權狀態不生效。
這些是給你的思考起點,不是檢查清單——掃描工具會自己找,這裡列的是首腦讀過程式碼後認為最容易出事的地方:
routes.py 的註解說「本檔的 Resource 自己不掛任何認證 decorator,認證形狀是宿主決定的」,靠宿主注入 decorator。追到主專案確認每個端點實際掛了什麼——有沒有哪個端點漏掛?平台管理員專屬的端點(指派照、停權、解除停權)守門夠不夠?license_tenant_resolver 怎麼決定租戶?license_id 有沒有唯一性約束、跨租戶重複怎麼處理?license_expiry_state_machine):到期、寬限期、停權之間的轉換有沒有可以卡住或跳過的路徑?suspended_at 被清空的條件是什麼、誰能清?migrations/001、002):license 表的 RLS 寫對了嗎?跟 jedi-common 已知的 fail-open(無 context 或 tenant_id 為 0 即 super admin,見 FR-075 CM-1559)疊加起來會怎樣?request-license、extend):它會帶 API token 打外部服務。token 從哪來、目標 URL 能不能被呼叫端指定(SSRF)?plugin.py 的每一個預設值——fail-open 還是 fail-closed?(本套件從未被掃過)
第一步:確認 plugin 在,並讀掃描 job 的作業書,照它的步驟走:
ls /Users/chouraymond/.claude/plugins/cache/claude-plugins-official/claude-security/0.10.2.3/skills/claude-security/
cat /Users/chouraymond/.claude/plugins/cache/claude-plugins-official/claude-security/0.10.2.3/skills/claude-security/jobs/scan-codebase.md
第二步:驗 scope 檔數,對上 33 才啟動(避免整包誤掃):