本卡屬 FR-120(母卡待填)。這一棒掃主專案自己程式的「專案摘要報告+關聯表+使用者/角色殘段」(20 檔/1658 行)。只掃不修。
用資安掃描工具掃 BE repo 自己寫的「專案摘要報告+關聯表+使用者/角色殘段」這塊程式(20 檔,約 1658 行),找出權限檢查、資料歸屬判斷上的漏洞並產出報告。只找問題、不修問題。
🔴 優先序第 9:摘要報告兩支 route 零守門字眼;核心問題是「同一家公司內,非專案成員能不能看別的專案」。
這些是首腦讀過盤點檔與程式碼後認為最容易出事的地方,是思考起點不是檢查清單:
user_import_template_app_service.py:產生使用者匯入範本 Excel。有一項已知的「公式注入」問題(=/+/-/@ 開頭的儲存格會被 Excel 當公式執行)這支是外部消費者,當時沒掃到。問:範本裡帶的現有資料有沒有先中和這幾個字元。role_app_service.py/user_app_service.py:主專案側對身分套件(jedi-iam)的包裝。問:有沒有繞過套件守門直接改角色。root_admin_reader.py:讀原廠管理員帳號。問:誰能呼叫、回傳什麼欄位。or 串起來,其中一個條件永遠成立;例外處理把「查不到資料」與「沒有權限」混成同一個回應;背景排程/系統身分執行的程式碼假設「呼叫者一定是自己人」;防重放/計次的邏輯只在單一進程內生效,多台機器或重啟就破功;註解寫「這裡刻意不檢查」但沒人在上一層真的檢查。本範圍從未被任何一棒正式掃過。
第一步:讀完本卡與母卡,再讀盤點檔 docs/features/FR-119-2609-security-scan-closeout/scan-inventory.md 對應本棒段落。
第二步:驗 scope 檔數,在 BE repo 跑下面指令,對上 20 檔/1658 行 才往下;對不上停下回報。
cd /Users/chouraymond/Projects/Billows/Audit-Manager/compliance-manager-be && git ls-files -- \
api/project_summary_report/__init__.py \
api/project_summary_report/routes/project_summary_report_route.py \
api/project_summary_report/routes/project_summary_report_history_route.py \
app/project_summary_report/service/project_summary_report_service.py \
app/project_summary_report/service/project_summary_report_history_service.py \
infra/project_summary_report/repository/project_summary_report_hitrosy_repo_impl.py \
api/project/__init__.py \
api/project/routes/project_route.py \
api/project/serializers/assessment_plan.py \
app/associations/service/project_assessment_plan_mapping_service.py \
app/associations/service/project_org_unit_mapping_service.py \
domain/associations/service/project_system_characteristic_mapping_domain_service.py \
infra/associations/repository/project_assessment_plan_mapping_repo_impl.py \
infra/associations/repository/project_org_unit_mapping_repo_impl.py \
infra/associations/repository/project_system_characteristic_mapping_repo_impl.py \
app/auth/service/role_app_service.py \
app/auth/service/user_app_service.py \
app/auth/service/user_import_template_app_service.py \
infra/auth/root_admin_reader.py \
common/util/audit_nickname.py | xargs wc -l | tail -1 # 20 檔、1658 行
第三步:把啟動指令交給決策者(你不能自己啟動)。/claude-security 帶 disable-model-invocation: true,模型用 Skill tool 叫會被直接擋掉;也不可以自己叫 Workflow、不可以自己派研究員/verifier 拼報告——三人面板的票數是工具程式碼算出來的,報告的驗證章就蓋在那個數字上。這是刻意設計,撞到不要 debug、不要找繞路。兩行要當同一則訊息送出,第二行不能省(省了會停在成本確認題):