本卡屬 FR-114 資安修正(母卡 CM-2019),第 5 批「信任鏈與客戶層級設定」卡 5A-1,修 SUMMARY #1(出自 M01-1)。嚴重(全案最嚴重一項)。修法規格來自內化卡 CM-1982,計畫在 docs/features/FR-114-2609-security-fix-dispatch/batches/plan-b5A.md「卡 5A-1」段。
代理程式(agent,裝在客戶端負責跑掃描/收集證據回傳的小程式)透過五條通訊管道跟後端說話——註冊、心跳、拿工單、回覆完成(ack)、回傳結果——但沒有一條真的驗證「你是不是你說的那個代理程式」,系統只相信代理程式自己回報的 agent_uid。任何人只要知道一個 agent_uid,就能假冒那台機器打進來、拿到不屬於它的工單與證據。
更糟的是「撤銷」只斷了三分之一的路:管理員停用一個代理程式後,ack(回報完成)與 result(回傳結果)兩條管道照樣能用,等於停用形同虛設。
首腦核對:
needs_admin=False,沒有任何身分驗證要求/Users/chouraymond/Projects/Jedicogy/module/jedi-python-package/.claude/worktrees/jedi-wt-fix-security/<套件目錄>(branch fix/security-b1)改,只動自己那支套件的子目錄、只 git add 該子目錄下的檔。 本卡對應 jedi-remote-agent,worktree 建議 jedi-wt-fix-security/jedi-remote-agent。~/Projects/Billows/Audit-Manager/evidence-agent 開 worktree(例如 wt-fix-b5A-agent,branch fix/security-b1)改,只動這個 repo 的檔。jedi-remote-agent/jedi_remote_agent/api/routing.py:37-41 五條路由 needs_admin=False,缺身分驗證掛載點
jedi-remote-agent/jedi_remote_agent/api/routes/remote_agent_route.py:164 register(註冊)handler
jedi-remote-agent/jedi_remote_agent/api/routes/remote_agent_route.py:173 heartbeat(心跳)handler
jedi-remote-agent/jedi_remote_agent/api/routes/remote_agent_route.py:182 派工 handler
jedi-remote-agent/jedi_remote_agent/api/routes/remote_agent_route.py:188 ack/result handler
jedi-remote-agent/jedi_remote_agent/api/routes/remote_agent_route.py:11 檔頭自陳「純 mTLS」的舊註解,需一併更新避免誤導
jedi-remote-agent/jedi_remote_agent/app/service/agent_enrollment_service.py:377 revoked(已撤銷)查詢,目前只在部分路徑生效
jedi-remote-agent/jedi_remote_agent/domain/remote_agent/service/remote_agent_domain_service.py:107 派工側歸屬判斷落點
jedi-remote-agent/jedi_remote_agent/app/service/remote_agent_service.py:113 撤銷相關註解,「外層已驗證」舊註解之一,已隨 mTLS 退役、需清掉
evidence-agent/core/enroll.py:159 register 呼叫點
evidence-agent/core/enroll.py:236-237 heartbeat 呼叫點
evidence-agent/core/enroll.py:36-37 路徑常數
evidence-agent/core/task_executor.py:167-172 ack 與 result 共用同一段,兩者都沒查撤銷狀態(#1b 核心落點)
evidence-agent/core/task_executor.py:179 工單相關處理
evidence-agent/core/task_executor.py:210 證據下載
evidence-agent/core/task_executor.py:31-32 路徑常數
evidence-agent/core/cloud_trust.py:20-40 兩條 CA 憑證鏈說明,身分證明方式要接這裡
🔴 動手前回寫本卡確認方向,確認後開工(這張是全案最嚴重、且動 agent repo,即使決策者已初裁照建議,仍要回寫確認一次):
代理程式身分怎麼證明——短效通行證(類似會過期、要定期換發的臨時通行證)當主軸(決策者已初裁照建議);
工單歸屬比對要放在核心層(domain/app service),當成必要條件(不是可有可無的輔助檢查)(決策者已初裁照建議)。 回寫後停,狀態留 Not started,不要自己選。
① 依上面確認的方向,設計短效通行證的簽發與驗證方式(先查再寫:確認套件內有無既有 token/JWT 簽發工具可用,不要另起爐灶)。
② 五條管道(register/heartbeat/派工/ack/result)一起掛上驗證,不再只讀代理程式自報的 agent_uid。
③ 工單歸屬比對(這支通行證能不能動這張工單)做進核心層(domain/app service),當成必要條件,不是外圍輔助。