本卡屬 FR-186(Agent 本體資安掃描第二輪),第 1 批 S6:檢測規則包下載與解壓(Agent repo,3 檔/約 1081 行)。只掃不修。工作坊用
.claude/workshop-prompts/dispatch-<本卡號>.md當開場 prompt 直接啟動掃描。
用 Claude Code 官方 claude-security plugin 掃 Guidant AI Agent(repo evidence-agent)的「檢測規則包下載與解壓」,找出資安問題,寫成 PM 與新手工程師都看得懂的報告。只找問題、不修問題。
FR-177 掃過(舊卡 CM-3511),之後有改動;這次重掃要回答兩件事:上次修的有沒有守住、新改的程式有沒有新洞。 範圍按業務模組垂直切(入口→流程→資料),權限漏洞常在層與層的接縫上。
guidant_agent/sync/app/profile_cache.py
guidant_agent/sync/app/profile_sync.py
guidant_agent/shared/archive_safety.py
檔數 3、約 1081 行。驗檔數:git ls-files -- guidant_agent/sync/app/profile_cache.py guidant_agent/sync/app/profile_sync.py guidant_agent/shared/archive_safety.py | grep -v /tests/ | wc -l 應為 3。scope 外的檔不要當發現報;為核對呼叫端翻範圍外的檔可以,報告標「只為查證」。
首腦標的思考起點,不是檢查清單。掃完後 runner 逐條對一遍:工具沒報的,開檔看一眼寫「人工查過:成立/不成立/為什麼」。FR-177 的人工補查抓到的問題不比工具少。(以下沿用 FR-177 舊卡的重點,行號是舊版、以檔名與函式名為準。)
archive_safety.py:130-146:缺 sha256 時的兩種處置(中止 vs 略過對帳、只記 log)——哪些呼叫者走「略過」?對 profile 來說這條路有沒有關死。對照 FR-108 第 117 項,網址型來源在主系統側就不帶 sha,到 Agent 這邊是不是正好走進「略過」。archive_safety.py:185-198 解壓:用 zipfile.extract 逐檔;路徑逃逸靠什麼擋(Python 版本的 filter= 參數?自己判 ..?);tar 與 zip 兩種格式是否同一套檢查;解壓後總大小/檔數上限(zip bomb)在 :238-245 怎麼算。profile_cache.py:29-30 完成標記存來源壓縮檔 sha256——cache 目錄的路徑由誰決定(uid 進檔名有沒有過濾);同一 uid 不同租戶會不會互相命中。profile_sync.py:162-168 回報主系統「這份 profile 我拿到了、sha 是 X」——sha 是自己算的還是抄主系統給的;error[:ERROR_MAX] 截斷的錯誤訊息會不會帶出本機路徑。GET /api/1.0/agents/files/<uid>(profile_cache.py:9-10)——uid 是主系統任務裡給的,Agent 有沒有驗「這個 uid 屬於這次任務」,還是任何 uid 都會去拉(拿 Agent 當讀檔代理)。scan/adapters/connectors/inspec.py,不在本棒 scope,不要去讀;第三期 connectors 棒會掃)。本棒只確認「交出去的目錄內容是不是跟驗過的那份一致」。archive_safety 逐成員計數)——確認修法還在、沒被後來的 commit 弄回去、也沒有旁路。FR-177 25 棒報告在 Agent repo docs/security-scan/FR-177/scan-*.md,已登記的 22 條在主系統 repo docs/features/security-scan-consolidated/README.md §3.1 第 219~240 項(全部已修)。已修而且修法成立的不重報;修法不完整、或同一族換個欄位又出現,才報並註明對應項次。