本卡屬 FR-188(母卡 CM-3728),修 FR-187 資安掃描發現的 #242、#243、#244、#247、#248(皆低,3:0)。嚴重度:低×5。發現原文、檔名行號、面板票數在 docs/features/FR-187-2611-post-fr172-security-scan/reports/(工作坊工作區 compliance-manager-be/.worktrees/CM-3711/ 裡,主線還沒合;總表 docs/features/security-scan-consolidated/README.md §3.1 同樣在那裡)。Stage 未排,由排批的人決定(見下方「排批注意」)。

問題是什麼(白話)

五條的前提都是「攻擊者已經控制一台註冊過的 Agent」。Agent 裝在客戶機器上,要假設它可能被控制,主系統收它的回報時不能全信。

#242:Agent 送來的錯誤日誌,message 不是字串(陣列或物件)時跳過 8KB 截斷、整包存進 agent_logs。

#243:事件去重鍵直接拼 Agent 自報的 at 與 job_id,長度格式不限,存 Redis 24 小時;換個 at 就能無限送,灌滿 Redis 影響其他 Agent。

#244:主控台稽核紀錄的「操作者」是 Agent 自報的,主系統直接換成那個帳號身分寫稽核,還查真實暱稱——能以主系統任何管理員的名義寫「某人在主控台做了某事」(只限它自己租戶)。

#247:一家公司的 Agent 自己要求更新時,_rebatch 在該 Agent 租戶身分下算「下一批是第幾批」,但每分鐘排程用系統身分、只依批次號分組不分租戶 → 被排進另一家公司那次推送的同一批,讓對方的分批升級卡住或被自動暫停(資安修正版推不出去)。

#248:Agent 上傳升級紀錄只限單檔 10MB、不限份數,換工單編號就多存一份,job_id 只過格式白名單、不檢查這台是否真被派過 → 塞滿主機硬碟。

在哪裡

/Users/chouraymond/Projects/Billows/Audit-Manager/compliance-manager-be/domain/support/service/agent_log_domain_service.py:60-67  只對 str 截斷
/Users/chouraymond/Projects/Billows/Audit-Manager/compliance-manager-be/app/remote_agent/service/agent_event_dispatcher.py:92/119  去重鍵組法與 set(ex=)
/Users/chouraymond/Projects/Billows/Audit-Manager/compliance-manager-be/core/plugins/_agent_console_audit.py:98-102  actor 直接當操作者
/Users/chouraymond/Projects/Billows/Audit-Manager/compliance-manager-be/app/product_update/service/agent_rollout_service.py:448-466/483  _advance_group 分組、_rebatch 算批次
/Users/chouraymond/Projects/Billows/Audit-Manager/compliance-manager-be/core/plugins/_agent_console_update.py:90  tenant_context
/Users/chouraymond/Projects/Billows/Audit-Manager/compliance-manager-be/app/product_update/service/agent_update_event_handlers.py:183-186/236-249  _row lock_or_create、_save_log

行號以 2026-11-09 主線為準,對不上就以內容為準。

怎麼修

要寫測試