本卡屬 FR-187(母卡 CM-3711),第 4 批 I:證據檔經長輪詢存取、自主執行報告、測試端點(主系統 repo
compliance-manager-be,5 檔/約 1241 行)。只掃不修。工作坊會用.claude/workshop-prompts/dispatch-<本卡號>.md當開場 prompt 直接啟動掃描,小弟不必自己打指令。
用 Claude Code 官方 claude-security plugin 掃「證據檔經長輪詢存取、自主執行報告、測試端點」這一塊,找出資安問題,寫成 PM 與新手工程師都看得懂的報告。只找問題、不修問題,修是另外開卡的事。
存在客戶 Agent 上的證據檔,FR-181 改成經長輪詢上傳與下載(remote_agent_adapter.py 大改);檔案下載端點的歸屬登記多了幾種;自主執行紀錄的報告下載;以及一支壓測用、免登入的假端點。
證據檔是客戶的稽核資料。下載時沒核歸屬,就是 FR-086 那一型「任何帳號拿檔案編號就能拿別家的檔」;Agent 產的 HTML 報告直接在瀏覽器開,腳本就跑在主系統網域上。
背景:這一輪掃的是 2026-11-01(FR-172 開案)到 11-09 之間主專案與 jedi-remote-agent 新寫或大改的程式(FR-171/172/178/179/180/181/182),這些程式都沒掃過。
api/common/file_protect.py
core/plugins/_file_ownership.py
infra/upload_file/remote_agent_adapter.py
core/plugins/_agent_local_runs.py
core/plugins/_bench_longpoll.py
檔數 5、約 1241 行。驗檔數:git -C <工作目錄> ls-files -- api/common/file_protect.py core/plugins/_file_ownership.py infra/upload_file/remote_agent_adapter.py core/plugins/_agent_local_runs.py core/plugins/_bench_longpoll.py | wc -l 應為 5。scope 外的檔不要讀,除非下面「重點看什麼」明寫「只追這幾行」;越界的發現首腦驗收時會挑掉。
首腦讀過程式碼後認為最容易出事的地方,是思考起點不是檢查清單,行號以 2026-11-09 的主線為準,對不上就以內容為準。工具不會照這份走,掃完後你要自己逐條對一遍:工具沒報的,開檔看一眼,寫「人工查過:成立/不成立/為什麼」。
remote_agent_adapter.py:96-107 get_file:upload_file_repo.get_by_uid(uid) 這個查詢有沒有 RLS 與擁有者限制(FR-086 總表第 34 項的檔案隔離);_verify_integrity 比對 sha256。:71-94 save_file:檔名 file.filename 送給 Agent;Agent 回的 file_uid 只驗是不是字串(:91),有沒有形狀檢查。:109-117 fetch_agent_blob:agent_file_uid 由誰給、有沒有形狀檢查;:118 delete_file 的權限。_file_ownership.py、file_protect.py 新增的歸屬類型:「讀=能力點、刪=一律拒」這類規則有沒有正確套上,新類型會不會落到預設放行。_agent_local_runs.py(新增 58 行):自主執行報告是 Agent 產的 HTML,下載回應有沒有 CSP sandbox、nosniff、強制下載。_bench_longpoll.py:免登入、會佔住執行緒的假端點,掛載條件是 DEBUG 或 BENCH_LONGPOLL=1(main.py:197-199,只追這三行)。確認出貨設定兩個都不會成立。FR-077(2026-09)掃過 jedi-remote-agent 與主系統接線的舊版,FR-086 掃過檔案上傳下載,FR-177(2026-11-05~07)掃過 Agent 本體;結論在主系統 repo docs/features/security-scan-consolidated/README.md,只是參照,沒有經過本棒的三人投票。