本卡屬 FR-186(Agent 本體資安掃描第二輪),第 2 批 I2:LDAP 登入、離線操作者、來源網段白名單(Agent repo,9 檔/約 1104 行)。只掃不修。工作坊用
.claude/workshop-prompts/dispatch-<本卡號>.md當開場 prompt 直接啟動掃描。
用 Claude Code 官方 claude-security plugin 掃 Guidant AI Agent(repo evidence-agent)的「LDAP 登入、離線操作者、來源網段白名單」,找出資安問題,寫成 PM 與新手工程師都看得懂的報告。只找問題、不修問題。
FR-177 掃過(舊卡 CM-3514),之後有改動;這次重掃要回答兩件事:上次修的有沒有守住、新改的程式有沒有新洞。 範圍按業務模組垂直切(入口→流程→資料),權限漏洞常在層與層的接縫上。
guidant_agent/identity/adapters/ldap_source.py
guidant_agent/identity/app/ldap_source.py
guidant_agent/identity/app/offline_operators.py
guidant_agent/identity/app/offline_login_window.py
guidant_agent/identity/app/allow_cidr.py
guidant_agent/identity/domain/allow_cidr.py
guidant_agent/identity/ports/source_cidr_guard.py
guidant_agent/identity/adapters/operator_repo.py
guidant_agent/console/api/ldap_routes.py
檔數 9、約 1104 行。驗檔數:git ls-files -- guidant_agent/identity/adapters/ldap_source.py guidant_agent/identity/app/ldap_source.py guidant_agent/identity/app/offline_operators.py guidant_agent/identity/app/offline_login_window.py guidant_agent/identity/app/allow_cidr.py guidant_agent/identity/domain/allow_cidr.py guidant_agent/identity/ports/source_cidr_guard.py guidant_agent/identity/adapters/operator_repo.py guidant_agent/console/api/ldap_routes.py | grep -v /tests/ | wc -l 應為 9。scope 外的檔不要當發現報;為核對呼叫端翻範圍外的檔可以,報告標「只為查證」。
首腦標的思考起點,不是檢查清單。掃完後 runner 逐條對一遍:工具沒報的,開檔看一眼寫「人工查過:成立/不成立/為什麼」。FR-177 的人工補查抓到的問題不比工具少。(以下沿用 FR-177 舊卡的重點,行號是舊版、以檔名與函式名為準。)
ldap_source.py:206-207 bind 用的服務帳號密碼 cfg.get("secret"):存在哪(SecretStore?明文 JSON?)、主控台讀設定回傳時有沒有遮掉;:9 註明「拿密文當密碼去 bind 會被 AD 反鎖」,表示曾經有解密時機問題,現在怎麼解的。ldap_source.py:251-253 verify_user(account, password):帳號有沒有做 LDAP filter escape((、)、*、\\);空密碼送 bind 會變成匿名 bind 成功——有沒有在送出前擋空字串;encryption="none" 選項(:48)正式環境允許嗎。ldap_routes.py:「測試連線」端點收的是前端送來的整組設定(含密碼與 server 位址)還是只用已存的——若收整組,等於可以叫 Agent 對任意內網位址發 LDAP 連線(內網探測)並把客戶 AD 密碼送去攻擊者的假 LDAP。allow_cidr.py:170-211 make_guarded_server:判來源用的是 TCP 層 client_address(好)還是 HTTP header;:36-40 環境變數格式錯時「只放行本機」是 fail-closed(好),但 :72-78 主系統下發的 cidr 格式錯「忽略」後生效的是哪一組;domain/allow_cidr.py 的 intersect/effective:主系統下發的能不能放寬安裝時的基線(應該只能收窄)。offline_operators.py:139-182:名單怎麼驗來源(走 A2 的 JWT 之外還有沒有自己的簽章);ad_bindings 把 AD 帳號綁到本機 sub——綁定被改會不會讓 AD 的一般使用者對到管理員 scope;名單檔 RECEIVED_FILE 權限。source_cidr_guard.py 這個 port 被 files 的 8444 用(ARCHITECTURE 寫的)——除了 8444,8443 與 8000 有沒有用同一道;沒有的話是刻意還是漏。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 項(全部已修)。已修而且修法成立的不重報;修法不完整、或同一族換個欄位又出現,才報並註明對應項次。