本卡屬 FR-195(Agent 資安修正),第 2 批 F2。修 FR-186 掃描的 S1a F1(3/3 票);K2 F1 同一條,嚴重度:中。

這張卡做什麼(白話)

Agent 會向主系統登記一個「本機對外位址」,主系統的人按「開啟主控台」時,登入用的一次性入場券就送到這個位址。現在只要有一般的維運權限(ops.update)就能把這個位址改成任何 https 網站。攻擊者改成自己的網站後,等權限更大的人按「開啟主控台」,入場券就落到他手上,五分鐘內拿去登入就變成那個人。改成跟「更換主系統」同一套規矩:只有本機管理員能改,而且要再輸一次本機管理員密碼。

問題在哪(行號首腦 2026-11-11 對主線 b8b1158 重核過,仍然有效)

改哪些檔

guidant_agent/console/api/ops_routes.py
test/test_console_ops.py(只動 `TestBaseUrlRoute` 這個 class)

怎麼做

行為變更

主控台「改本機對外位址」:非本機管理員會收到 403(AGENT_CONSOLE_LOCAL_ADMIN_REQUIRED);本機管理員沒帶密碼或密碼錯會收到 400。畫面要配合改(下一張卡 F2-FE,同一批);這張卡只做後端,後端先合回時畫面按儲存會收到 400「本機管理員密碼不正確」,不會壞資料。

要補的測試

首腦試做過:改完只有 1 支既有測試變紅——test/test_console_ops.py:561 TestBaseUrlRoute::test_change_and_errors(它用一般 ops.update 身分改位址成功)。把它改成用本機管理員身分登入(sub 是 local-admin,寫法參考同檔其他用 local-admin 的測試)並在 body 帶 password,密碼檢查用 monkeypatch 讓 local_auth.check_password 回 True。同一個 class 的 test_needs_ops_update(:564)不用改。另加兩支:有 ops.update 但不是本機管理員 → 403 AGENT_CONSOLE_LOCAL_ADMIN_REQUIRED;密碼錯 → 400 且 change_base_url_from_console 沒被呼叫。第 1 批的 F3 已經改過這個測試檔 :92 附近的 fixture(假工具位址換成本機迴路),行號可能位移幾行,以 class 名稱 TestBaseUrlRoute 為準。

跑測試的方法(首腦實測過,照抄)