本卡屬 FR-177(母卡 CM-3507),第 4 棒 A4:檢測規則包下載與解壓(Agent repo,3 檔/約 1011 行)。只掃不修。工作坊會用
.claude/workshop-prompts/dispatch-<本卡號>.md當開場 prompt 直接啟動掃描,小弟不必自己打指令。
用 Claude Code 官方 claude-security plugin 掃 Guidant AI Agent(裝在客戶機器上的那支程式,repo evidence-agent)的「檢測規則包下載與解壓」這一塊,找出資安問題並寫成 PM 與新手工程師都看得懂的報告。只找問題、不修問題,修是另外開卡的事。
主系統派掃描任務時會附帶一份「檢測規則包」(CINC Auditor profile,本質是可執行的 Ruby 程式),Agent 把它下載、驗、解壓到本機再餵給掃描工具。這棒看這條鏈。
規則包等於程式碼。FR-108 已在主系統側查出同族三個問題(總表第 115~117 項:網址型規則包放行 http、不記指紋、跳過壓縮檔驗證器),Agent 側對應的保護從沒掃過。archive_safety.py 是全 Agent 唯一的安全解壓實作,壞了連帶 A3 更新包與 A5 漏洞庫。
guidant_agent/sync/app/profile_cache.py
guidant_agent/sync/app/profile_sync.py
guidant_agent/shared/archive_safety.py
檔數 3、約 1011 行。驗檔數:cd <工作目錄> && git ls-files -- guidant_agent/sync/app/profile_cache.py guidant_agent/sync/app/profile_sync.py guidant_agent/shared/archive_safety.py | grep '\.py$' | wc -l 應為 3。scope 外的檔不要讀(研究員會越界,越界的發現首腦驗收時會挑掉)。
首腦讀過程式碼後認為最容易出事的地方,是思考起點不是檢查清單。工具不會照這份走,掃完後 runner 要自己逐條對一遍:工具沒報的,開檔看一眼寫「人工查過:成立/不成立/為什麼」。前幾輪最嚴重的發現(FR-076 L2 的 HIGH)都是 runner 照這清單追出來的,不是工具報的。
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 棒會掃)。本棒只確認「交出去的目錄內容是不是跟驗過的那份一致」。FR-108 D2-2a(主系統側)第 115~117 項為同族問題,未經本棒面板驗證、只是參照。本範圍 Agent 側從未掃過。