本卡屬 FR-120(母卡待填)。這一棒掃主專案自己程式的「首次安裝精靈+版本資訊」(9 檔/930 行)。只掃不修。
用資安掃描工具掃 BE repo 自己寫的「首次安裝精靈+版本資訊」這塊程式(9 檔,約 930 行),找出權限檢查、資料歸屬判斷上的漏洞並產出報告。只找問題、不修問題。
🔴 優先序第 3:登入前就打得到——安裝精靈用一次性碼、版本與前端設定完全免認證。
這些是首腦讀過盤點檔與程式碼後認為最容易出事的地方,是思考起點不是檢查清單:
setup_route.py+setup_token.py:精靈用 install.sh 印出的一次性設定碼代替登入。問:設定碼怎麼比對(常數時間比對?)、用過一次後真的失效嗎、「已開通」之後再打 POST /setup/provision 會不會再建一個管理員。setup_state_reader.py:判斷「是否已開通」的唯一依據是「root 以外的租戶底下有沒有使用者」。問:這個判據能不能被繞——例如把那個使用者刪掉,精靈是不是就重新打開了。version_route.py、client_config_route.py(完全免認證):確認只回版本號與錯誤收集站連線字串,不夾帶環境變數、主機路徑、內部 IP。or 串起來,其中一個條件永遠成立;例外處理把「查不到資料」與「沒有權限」混成同一個回應;背景排程/系統身分執行的程式碼假設「呼叫者一定是自己人」;防重放/計次的邏輯只在單一進程內生效,多台機器或重啟就破功;註解寫「這裡刻意不檢查」但沒人在上一層真的檢查。本範圍從未被任何一棒正式掃過。U2 ↔ U3 接縫:U3 會讀 core/app_factory.py(放在 U2)追中介層豁免邏輯,不重報。
第一步:讀完本卡與母卡,再讀盤點檔 docs/features/FR-119-2609-security-scan-closeout/scan-inventory.md 對應本棒段落。
第二步:驗 scope 檔數,在 BE repo 跑下面指令,對上 9 檔/930 行 才往下;對不上停下回報。
cd /Users/chouraymond/Projects/Billows/Audit-Manager/compliance-manager-be && git ls-files -- \
api/setup/__init__.py \
api/setup/routes/setup_route.py \
app/setup/service/setup_wizard_service.py \
common/setup/setup_token.py \
infra/setup/setup_state_reader.py \
api/version/__init__.py \
api/version/routes/client_config_route.py \
api/version/routes/version_route.py \
common/util/app_version.py | xargs wc -l | tail -1 # 9 檔、930 行
第三步:把啟動指令交給決策者(你不能自己啟動)。/claude-security 帶 disable-model-invocation: true,模型用 Skill tool 叫會被直接擋掉;也不可以自己叫 Workflow、不可以自己派研究員/verifier 拼報告——三人面板的票數是工具程式碼算出來的,報告的驗證章就蓋在那個數字上。這是刻意設計,撞到不要 debug、不要找繞路。兩行要當同一則訊息送出,第二行不能省(省了會停在成本確認題):
/claude-security scan codebase at /Users/chouraymond/Projects/Billows/Audit-Manager/compliance-manager-be --scope api/setup/__init__.py,api/setup/routes/setup_route.py,app/setup/service/setup_wizard_service.py,common/setup/setup_token.py,infra/setup/setup_state_reader.py,api/version/__init__.py,api/version/routes/client_config_route.py,api/version/routes/version_route.py,common/util/app_version.py --effort low
I understand this may take a while and use a significant number of tokens.