本卡屬 FR-186(Agent 本體資安掃描第二輪),第 4 批 N2:網路診斷執行、判讀、儀表板、報告與限制(Agent repo,10 檔/約 1302 行)。只掃不修。工作坊用
.claude/workshop-prompts/dispatch-<本卡號>.md當開場 prompt 直接啟動掃描。
用 Claude Code 官方 claude-security plugin 掃 Guidant AI Agent(repo evidence-agent)的「網路診斷執行、判讀、儀表板、報告與限制」,找出資安問題,寫成 PM 與新手工程師都看得懂的報告。只找問題、不修問題。
FR-177 掃過(舊卡 CM-3532),之後有改動;這次重掃要回答兩件事:上次修的有沒有守住、新改的程式有沒有新洞。 範圍按業務模組垂直切(入口→流程→資料),權限漏洞常在層與層的接縫上。
guidant_agent/netdiag/app
guidant_agent/netdiag/domain
guidant_agent/netdiag/__init__.py
檔數 10、約 1302 行。驗檔數:git ls-files -- guidant_agent/netdiag/app guidant_agent/netdiag/domain guidant_agent/netdiag/__init__.py | grep -v /tests/ | wc -l 應為 10。scope 外的檔不要當發現報;為核對呼叫端翻範圍外的檔可以,報告標「只為查證」。
首腦標的思考起點,不是檢查清單。掃完後 runner 逐條對一遍:工具沒報的,開檔看一眼寫「人工查過:成立/不成立/為什麼」。FR-177 的人工補查抓到的問題不比工具少。(以下沿用 FR-177 舊卡的重點,行號是舊版、以檔名與函式名為準。)
app/report.py:161 行:HTML 報告怎麼組——探測 raw 輸出(遠端 banner、HTTP 回應、DNS TXT)有沒有 HTML 跳脫(html.escape)再嵌;報告是 inline_policy(B3)允許 inline 的 .html 嗎——若是,報告內容會在主控台 origin 下渲染,B3 說有 CSP sandbox,確認報告下載走的是那條。report.py 也在 subprocess 清單裡(grep 命中),看它跑了什麼。app/dashboard.py:313 行、app/runner.py:206 行:runner 怎麼排探測、並行幾個、逾時後殘留的子行程怎麼收;dashboard.py 也命中 subprocess——看是什麼指令、吃不吃使用者值。app/limits.py:86 行+domain/limits.py:106 行:admit_session_target(B2 看到路由層呼叫)的每 session 目標數、全域併發、CONNECTIONS/TIMEOUT_SEC 表——限制存在記憶體嗎(重啟歸零)、多 session 能不能疊加繞過、estimate 端點(:103 B2 看過)會不會被拿來無限次呼叫做 DNS 解析(每次 estimate 都解析目標=免費 DNS 查詢器)。app/verdict.py:331 行:判讀規則純邏輯,資安面只看它會不會把探測 raw 原文放進 verdict 訊息再進報告(同第 1 點)。app/ports.py:25 行、netdiag/__init__.py:61 行:從 sync 拿清冊、從 files 拿證據存檔 port——報告存進證據檔時的檔名、歸屬(started_by)、下載走 download-files scope(B2 看到 :201)。domain/:fixed_targets(cfg)(B2 :100 看到)固定目標是主系統位址——除此之外使用者能不能指定 Agent 自己(127.0.0.1、容器內其他服務 8000/8443)當目標做 port/http 探測(清冊會不會放行 loopback)。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 項(全部已修)。已修而且修法成立的不重報;修法不完整、或同一族換個欄位又出現,才報並註明對應項次。